Skip to content
This repository has been archived by the owner on Aug 4, 2024. It is now read-only.

Commit

Permalink
Improve build (#54)
Browse files Browse the repository at this point in the history
* Improve build

* Fix ci
  • Loading branch information
lewiszlw authored Oct 28, 2023
1 parent 0864d4a commit 0436b3e
Show file tree
Hide file tree
Showing 8 changed files with 91 additions and 26 deletions.
11 changes: 9 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ env:
CARGO_REGISTRIES_MY_REGISTRY_INDEX: https://github.com/rust-lang/crates.io-index

jobs:
check:
fmt:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
Expand All @@ -23,6 +23,12 @@ jobs:
with:
command: fmt
args: --all -- --check
# TODO follow up pr to fix clippy lints
# - name: Run cargo clippy
# uses: actions-rs/cargo@v1
# with:
# command: clippy
# args: -- -D warnings


build:
Expand All @@ -40,6 +46,7 @@ jobs:
uses: actions-rs/cargo@v1
with:
command: build
args: --all-features

test:
runs-on: ubuntu-20.04
Expand All @@ -56,4 +63,4 @@ jobs:
uses: actions-rs/cargo@v1
with:
command: test
args: --release --no-fail-fast
args: --release --all-features --no-fail-fast
8 changes: 5 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,9 @@ harness = false
[profile.release]
debug = true

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[features]
sled = ["dep:sled"]
rocksdb = ["dep:rocksdb"]

[dependencies]
thiserror = "1.0.24"
Expand Down Expand Up @@ -60,8 +62,8 @@ fslock = "0.2.1"
tonic = "0.10.2"
prost = "0.12"
# 其他数据库内核
sled = "0.34.7"
rocksdb = "0.21.0"
sled = { version = "0.34.7", optional = true }
rocksdb = { version = "0.21.0", optional = true }

[dev-dependencies]
assert_cmd = "0.11.0"
Expand Down
2 changes: 1 addition & 1 deletion examples/simple_crud.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use bytes::Bytes;
use kip_db::kernel::lsm::storage::{Config, KipStorage};
use kip_db::kernel::{CommandData, Storage};
use kip_db::kernel::Storage;
use kip_db::KernelError;
use tempfile::TempDir;

Expand Down
50 changes: 40 additions & 10 deletions src/bench/kernel_bench.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ use std::sync::atomic::AtomicU32;
use std::sync::atomic::Ordering::Relaxed;

use kip_db::kernel::lsm::storage::KipStorage;
use kip_db::kernel::rocksdb_storage::RocksdbStorage;
use kip_db::kernel::sled_storage::SledStorage;
use kip_db::kernel::Storage;

fn counter() -> usize {
Expand Down Expand Up @@ -194,26 +192,58 @@ fn empty_opens<T: Storage>(c: &mut Criterion) {

fn kv_bulk_load(c: &mut Criterion) {
bulk_load::<KipStorage>(c);
bulk_load::<SledStorage>(c);
bulk_load::<RocksdbStorage>(c);
#[cfg(feature = "sled")]
{
use kip_db::kernel::sled_storage::SledStorage;
bulk_load::<SledStorage>(c);
}
#[cfg(feature = "rocksdb")]
{
use kip_db::kernel::rocksdb_storage::RocksdbStorage;
bulk_load::<RocksdbStorage>(c);
}
}

fn kv_monotonic_crud(c: &mut Criterion) {
monotonic_crud::<KipStorage>(c);
monotonic_crud::<SledStorage>(c);
monotonic_crud::<RocksdbStorage>(c);
#[cfg(feature = "sled")]
{
use kip_db::kernel::sled_storage::SledStorage;
monotonic_crud::<SledStorage>(c);
}
#[cfg(feature = "rocksdb")]
{
use kip_db::kernel::rocksdb_storage::RocksdbStorage;
monotonic_crud::<RocksdbStorage>(c);
}
}

fn kv_random_crud(c: &mut Criterion) {
random_crud::<KipStorage>(c);
random_crud::<SledStorage>(c);
random_crud::<RocksdbStorage>(c);
#[cfg(feature = "sled")]
{
use kip_db::kernel::sled_storage::SledStorage;
random_crud::<SledStorage>(c);
}
#[cfg(feature = "rocksdb")]
{
use kip_db::kernel::rocksdb_storage::RocksdbStorage;
random_crud::<RocksdbStorage>(c);
}
}

fn kv_empty_opens(c: &mut Criterion) {
empty_opens::<KipStorage>(c);
empty_opens::<SledStorage>(c);
empty_opens::<RocksdbStorage>(c);
#[cfg(feature = "sled")]
{
use kip_db::kernel::sled_storage::SledStorage;
empty_opens::<SledStorage>(c);
}
#[cfg(feature = "rocksdb")]
{
use kip_db::kernel::rocksdb_storage::RocksdbStorage;
empty_opens::<RocksdbStorage>(c);
}
}

criterion_group!(
Expand Down
2 changes: 2 additions & 0 deletions src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,11 @@ pub enum KernelError {
#[error("CRC code does not match")]
CrcMisMatch,

#[cfg(feature = "sled")]
#[error(transparent)]
SledErr(#[from] sled::Error),

#[cfg(feature = "rocksdb")]
#[error(transparent)]
RocksdbErr(#[from] rocksdb::Error),

Expand Down
2 changes: 2 additions & 0 deletions src/kernel/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ use crate::KernelError;

pub mod io;
pub mod lsm;
#[cfg(feature = "rocksdb")]
pub mod rocksdb_storage;
#[cfg(feature = "sled")]
pub mod sled_storage;
pub mod utils;

Expand Down
5 changes: 2 additions & 3 deletions src/kernel/sled_storage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,10 @@ use bytes::Bytes;
use core::slice::SlicePattern;
use sled::Db;
use std::path::PathBuf;
use std::sync::Arc;

#[derive(Debug)]
pub struct SledStorage {
data_base: Arc<Db>,
data_base: Db,
}

#[async_trait]
Expand All @@ -24,7 +23,7 @@ impl Storage for SledStorage {

#[inline]
async fn open(path: impl Into<PathBuf> + Send) -> crate::kernel::KernelResult<Self> {
let db = Arc::new(sled::open(path.into())?);
let db = sled::open(path.into())?;

Ok(SledStorage { data_base: db })
}
Expand Down
37 changes: 30 additions & 7 deletions tests/tests.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
use bytes::Bytes;
use kip_db::kernel::io::{FileExtension, IoFactory, IoType};
use kip_db::kernel::lsm::storage::KipStorage;
use kip_db::kernel::sled_storage::SledStorage;
use kip_db::kernel::KernelResult;
use kip_db::kernel::Storage;
use std::io::{Read, Seek, SeekFrom, Write};
Expand All @@ -10,7 +9,11 @@ use walkdir::WalkDir;

#[test]
fn get_stored_value() -> KernelResult<()> {
get_stored_value_with_kv_store::<SledStorage>()?;
#[cfg(feature = "sled")]
{
use kip_db::kernel::sled_storage::SledStorage;
get_stored_value_with_kv_store::<SledStorage>()?;
}
get_stored_value_with_kv_store::<KipStorage>()?;
Ok(())
}
Expand Down Expand Up @@ -49,7 +52,11 @@ fn get_stored_value_with_kv_store<T: Storage>() -> KernelResult<()> {
// Should overwrite existent value.
#[test]
fn overwrite_value() -> KernelResult<()> {
overwrite_value_with_kv_store::<SledStorage>()?;
#[cfg(feature = "sled")]
{
use kip_db::kernel::sled_storage::SledStorage;
overwrite_value_with_kv_store::<SledStorage>()?;
}
overwrite_value_with_kv_store::<KipStorage>()?;

Ok(())
Expand Down Expand Up @@ -104,7 +111,11 @@ fn overwrite_value_with_kv_store<T: Storage>() -> KernelResult<()> {
// Should get `None` when getting a non-existent key.
#[test]
fn get_non_existent_value() -> KernelResult<()> {
get_non_existent_value_with_kv_store::<SledStorage>()?;
#[cfg(feature = "sled")]
{
use kip_db::kernel::sled_storage::SledStorage;
get_non_existent_value_with_kv_store::<SledStorage>()?;
}
get_non_existent_value_with_kv_store::<KipStorage>()?;

Ok(())
Expand Down Expand Up @@ -136,7 +147,11 @@ fn get_non_existent_value_with_kv_store<T: Storage>() -> KernelResult<()> {

#[test]
fn remove_non_existent_key() -> KernelResult<()> {
remove_non_existent_key_with_kv_store::<SledStorage>()?;
#[cfg(feature = "sled")]
{
use kip_db::kernel::sled_storage::SledStorage;
remove_non_existent_key_with_kv_store::<SledStorage>()?;
}
remove_non_existent_key_with_kv_store::<KipStorage>()?;

Ok(())
Expand All @@ -155,7 +170,11 @@ fn remove_non_existent_key_with_kv_store<T: Storage>() -> KernelResult<()> {

#[test]
fn remove_key() -> KernelResult<()> {
remove_key_with_kv_store::<SledStorage>()?;
#[cfg(feature = "sled")]
{
use kip_db::kernel::sled_storage::SledStorage;
remove_key_with_kv_store::<SledStorage>()?;
}
remove_key_with_kv_store::<KipStorage>()?;

Ok(())
Expand All @@ -182,7 +201,11 @@ fn remove_key_with_kv_store<T: Storage>() -> KernelResult<()> {
// Test data correctness after compaction.
#[test]
fn compaction() -> KernelResult<()> {
compaction_with_kv_store::<SledStorage>()?;
#[cfg(feature = "sled")]
{
use kip_db::kernel::sled_storage::SledStorage;
compaction_with_kv_store::<SledStorage>()?;
}
compaction_with_kv_store::<KipStorage>()?;

Ok(())
Expand Down

0 comments on commit 0436b3e

Please sign in to comment.