linkrs_storage/engine/sync_wrapper/
transaction.rs1use super::SyncWrapper;
2use crate::engine::graph_storage::AutoCommitBatchWindow;
3use crate::StorageClient;
4use linkrs_core::StorageResult;
5use std::sync::Arc;
6
7impl<S: StorageClient + crate::AutoCommitBatchOps> crate::AutoCommitBatchOps for SyncWrapper<S> {
8 fn begin_auto_commit_batch(&self) -> StorageResult<Arc<AutoCommitBatchWindow>> {
9 self.inner.begin_auto_commit_batch()
10 }
11
12 fn bind_auto_commit_statement(
13 &self,
14 window: &Arc<AutoCommitBatchWindow>,
15 ) -> StorageResult<Self> {
16 let inner = self.inner.bind_auto_commit_statement(window)?;
17 Ok(SyncWrapper {
18 inner,
19 sync_manager: self.sync_manager.clone(),
20 enabled: self.enabled,
21 auto_commit_owner: self.auto_commit_owner,
22 })
23 }
24
25 fn finalize_auto_commit_batch(&self, window: &AutoCommitBatchWindow) -> StorageResult<()> {
26 self.inner.finalize_auto_commit_batch(window)
27 }
28}
29
30impl<S: StorageClient + crate::AutoCommitGroupOps> crate::AutoCommitGroupOps for SyncWrapper<S> {
31 fn begin_auto_commit_group(&self) -> StorageResult<Arc<AutoCommitBatchWindow>> {
32 self.inner.begin_auto_commit_group()
33 }
34
35 fn finalize_auto_commit_group(&self, window: &AutoCommitBatchWindow) -> StorageResult<()> {
36 self.inner.finalize_auto_commit_group(window)
37 }
38}
39
40impl<S: StorageClient + linkrs_transaction::UndoTarget + 'static>
41 linkrs_transaction::TransactionCommitSink for SyncWrapper<S>
42{
43 fn commit_transaction(
44 &self,
45 transaction_id: linkrs_core::types::TransactionId,
46 ) -> Result<linkrs_core::types::CommitLsn, String> {
47 self.commit_transaction_fact(transaction_id)
48 .map_err(|error| error.to_string())
49 }
50
51 fn commit_transaction_with_descriptor(
52 &self,
53 descriptor: &linkrs_transaction::TransactionCommitDescriptor,
54 ) -> Result<linkrs_core::types::CommitLsn, String> {
55 self.commit_transaction_fact_with_durability(
56 descriptor.transaction_id,
57 descriptor.durability,
58 )
59 .map_err(|error| error.to_string())
60 }
61
62 fn finalize_commit(
63 &self,
64 descriptor: &linkrs_transaction::TransactionCommitDescriptor,
65 commit_lsn: linkrs_core::types::CommitLsn,
66 ) -> Result<(), String> {
67 self.finalize_commit_fact(descriptor.transaction_id, commit_lsn)
68 .map_err(|error| error.to_string())
69 }
70
71 fn abort_transaction(
72 &self,
73 transaction_id: linkrs_core::types::TransactionId,
74 ) -> Result<(), String> {
75 self.abort_transaction_fact(transaction_id)
76 .map_err(|error| error.to_string())
77 }
78
79 fn abort_transaction_with_descriptor(
80 &self,
81 descriptor: &linkrs_transaction::TransactionAbortDescriptor,
82 ) -> Result<(), String> {
83 descriptor
84 .context
85 .execute_undo_logs(&self.inner)
86 .map_err(|error| error.to_string())?;
87 descriptor
88 .context
89 .clear_undo_logs()
90 .map_err(|error| error.to_string())?;
91 self.abort_transaction_fact(descriptor.transaction_id)
92 .map_err(|error| error.to_string())
93 }
94
95 fn auto_checkpoint_if_needed(&self) -> Result<(), String> {
96 use crate::StoragePersistenceOps;
97 let _ = <Self as StoragePersistenceOps>::auto_checkpoint_if_needed(self)
98 .map_err(|error| error.to_string())?;
99 Ok(())
100 }
101
102 fn recover_unfinalized_commits(&self) -> Result<usize, String> {
103 Ok(0)
109 }
110}