use super::transaction_manager::TransactionManager;
impl TransactionManager {
pub fn save_key_arg_slice(&mut self, key: &[u8]) {
if !self.cluster_enabled {
return;
}
self.txn_keys.push(key.into());
}
pub fn copy_existing_keys_to_scratch_buffer(&mut self) {
debug_assert!(self.cluster_enabled);
}
}
#[cfg(test)]
mod tests {
use std::sync::Arc;
use super::*;
use crate::transaction::watch_version_map::WatchVersionMap;
#[test]
fn save_key_arg_slice_registers_only_in_cluster_mode() {
let mut txn = TransactionManager::new(Arc::new(WatchVersionMap::new(64)), None, true);
txn.save_key_arg_slice(b"k1");
txn.save_key_arg_slice(b"k2");
assert_eq!(txn.txn_keys.len(), 2);
assert_eq!(txn.txn_keys[0].as_ref(), b"k1");
let mut standalone = TransactionManager::new(Arc::new(WatchVersionMap::new(64)), None, false);
standalone.save_key_arg_slice(b"k1");
assert!(standalone.txn_keys.is_empty());
}
#[test]
fn keys_are_independent_of_caller_buffer() {
let mut txn = TransactionManager::new(Arc::new(WatchVersionMap::new(64)), None, true);
let scratch = b"transient".to_vec();
txn.save_key_arg_slice(&scratch);
drop(scratch);
assert_eq!(txn.txn_keys[0].as_ref(), b"transient");
txn.copy_existing_keys_to_scratch_buffer();
}
}