extern crate sst;
use sst::Builder;
use sst::log::{LogBuilder, LogIterator, LogOptions, WriteBatch};
#[test]
fn read_while_writing_log() {
let _ = std::fs::remove_file("read_while_writing.log");
let mut log_builder = LogBuilder::new(LogOptions::default(), "read_while_writing.log").unwrap();
let mut wb = WriteBatch::default();
wb.put(b"key1", 1, b"value1").unwrap();
log_builder.append(&wb).unwrap();
log_builder.flush().unwrap();
log_builder.fsync().unwrap();
let mut log = LogIterator::new(LogOptions::default(), "read_while_writing.log").unwrap();
let kvp = log.next().unwrap().unwrap();
assert_eq!(b"key1", kvp.key);
assert_eq!(Some(b"value1".as_ref()), kvp.value);
assert_eq!(1, kvp.timestamp);
let mut wb = WriteBatch::default();
wb.put(b"key2", 2, b"value2").unwrap();
log_builder.append(&wb).unwrap();
log_builder.flush().unwrap();
log_builder.fsync().unwrap();
let mut log = LogIterator::new(LogOptions::default(), "read_while_writing.log").unwrap();
let kvp = log.next().unwrap().unwrap();
assert_eq!(b"key1", kvp.key);
assert_eq!(Some(b"value1".as_ref()), kvp.value);
assert_eq!(1, kvp.timestamp);
let kvp = log.next().unwrap().unwrap();
assert_eq!(b"key2", kvp.key);
assert_eq!(Some(b"value2".as_ref()), kvp.value);
assert_eq!(2, kvp.timestamp);
}
#[test]
fn read_while_writing_conclog() {
let _ = std::fs::remove_file("read_while_writing_concurrent.log");
let mut log_builder =
LogBuilder::new(LogOptions::default(), "read_while_writing_concurrent.log").unwrap();
let mut wb = WriteBatch::default();
wb.put(b"key1", 1, b"value1").unwrap();
log_builder.append(&wb).unwrap();
log_builder.flush().unwrap();
log_builder.fsync().unwrap();
let mut log =
LogIterator::new(LogOptions::default(), "read_while_writing_concurrent.log").unwrap();
let kvp = log.next().unwrap().unwrap();
assert_eq!(b"key1", kvp.key);
assert_eq!(Some(b"value1".as_ref()), kvp.value);
assert_eq!(1, kvp.timestamp);
let mut wb = WriteBatch::default();
wb.put(b"key2", 2, b"value2").unwrap();
log_builder.append(&wb).unwrap();
log_builder.flush().unwrap();
log_builder.fsync().unwrap();
let mut log =
LogIterator::new(LogOptions::default(), "read_while_writing_concurrent.log").unwrap();
let kvp = log.next().unwrap().unwrap();
assert_eq!(b"key1", kvp.key);
assert_eq!(Some(b"value1".as_ref()), kvp.value);
assert_eq!(1, kvp.timestamp);
let kvp = log.next().unwrap().unwrap();
assert_eq!(b"key2", kvp.key);
assert_eq!(Some(b"value2".as_ref()), kvp.value);
assert_eq!(2, kvp.timestamp);
}