risingwave_meta/hummock/manager/
utils.rs1macro_rules! commit_multi_var {
19 ($meta_store:expr, $($val_txn:expr),*) => {
20 {
21 async {
22 use crate::model::{MetadataModelError, InMemValTransaction, ValTransaction};
23 use sea_orm::TransactionTrait;
24 let mut txn = $meta_store.conn.begin().await.map_err(MetadataModelError::from)?;
25 $(
26 $val_txn.apply_to_txn(&mut txn).await?;
27 )*
28 txn.commit().await.map_err(MetadataModelError::from)?;
29 $(
30 $val_txn.commit();
31 )*
32 Result::Ok(())
33 }.await
34 }
35 };
36}
37
38macro_rules! commit_multi_var_with_provided_txn {
39 ($txn:expr, $($val_txn:expr),*) => {
40 {
41 async {
42 use crate::model::{InMemValTransaction, ValTransaction};
43 use crate::model::MetadataModelError;
44 $(
45 $val_txn.apply_to_txn(&mut $txn).await?;
46 )*
47 $txn.commit().await.map_err(MetadataModelError::from)?;
48 $(
49 $val_txn.commit();
50 )*
51 Result::Ok(())
52 }.await
53 }
54 };
55}
56
57pub(crate) use commit_multi_var;
58pub(crate) use commit_multi_var_with_provided_txn;
59use risingwave_hummock_sdk::ObjectIdRange;
60
61use crate::hummock::HummockManager;
62use crate::hummock::error::Result;
63use crate::hummock::sequence::next_raw_object_id;
64
65impl HummockManager {
66 #[cfg(test)]
67 pub(super) async fn check_state_consistency(&self) {
68 use crate::hummock::manager::compaction::Compaction;
69 use crate::hummock::manager::context::ContextInfo;
70 use crate::hummock::manager::versioning::Versioning;
71 let mut compaction_guard = self
72 .compaction
73 .write_with_process_name("check_state_consistency")
74 .await;
75 let mut versioning_guard = self
76 .versioning
77 .write_with_process_name("check_state_consistency")
78 .await;
79 let mut context_info_guard = self
80 .context_info
81 .write_with_process_name("check_state_consistency")
82 .await;
83 let get_state = |compaction_guard: &mut Compaction,
86 versioning_guard: &mut Versioning,
87 context_info_guard: &mut ContextInfo| {
88 let compact_statuses_copy = compaction_guard.compaction_statuses.clone();
89 let compact_task_assignment_copy = compaction_guard.compact_task_assignment.clone();
90 let pinned_versions_copy = context_info_guard.pinned_versions.clone();
91 let hummock_version_deltas_copy = versioning_guard.hummock_version_deltas.clone();
92 let version_stats_copy = versioning_guard.version_stats.clone();
93 ((
94 compact_statuses_copy,
95 compact_task_assignment_copy,
96 pinned_versions_copy,
97 hummock_version_deltas_copy,
98 version_stats_copy,
99 ),)
100 };
101 let mem_state = get_state(
102 &mut compaction_guard,
103 &mut versioning_guard,
104 &mut context_info_guard,
105 );
106 self.load_meta_store_state_impl(
107 &mut compaction_guard,
108 &mut versioning_guard,
109 &mut context_info_guard,
110 )
111 .await
112 .expect("Failed to load state from meta store");
113 let loaded_state = get_state(
114 &mut compaction_guard,
115 &mut versioning_guard,
116 &mut context_info_guard,
117 );
118 assert_eq!(
119 mem_state, loaded_state,
120 "hummock in-mem state is inconsistent with meta store state",
121 );
122 }
123
124 pub async fn get_new_object_ids(&self, number: u32) -> Result<ObjectIdRange> {
125 let start_id = next_raw_object_id(&self.env, number).await?;
126 Ok(ObjectIdRange::new(start_id, start_id + number as u64))
127 }
128}