aboutsummaryrefslogtreecommitdiffstats
path: root/log_db
diff options
context:
space:
mode:
authorJan Tuomi <jan@jantuomi.fi>2024-10-07 14:44:18 +0300
committerJan Tuomi <jan@jantuomi.fi>2024-10-07 15:16:03 +0300
commit02224c78f33aa183c57d72a0da06d58545b1a350 (patch)
treebf1016fec0b1e29fd2178b3fabc19075ca6a2f0a /log_db
parenta4efc83f7f29c6ef8ac9b4c57201c9ecc31266b3 (diff)
Implement some of the py bindings
Diffstat (limited to 'log_db')
-rw-r--r--log_db/benches/benchmark.rs12
-rw-r--r--log_db/src/lib.rs15
-rw-r--r--log_db/tests/integration.rs30
3 files changed, 29 insertions, 28 deletions
diff --git a/log_db/benches/benchmark.rs b/log_db/benches/benchmark.rs
index 384c9b7..5174bdb 100644
--- a/log_db/benches/benchmark.rs
+++ b/log_db/benches/benchmark.rs
@@ -25,7 +25,7 @@ pub fn upsert_various_initial_sizes(c: &mut Criterion) {
.expect("Failed to convert tmpdir path to str");
let mut db = DB::configure()
.data_dir(&data_dir)
- .fields(&vec![
+ .fields(vec![
(Field::Id, RecordField::int()),
(Field::Name, RecordField::string()),
(Field::Data, RecordField::bytes()),
@@ -60,7 +60,7 @@ pub fn upsert_write_durability(c: &mut Criterion) {
.expect("Failed to convert tmpdir path to str");
let mut db = DB::configure()
.data_dir(&data_dir)
- .fields(&vec![
+ .fields(vec![
(Field::Id, RecordField::int()),
(Field::Name, RecordField::string()),
(Field::Data, RecordField::bytes()),
@@ -90,7 +90,7 @@ pub fn get_from_disk_various_initial_sizes(c: &mut Criterion) {
let mut db = DB::configure()
.data_dir(&data_dir)
.memtable_capacity(0)
- .fields(&vec![
+ .fields(vec![
(Field::Id, RecordField::int()),
(Field::Name, RecordField::string()),
(Field::Data, RecordField::bytes()),
@@ -122,7 +122,7 @@ pub fn get_various_memtable_capacities(c: &mut Criterion) {
// Create a db instance for prefilling
let mut db = DB::configure()
.data_dir(&data_dir)
- .fields(&vec![
+ .fields(vec![
(Field::Id, RecordField::int()),
(Field::Name, RecordField::string()),
(Field::Data, RecordField::bytes()),
@@ -140,7 +140,7 @@ pub fn get_various_memtable_capacities(c: &mut Criterion) {
group.bench_with_input(BenchmarkId::from_parameter(size), &size, |b, &_size| {
let mut db = DB::configure()
.data_dir(&data_dir)
- .fields(&vec![
+ .fields(vec![
(Field::Id, RecordField::int()),
(Field::Name, RecordField::string()),
(Field::Data, RecordField::bytes()),
@@ -175,7 +175,7 @@ fn reverse_read_file_with_various_buffer_sizes(c: &mut Criterion) {
// Create a db instance for prefilling
let mut db = DB::configure()
.data_dir(&data_dir)
- .fields(&vec![
+ .fields(vec![
(Field::Id, RecordField::int()),
(Field::Name, RecordField::string()),
(Field::Data, RecordField::bytes()),
diff --git a/log_db/src/lib.rs b/log_db/src/lib.rs
index 6787cf1..9c25dd8 100644
--- a/log_db/src/lib.rs
+++ b/log_db/src/lib.rs
@@ -21,19 +21,19 @@ use std::os::unix::fs::MetadataExt;
use std::path::{Path, PathBuf};
use std::thread;
-pub struct ConfigBuilder<'a, Field: Eq + Clone + Debug> {
+pub struct ConfigBuilder<Field: Eq + Clone + Debug> {
data_dir: Option<String>,
segment_size: Option<usize>,
memtable_capacity: Option<usize>,
- fields: Option<&'a Vec<(Field, RecordField)>>,
+ fields: Option<Vec<(Field, RecordField)>>,
primary_key: Option<Field>,
secondary_keys: Option<Vec<Field>>,
memtable_evict_policy: Option<MemtableEvictPolicy>,
write_durability: Option<WriteDurability>,
}
-impl<'a, Field: Eq + Clone + Debug> ConfigBuilder<'a, Field> {
- pub fn new() -> ConfigBuilder<'a, Field> {
+impl<'a, Field: Eq + Clone + Debug> ConfigBuilder<Field> {
+ pub fn new() -> ConfigBuilder<Field> {
ConfigBuilder::<Field> {
data_dir: None,
segment_size: None,
@@ -68,8 +68,8 @@ impl<'a, Field: Eq + Clone + Debug> ConfigBuilder<'a, Field> {
}
/// The field schema of the database.
- pub fn fields(&mut self, fields: &'a Vec<(Field, RecordField)>) -> &mut Self {
- self.fields = Some(fields);
+ pub fn fields(&mut self, fields: Vec<(Field, RecordField)>) -> &mut Self {
+ self.fields = Some(fields.clone());
self
}
@@ -114,6 +114,7 @@ impl<'a, Field: Eq + Clone + Debug> ConfigBuilder<'a, Field> {
memtable_capacity: self.memtable_capacity.unwrap_or(1_000_000),
fields: self
.fields
+ .as_ref()
.ok_or(io::Error::new(
io::ErrorKind::InvalidInput,
"Required config value \"fields\" is not set",
@@ -161,7 +162,7 @@ pub struct DB<Field: Eq + Clone + Debug> {
impl<Field: Eq + Clone + Debug> DB<Field> {
/// Create a new database configuration builder.
- pub fn configure() -> ConfigBuilder<'static, Field> {
+ pub fn configure() -> ConfigBuilder<Field> {
ConfigBuilder::new()
}
diff --git a/log_db/tests/integration.rs b/log_db/tests/integration.rs
index a2453b2..76ed853 100644
--- a/log_db/tests/integration.rs
+++ b/log_db/tests/integration.rs
@@ -38,7 +38,7 @@ fn test_initialize() {
let data_dir = tmp_dir();
let _db = DB::configure()
.data_dir(&data_dir)
- .fields(&vec![
+ .fields(vec![
(Field::Id, RecordField::int()),
(Field::Name, RecordField::string()),
(Field::Data, RecordField::bytes()),
@@ -53,7 +53,7 @@ fn test_upsert_and_get_with_primary_memtable() {
let data_dir = tmp_dir();
let mut db = DB::configure()
.data_dir(&data_dir)
- .fields(&vec![
+ .fields(vec![
(Field::Id, RecordField::int()),
(Field::Name, RecordField::string()),
(Field::Data, RecordField::bytes()),
@@ -86,7 +86,7 @@ fn test_upsert_and_get_without_memtable() {
let mut db = DB::configure()
.data_dir(&data_dir)
.memtable_capacity(0)
- .fields(&vec![
+ .fields(vec![
(Field::Id, RecordField::int()),
(Field::Name, RecordField::string().nullable()),
(Field::Data, RecordField::bytes()),
@@ -164,7 +164,7 @@ fn test_upsert_fails_on_null_in_non_nullable_field() {
let data_dir = tmp_dir();
let mut db = DB::configure()
.data_dir(&data_dir)
- .fields(&vec![(Field::Id, RecordField::int())])
+ .fields(vec![(Field::Id, RecordField::int())])
.primary_key(Field::Id)
.initialize()
.expect("Failed to initialize DB instance");
@@ -181,7 +181,7 @@ fn test_upsert_fails_on_invalid_number_of_values() {
let data_dir = tmp_dir();
let mut db = DB::configure()
.data_dir(&data_dir)
- .fields(&vec![
+ .fields(vec![
(Field::Id, RecordField::int()),
(Field::Name, RecordField::string()),
(Field::Data, RecordField::bytes()),
@@ -205,7 +205,7 @@ fn test_upsert_fails_on_invalid_value_type() {
let data_dir = tmp_dir();
let mut db = DB::configure()
.data_dir(&data_dir)
- .fields(&vec![
+ .fields(vec![
(Field::Id, RecordField::int()),
(Field::Name, RecordField::string()),
(Field::Data, RecordField::bytes()),
@@ -229,7 +229,7 @@ fn test_upsert_and_get_from_secondary_memtable() {
let data_dir = tmp_dir();
let mut db = DB::configure()
.data_dir(&data_dir)
- .fields(&vec![
+ .fields(vec![
(Field::Id, RecordField::int()),
(Field::Name, RecordField::string()),
(Field::Data, RecordField::bytes()),
@@ -291,7 +291,7 @@ fn test_initialize_and_read_from_primary_memtable_fixture_db2() {
let mut db = DB::configure()
.data_dir(&data_dir)
- .fields(&vec![
+ .fields(vec![
(Field::Id, RecordField::int()),
(Field::Name, RecordField::string()),
(Field::Data, RecordField::bytes()),
@@ -326,7 +326,7 @@ fn test_initialize_without_memtables_fixture_db3() {
let mut db = DB::configure()
.data_dir(&data_dir)
- .fields(&vec![
+ .fields(vec![
(Field::Id, RecordField::int()),
(Field::Name, RecordField::string()),
(Field::Data, RecordField::bytes()),
@@ -357,7 +357,7 @@ fn test_multiple_writing_threads() {
threads.push(thread::spawn(move || {
let mut db = DB::configure()
.data_dir(&data_dir)
- .fields(&vec![(Field::Id, RecordField::int())])
+ .fields(vec![(Field::Id, RecordField::int())])
.primary_key(Field::Id)
.initialize()
.expect("Failed to initialize DB instance");
@@ -376,7 +376,7 @@ fn test_multiple_writing_threads() {
// Read the records
let mut db = DB::configure()
.data_dir(&data_dir)
- .fields(&vec![(Field::Id, RecordField::int())])
+ .fields(vec![(Field::Id, RecordField::int())])
.primary_key(Field::Id)
.initialize()
.expect("Failed to initialize DB instance");
@@ -406,7 +406,7 @@ fn test_one_writer_and_multiple_reading_threads() {
threads.push(thread::spawn(move || {
let mut db = DB::configure()
.data_dir(&data_dir)
- .fields(&vec![(Field::Id, RecordField::int())])
+ .fields(vec![(Field::Id, RecordField::int())])
.primary_key(Field::Id)
.initialize()
.expect("Failed to initialize DB instance");
@@ -437,7 +437,7 @@ fn test_one_writer_and_multiple_reading_threads() {
threads.push(thread::spawn(move || {
let mut db = DB::configure()
.data_dir(&data_dir)
- .fields(&vec![(Field::Id, RecordField::int())])
+ .fields(vec![(Field::Id, RecordField::int())])
.primary_key(Field::Id)
.initialize()
.expect("Failed to initialize DB instance");
@@ -462,7 +462,7 @@ fn test_literal_escape_is_escaped() {
let mut db = DB::configure()
.data_dir(&data_dir)
.memtable_capacity(0) // disable memtables
- .fields(&vec![
+ .fields(vec![
(Field::Id, RecordField::int()),
(Field::Data, RecordField::bytes()),
])
@@ -505,7 +505,7 @@ fn test_log_is_rotated_when_capacity_reached() {
.data_dir(&data_dir)
.memtable_capacity(0) // disable memtables
.segment_size(10 * record_len) // small log segment size
- .fields(&vec![
+ .fields(vec![
(Field::Id, RecordField::int()),
(Field::Data, RecordField::bytes()),
])