Merge pull request #256 from iSynaptic/gh-230

Adding format checks to CI build...
master
Jordan Terrell 6 years ago committed by GitHub
commit 5b8686487d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      .travis.yml
  2. 3
      librocksdb-sys/build.rs
  3. 2
      src/backup.rs
  4. 3
      src/compaction_filter.rs
  5. 208
      src/db.rs
  6. 4
      src/lib.rs
  7. 2
      tests/test_compationfilter.rs
  8. 6
      tests/test_db.rs
  9. 5
      tests/test_iterator.rs

@ -22,7 +22,12 @@ addons:
- libclang-3.9-dev
- clang-3.9
install:
- rustup component add rustfmt
- rustfmt -V
script:
- cargo fmt --all -- --check
- cargo test --manifest-path=librocksdb-sys/Cargo.toml
- cargo test

@ -119,7 +119,8 @@ fn build_rocksdb() {
.filter(|file| match *file {
"port/port_posix.cc" | "env/env_posix.cc" | "env/io_posix.cc" => false,
_ => true,
}).collect::<Vec<&'static str>>();
})
.collect::<Vec<&'static str>>();
// Add Windows-specific sources
lib_sources.push("port/win/port_win.cc");

@ -46,7 +46,7 @@ impl BackupEngine {
"Failed to convert path to CString \
when opening backup engine"
.to_owned(),
))
));
}
};

@ -45,7 +45,8 @@ impl<F> CompactionFilterFn for F
where
F: FnMut(u32, &[u8], &[u8]) -> Decision,
F: Send + 'static,
{}
{
}
pub struct CompactionFilterCallback<F>
where

@ -154,7 +154,7 @@ pub struct Snapshot<'a> {
/// ```
pub struct DBRawIterator<'a> {
inner: *mut ffi::rocksdb_iterator_t,
db: PhantomData<&'a DB>
db: PhantomData<&'a DB>,
}
/// An iterator over a database or column family, with specifiable
@ -214,7 +214,7 @@ impl<'a> DBRawIterator<'a> {
unsafe {
DBRawIterator {
inner: ffi::rocksdb_create_iterator(db.inner, readopts.inner),
db: PhantomData
db: PhantomData,
}
}
}
@ -227,7 +227,7 @@ impl<'a> DBRawIterator<'a> {
unsafe {
Ok(DBRawIterator {
inner: ffi::rocksdb_create_iterator_cf(db.inner, readopts.inner, cf_handle.inner),
db: PhantomData
db: PhantomData,
})
}
}
@ -603,7 +603,11 @@ impl<'a> Snapshot<'a> {
DBRawIterator::new(self.db, &readopts)
}
pub fn raw_iterator_cf_opt(&self, cf_handle: ColumnFamily, mut readopts: ReadOptions) -> Result<DBRawIterator, Error> {
pub fn raw_iterator_cf_opt(
&self,
cf_handle: ColumnFamily,
mut readopts: ReadOptions,
) -> Result<DBRawIterator, Error> {
readopts.set_snapshot(self);
DBRawIterator::new_cf(self.db, cf_handle, &readopts)
}
@ -613,17 +617,30 @@ impl<'a> Snapshot<'a> {
self.get_opt(key, readopts)
}
pub fn get_cf<K: AsRef<[u8]>>(&self, cf: ColumnFamily, key: K) -> Result<Option<DBVector>, Error> {
pub fn get_cf<K: AsRef<[u8]>>(
&self,
cf: ColumnFamily,
key: K,
) -> Result<Option<DBVector>, Error> {
let readopts = ReadOptions::default();
self.get_cf_opt(cf, key.as_ref(), readopts)
}
pub fn get_opt<K: AsRef<[u8]>>(&self, key: K, mut readopts: ReadOptions) -> Result<Option<DBVector>, Error> {
pub fn get_opt<K: AsRef<[u8]>>(
&self,
key: K,
mut readopts: ReadOptions,
) -> Result<Option<DBVector>, Error> {
readopts.set_snapshot(self);
self.db.get_opt(key.as_ref(), &readopts)
}
pub fn get_cf_opt<K: AsRef<[u8]>>(&self, cf: ColumnFamily, key: K, mut readopts: ReadOptions) -> Result<Option<DBVector>, Error> {
pub fn get_cf_opt<K: AsRef<[u8]>>(
&self,
cf: ColumnFamily,
key: K,
mut readopts: ReadOptions,
) -> Result<Option<DBVector>, Error> {
readopts.set_snapshot(self);
self.db.get_cf_opt(cf, key.as_ref(), &readopts)
}
@ -667,10 +684,11 @@ impl DB {
///
/// Column families opened using this function will be created with default `Options`.
pub fn open_cf<P, I, N>(opts: &Options, path: P, cfs: I) -> Result<DB, Error>
where P: AsRef<Path>,
where
P: AsRef<Path>,
I: IntoIterator<Item = N>,
N: AsRef<str> {
N: AsRef<str>,
{
let cfs = cfs
.into_iter()
.map(|name| ColumnFamilyDescriptor::new(name.as_ref(), Options::default()));
@ -679,17 +697,12 @@ impl DB {
}
/// Open a database with the given database options and column family descriptors.
pub fn open_cf_descriptors<P, I>(
opts: &Options,
path: P,
cfs: I,
) -> Result<DB, Error>
where P: AsRef<Path>,
I: IntoIterator<Item = ColumnFamilyDescriptor> {
let cfs: Vec<_> = cfs
.into_iter()
.collect();
pub fn open_cf_descriptors<P, I>(opts: &Options, path: P, cfs: I) -> Result<DB, Error>
where
P: AsRef<Path>,
I: IntoIterator<Item = ColumnFamilyDescriptor>,
{
let cfs: Vec<_> = cfs.into_iter().collect();
let path = path.as_ref();
let cpath = match CString::new(path.to_string_lossy().as_bytes()) {
@ -699,13 +712,14 @@ impl DB {
"Failed to convert path to CString \
when opening DB."
.to_owned(),
))
));
}
};
if let Err(e) = fs::create_dir_all(&path) {
return Err(Error::new(format!(
"Failed to create RocksDB directory: `{:?}`.", e
"Failed to create RocksDB directory: `{:?}`.",
e
)));
}
@ -764,7 +778,8 @@ impl DB {
}
for (n, h) in cfs_v.iter().zip(cfhandles) {
cf_map.write()
cf_map
.write()
.map_err(|e| Error::new(e.to_string()))?
.insert(n.name.clone(), h);
}
@ -838,7 +853,11 @@ impl DB {
self.write_opt(batch, &wo)
}
pub fn get_opt<K: AsRef<[u8]>>(&self, key: K, readopts: &ReadOptions) -> Result<Option<DBVector>, Error> {
pub fn get_opt<K: AsRef<[u8]>>(
&self,
key: K,
readopts: &ReadOptions,
) -> Result<Option<DBVector>, Error> {
if readopts.inner.is_null() {
return Err(Error::new(
"Unable to create RocksDB read options. \
@ -911,7 +930,11 @@ impl DB {
}
}
pub fn get_cf<K: AsRef<[u8]>>(&self, cf: ColumnFamily, key: K) -> Result<Option<DBVector>, Error> {
pub fn get_cf<K: AsRef<[u8]>>(
&self,
cf: ColumnFamily,
key: K,
) -> Result<Option<DBVector>, Error> {
self.get_cf_opt(cf, key.as_ref(), &ReadOptions::default())
}
@ -923,7 +946,7 @@ impl DB {
"Failed to convert path to CString \
when opening rocksdb"
.to_owned(),
))
));
}
};
let cf = unsafe {
@ -933,7 +956,9 @@ impl DB {
cname.as_ptr(),
));
self.cfs.write().map_err(|e| Error::new(e.to_string()))?
self.cfs
.write()
.map_err(|e| Error::new(e.to_string()))?
.insert(name.to_string(), cf_handle);
ColumnFamily {
@ -945,28 +970,28 @@ impl DB {
}
pub fn drop_cf(&self, name: &str) -> Result<(), Error> {
if let Some(cf) = self.cfs.write().map_err(|e| Error::new(e.to_string()))?
.remove(name) {
if let Some(cf) = self
.cfs
.write()
.map_err(|e| Error::new(e.to_string()))?
.remove(name)
{
unsafe {
ffi_try!(ffi::rocksdb_drop_column_family(self.inner, cf,));
}
Ok(())
} else {
Err(Error::new(
format!("Invalid column family: {}", name).to_owned()
format!("Invalid column family: {}", name).to_owned(),
))
}
}
/// Return the underlying column family handle.
pub fn cf_handle(&self, name: &str) -> Option<ColumnFamily> {
self.cfs
.read()
.ok()?
.get(name)
.map(|h| ColumnFamily {
self.cfs.read().ok()?.get(name).map(|h| ColumnFamily {
inner: *h,
db: PhantomData
db: PhantomData,
})
}
@ -991,7 +1016,11 @@ impl DB {
pub fn prefix_iterator<P: AsRef<[u8]>>(&self, prefix: P) -> DBIterator {
let mut opts = ReadOptions::default();
opts.set_prefix_same_as_start(true);
DBIterator::new(self, &opts, IteratorMode::From(prefix.as_ref(), Direction::Forward))
DBIterator::new(
self,
&opts,
IteratorMode::From(prefix.as_ref(), Direction::Forward),
)
}
pub fn iterator_cf(
@ -1016,7 +1045,7 @@ impl DB {
pub fn prefix_iterator_cf<P: AsRef<[u8]>>(
&self,
cf_handle: ColumnFamily,
prefix: P
prefix: P,
) -> Result<DBIterator, Error> {
let mut opts = ReadOptions::default();
opts.set_prefix_same_as_start(true);
@ -1043,14 +1072,14 @@ impl DB {
}
pub fn put_opt<K, V>(&self, key: K, value: V, writeopts: &WriteOptions) -> Result<(), Error>
where K: AsRef<[u8]>,
V: AsRef<[u8]> {
where
K: AsRef<[u8]>,
V: AsRef<[u8]>,
{
let key = key.as_ref();
let value = value.as_ref();
unsafe {
ffi_try!(ffi::rocksdb_put(
self.inner,
writeopts.inner,
@ -1070,14 +1099,14 @@ impl DB {
value: V,
writeopts: &WriteOptions,
) -> Result<(), Error>
where K: AsRef<[u8]>,
V: AsRef<[u8]> {
where
K: AsRef<[u8]>,
V: AsRef<[u8]>,
{
let key = key.as_ref();
let value = value.as_ref();
unsafe {
ffi_try!(ffi::rocksdb_put_cf(
self.inner,
writeopts.inner,
@ -1091,15 +1120,11 @@ impl DB {
}
}
pub fn merge_opt<K, V>(
&self,
key: K,
value: V,
writeopts: &WriteOptions,
) -> Result<(), Error>
where K: AsRef<[u8]>,
V: AsRef<[u8]> {
pub fn merge_opt<K, V>(&self, key: K, value: V, writeopts: &WriteOptions) -> Result<(), Error>
where
K: AsRef<[u8]>,
V: AsRef<[u8]>,
{
let key = key.as_ref();
let value = value.as_ref();
@ -1123,14 +1148,14 @@ impl DB {
value: V,
writeopts: &WriteOptions,
) -> Result<(), Error>
where K: AsRef<[u8]>,
V: AsRef<[u8]> {
where
K: AsRef<[u8]>,
V: AsRef<[u8]>,
{
let key = key.as_ref();
let value = value.as_ref();
unsafe {
ffi_try!(ffi::rocksdb_merge_cf(
self.inner,
writeopts.inner,
@ -1144,7 +1169,11 @@ impl DB {
}
}
pub fn delete_opt<K: AsRef<[u8]>>(&self, key: K, writeopts: &WriteOptions) -> Result<(), Error> {
pub fn delete_opt<K: AsRef<[u8]>>(
&self,
key: K,
writeopts: &WriteOptions,
) -> Result<(), Error> {
let key = key.as_ref();
unsafe {
@ -1164,7 +1193,6 @@ impl DB {
key: K,
writeopts: &WriteOptions,
) -> Result<(), Error> {
let key = key.as_ref();
unsafe {
@ -1180,30 +1208,34 @@ impl DB {
}
pub fn put<K, V>(&self, key: K, value: V) -> Result<(), Error>
where K: AsRef<[u8]>,
V: AsRef<[u8]> {
where
K: AsRef<[u8]>,
V: AsRef<[u8]>,
{
self.put_opt(key.as_ref(), value.as_ref(), &WriteOptions::default())
}
pub fn put_cf<K, V>(&self, cf: ColumnFamily, key: K, value: V) -> Result<(), Error>
where K: AsRef<[u8]>,
V: AsRef<[u8]> {
where
K: AsRef<[u8]>,
V: AsRef<[u8]>,
{
self.put_cf_opt(cf, key.as_ref(), value.as_ref(), &WriteOptions::default())
}
pub fn merge<K, V>(&self, key: K, value: V) -> Result<(), Error>
where K: AsRef<[u8]>,
V: AsRef<[u8]> {
where
K: AsRef<[u8]>,
V: AsRef<[u8]>,
{
self.merge_opt(key.as_ref(), value.as_ref(), &WriteOptions::default())
}
pub fn merge_cf<K, V>(&self, cf: ColumnFamily, key: K, value: V) -> Result<(), Error>
where K: AsRef<[u8]>,
V: AsRef<[u8]> {
where
K: AsRef<[u8]>,
V: AsRef<[u8]>,
{
self.merge_cf_opt(cf, key.as_ref(), value.as_ref(), &WriteOptions::default())
}
@ -1293,9 +1325,10 @@ impl WriteBatch {
/// Insert a value into the database under the given key.
pub fn put<K, V>(&mut self, key: K, value: V) -> Result<(), Error>
where K: AsRef<[u8]>,
V: AsRef<[u8]> {
where
K: AsRef<[u8]>,
V: AsRef<[u8]>,
{
let key = key.as_ref();
let value = value.as_ref();
@ -1312,9 +1345,10 @@ impl WriteBatch {
}
pub fn put_cf<K, V>(&mut self, cf: ColumnFamily, key: K, value: V) -> Result<(), Error>
where K: AsRef<[u8]>,
V: AsRef<[u8]> {
where
K: AsRef<[u8]>,
V: AsRef<[u8]>,
{
let key = key.as_ref();
let value = value.as_ref();
@ -1332,9 +1366,10 @@ impl WriteBatch {
}
pub fn merge<K, V>(&mut self, key: K, value: V) -> Result<(), Error>
where K: AsRef<[u8]>,
V: AsRef<[u8]> {
where
K: AsRef<[u8]>,
V: AsRef<[u8]>,
{
let key = key.as_ref();
let value = value.as_ref();
@ -1351,9 +1386,10 @@ impl WriteBatch {
}
pub fn merge_cf<K, V>(&mut self, cf: ColumnFamily, key: K, value: V) -> Result<(), Error>
where K: AsRef<[u8]>,
V: AsRef<[u8]> {
where
K: AsRef<[u8]>,
V: AsRef<[u8]>,
{
let key = key.as_ref();
let value = value.as_ref();

@ -71,8 +71,8 @@ mod slice_transform;
pub use compaction_filter::Decision as CompactionDecision;
pub use db::{
DBCompactionStyle, DBCompressionType, DBIterator, DBRawIterator, DBRecoveryMode,
DBVector, Direction, IteratorMode, ReadOptions, Snapshot, WriteBatch,
DBCompactionStyle, DBCompressionType, DBIterator, DBRawIterator, DBRecoveryMode, DBVector,
Direction, IteratorMode, ReadOptions, Snapshot, WriteBatch,
};
pub use slice_transform::SliceTransform;

@ -16,7 +16,7 @@ extern crate rocksdb;
mod util;
use rocksdb::{CompactionDecision, DB, Options};
use rocksdb::{CompactionDecision, Options, DB};
use util::DBPath;
#[cfg(test)]

@ -12,14 +12,14 @@
// See the License for the specific language governing permissions and
// limitations under the License.
extern crate rocksdb;
extern crate libc;
extern crate rocksdb;
mod util;
use libc::{size_t};
use libc::size_t;
use rocksdb::{DB, DBVector, Error, IteratorMode, Options, WriteBatch};
use rocksdb::{DBVector, Error, IteratorMode, Options, WriteBatch, DB};
use util::DBPath;
#[test]

@ -227,7 +227,7 @@ fn test_prefix_iterator_uses_full_prefix() {
([0, 1, 2, 1], b"555"),
([0, 2, 0, 0], b"666"),
([2, 0, 0, 0], b"777"),
([2,2,2,2], b"888")
([2, 2, 2, 2], b"888"),
];
let prefix_extractor = rocksdb::SliceTransform::create_fixed_prefix(1);
@ -243,7 +243,8 @@ fn test_prefix_iterator_uses_full_prefix() {
}
let prefix = [0, 1, 1];
let results: Vec<_> = db.prefix_iterator(&prefix)
let results: Vec<_> = db
.prefix_iterator(&prefix)
.map(|(_, v)| std::str::from_utf8(&v).unwrap().to_string())
.collect();

Loading…
Cancel
Save