Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
R
rust-rocksdb
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fangzongwu
rust-rocksdb
Commits
259b4e92
Commit
259b4e92
authored
Mar 01, 2016
by
Tyler Neely
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #48 from cstorey/master
Expose WriteOptions
parents
5616f81d
a7f36e53
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
107 additions
and
38 deletions
+107
-38
ffi.rs
src/ffi.rs
+3
-0
lib.rs
src/lib.rs
+1
-1
rocksdb.rs
src/rocksdb.rs
+75
-37
rocksdb_options.rs
src/rocksdb_options.rs
+28
-0
No files found.
src/ffi.rs
View file @
259b4e92
...
@@ -189,6 +189,9 @@ extern "C" {
...
@@ -189,6 +189,9 @@ extern "C" {
->
DBInstance
;
->
DBInstance
;
pub
fn
rocksdb_writeoptions_create
()
->
DBWriteOptions
;
pub
fn
rocksdb_writeoptions_create
()
->
DBWriteOptions
;
pub
fn
rocksdb_writeoptions_destroy
(
writeopts
:
DBWriteOptions
);
pub
fn
rocksdb_writeoptions_destroy
(
writeopts
:
DBWriteOptions
);
pub
fn
rocksdb_writeoptions_set_sync
(
writeopts
:
DBWriteOptions
,
v
:
bool
);
pub
fn
rocksdb_writeoptions_disable_WAL
(
writeopts
:
DBWriteOptions
,
v
:
c_int
);
pub
fn
rocksdb_put
(
db
:
DBInstance
,
pub
fn
rocksdb_put
(
db
:
DBInstance
,
writeopts
:
DBWriteOptions
,
writeopts
:
DBWriteOptions
,
k
:
*
const
u8
,
k
:
*
const
u8
,
...
...
src/lib.rs
View file @
259b4e92
...
@@ -16,7 +16,7 @@ pub use ffi as rocksdb_ffi;
...
@@ -16,7 +16,7 @@ pub use ffi as rocksdb_ffi;
pub
use
ffi
::{
DBCompactionStyle
,
DBComparator
,
new_bloom_filter
};
pub
use
ffi
::{
DBCompactionStyle
,
DBComparator
,
new_bloom_filter
};
pub
use
rocksdb
::{
DB
,
DBIterator
,
DBVector
,
Direction
,
IteratorMode
,
Writable
,
pub
use
rocksdb
::{
DB
,
DBIterator
,
DBVector
,
Direction
,
IteratorMode
,
Writable
,
WriteBatch
};
WriteBatch
};
pub
use
rocksdb_options
::{
BlockBasedOptions
,
Options
};
pub
use
rocksdb_options
::{
BlockBasedOptions
,
Options
,
WriteOptions
};
pub
use
merge_operator
::
MergeOperands
;
pub
use
merge_operator
::
MergeOperands
;
pub
mod
rocksdb
;
pub
mod
rocksdb
;
pub
mod
ffi
;
pub
mod
ffi
;
...
...
src/rocksdb.rs
View file @
259b4e92
...
@@ -27,7 +27,7 @@ use std::str::from_utf8;
...
@@ -27,7 +27,7 @@ use std::str::from_utf8;
use
self
::
libc
::{
c_void
,
size_t
};
use
self
::
libc
::{
c_void
,
size_t
};
use
rocksdb_ffi
::{
self
,
DBCFHandle
,
error_message
};
use
rocksdb_ffi
::{
self
,
DBCFHandle
,
error_message
};
use
rocksdb_options
::
Options
;
use
rocksdb_options
::
{
Options
,
WriteOptions
}
;
pub
struct
DB
{
pub
struct
DB
{
inner
:
rocksdb_ffi
::
DBInstance
,
inner
:
rocksdb_ffi
::
DBInstance
,
...
@@ -381,16 +381,17 @@ impl DB {
...
@@ -381,16 +381,17 @@ impl DB {
Ok
(())
Ok
(())
}
}
pub
fn
write
(
&
self
,
batch
:
WriteBatch
)
->
Result
<
(),
String
>
{
pub
fn
write_opt
(
&
self
,
let
writeopts
=
unsafe
{
rocksdb_ffi
::
rocksdb_writeoptions_create
()
};
batch
:
WriteBatch
,
writeopts
:
&
WriteOptions
)
->
Result
<
(),
String
>
{
let
mut
err
:
*
const
i8
=
0
as
*
const
i8
;
let
mut
err
:
*
const
i8
=
0
as
*
const
i8
;
let
err_ptr
:
*
mut
*
const
i8
=
&
mut
err
;
let
err_ptr
:
*
mut
*
const
i8
=
&
mut
err
;
unsafe
{
unsafe
{
rocksdb_ffi
::
rocksdb_write
(
self
.inner
,
rocksdb_ffi
::
rocksdb_write
(
self
.inner
,
writeopts
.
clone
()
,
writeopts
.
inner
,
batch
.inner
,
batch
.inner
,
err_ptr
);
err_ptr
);
rocksdb_ffi
::
rocksdb_writeoptions_destroy
(
writeopts
);
}
}
if
!
err
.is_null
()
{
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
return
Err
(
error_message
(
err
));
...
@@ -398,6 +399,10 @@ impl DB {
...
@@ -398,6 +399,10 @@ impl DB {
return
Ok
(());
return
Ok
(());
}
}
pub
fn
write
(
&
self
,
batch
:
WriteBatch
)
->
Result
<
(),
String
>
{
self
.write_opt
(
batch
,
&
WriteOptions
::
new
())
}
pub
fn
get
(
&
self
,
key
:
&
[
u8
])
->
Result
<
Option
<
DBVector
>
,
String
>
{
pub
fn
get
(
&
self
,
key
:
&
[
u8
])
->
Result
<
Option
<
DBVector
>
,
String
>
{
unsafe
{
unsafe
{
let
readopts
=
rocksdb_ffi
::
rocksdb_readoptions_create
();
let
readopts
=
rocksdb_ffi
::
rocksdb_readoptions_create
();
...
@@ -538,22 +543,22 @@ impl DB {
...
@@ -538,22 +543,22 @@ impl DB {
pub
fn
snapshot
(
&
self
)
->
Snapshot
{
pub
fn
snapshot
(
&
self
)
->
Snapshot
{
Snapshot
::
new
(
self
)
Snapshot
::
new
(
self
)
}
}
}
impl
Writable
for
DB
{
pub
fn
put_opt
(
&
self
,
fn
put
(
&
self
,
key
:
&
[
u8
],
value
:
&
[
u8
])
->
Result
<
(),
String
>
{
key
:
&
[
u8
],
value
:
&
[
u8
],
writeopts
:
&
WriteOptions
)
->
Result
<
(),
String
>
{
unsafe
{
unsafe
{
let
writeopts
=
rocksdb_ffi
::
rocksdb_writeoptions_create
();
let
mut
err
:
*
const
i8
=
0
as
*
const
i8
;
let
mut
err
:
*
const
i8
=
0
as
*
const
i8
;
let
err_ptr
:
*
mut
*
const
i8
=
&
mut
err
;
let
err_ptr
:
*
mut
*
const
i8
=
&
mut
err
;
rocksdb_ffi
::
rocksdb_put
(
self
.inner
,
rocksdb_ffi
::
rocksdb_put
(
self
.inner
,
writeopts
.
clone
()
,
writeopts
.
inner
,
key
.as_ptr
(),
key
.as_ptr
(),
key
.len
()
as
size_t
,
key
.len
()
as
size_t
,
value
.as_ptr
(),
value
.as_ptr
(),
value
.len
()
as
size_t
,
value
.len
()
as
size_t
,
err_ptr
);
err_ptr
);
rocksdb_ffi
::
rocksdb_writeoptions_destroy
(
writeopts
);
if
!
err
.is_null
()
{
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
return
Err
(
error_message
(
err
));
}
}
...
@@ -561,106 +566,105 @@ impl Writable for DB {
...
@@ -561,106 +566,105 @@ impl Writable for DB {
}
}
}
}
fn
put_cf
(
&
self
,
pub
fn
put_cf_opt
(
&
self
,
cf
:
DBCFHandle
,
cf
:
DBCFHandle
,
key
:
&
[
u8
],
key
:
&
[
u8
],
value
:
&
[
u8
])
value
:
&
[
u8
],
writeopts
:
&
WriteOptions
)
->
Result
<
(),
String
>
{
->
Result
<
(),
String
>
{
unsafe
{
unsafe
{
let
writeopts
=
rocksdb_ffi
::
rocksdb_writeoptions_create
();
let
mut
err
:
*
const
i8
=
0
as
*
const
i8
;
let
mut
err
:
*
const
i8
=
0
as
*
const
i8
;
let
err_ptr
:
*
mut
*
const
i8
=
&
mut
err
;
let
err_ptr
:
*
mut
*
const
i8
=
&
mut
err
;
rocksdb_ffi
::
rocksdb_put_cf
(
self
.inner
,
rocksdb_ffi
::
rocksdb_put_cf
(
self
.inner
,
writeopts
.
clone
()
,
writeopts
.
inner
,
cf
,
cf
,
key
.as_ptr
(),
key
.as_ptr
(),
key
.len
()
as
size_t
,
key
.len
()
as
size_t
,
value
.as_ptr
(),
value
.as_ptr
(),
value
.len
()
as
size_t
,
value
.len
()
as
size_t
,
err_ptr
);
err_ptr
);
rocksdb_ffi
::
rocksdb_writeoptions_destroy
(
writeopts
);
if
!
err
.is_null
()
{
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
return
Err
(
error_message
(
err
));
}
}
Ok
(())
Ok
(())
}
}
}
}
pub
fn
merge_opt
(
&
self
,
fn
merge
(
&
self
,
key
:
&
[
u8
],
value
:
&
[
u8
])
->
Result
<
(),
String
>
{
key
:
&
[
u8
],
value
:
&
[
u8
],
writeopts
:
&
WriteOptions
)
->
Result
<
(),
String
>
{
unsafe
{
unsafe
{
let
writeopts
=
rocksdb_ffi
::
rocksdb_writeoptions_create
();
let
mut
err
:
*
const
i8
=
0
as
*
const
i8
;
let
mut
err
:
*
const
i8
=
0
as
*
const
i8
;
let
err_ptr
:
*
mut
*
const
i8
=
&
mut
err
;
let
err_ptr
:
*
mut
*
const
i8
=
&
mut
err
;
rocksdb_ffi
::
rocksdb_merge
(
self
.inner
,
rocksdb_ffi
::
rocksdb_merge
(
self
.inner
,
writeopts
.
clone
()
,
writeopts
.
inner
,
key
.as_ptr
(),
key
.as_ptr
(),
key
.len
()
as
size_t
,
key
.len
()
as
size_t
,
value
.as_ptr
(),
value
.as_ptr
(),
value
.len
()
as
size_t
,
value
.len
()
as
size_t
,
err_ptr
);
err_ptr
);
rocksdb_ffi
::
rocksdb_writeoptions_destroy
(
writeopts
);
if
!
err
.is_null
()
{
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
return
Err
(
error_message
(
err
));
}
}
Ok
(())
Ok
(())
}
}
}
}
fn
merge_cf_opt
(
&
self
,
fn
merge_cf
(
&
self
,
cf
:
DBCFHandle
,
cf
:
DBCFHandle
,
key
:
&
[
u8
],
key
:
&
[
u8
],
value
:
&
[
u8
])
value
:
&
[
u8
],
writeopts
:
&
WriteOptions
)
->
Result
<
(),
String
>
{
->
Result
<
(),
String
>
{
unsafe
{
unsafe
{
let
writeopts
=
rocksdb_ffi
::
rocksdb_writeoptions_create
();
let
mut
err
:
*
const
i8
=
0
as
*
const
i8
;
let
mut
err
:
*
const
i8
=
0
as
*
const
i8
;
let
err_ptr
:
*
mut
*
const
i8
=
&
mut
err
;
let
err_ptr
:
*
mut
*
const
i8
=
&
mut
err
;
rocksdb_ffi
::
rocksdb_merge_cf
(
self
.inner
,
rocksdb_ffi
::
rocksdb_merge_cf
(
self
.inner
,
writeopts
.
clone
()
,
writeopts
.
inner
,
cf
,
cf
,
key
.as_ptr
(),
key
.as_ptr
(),
key
.len
()
as
size_t
,
key
.len
()
as
size_t
,
value
.as_ptr
(),
value
.as_ptr
(),
value
.len
()
as
size_t
,
value
.len
()
as
size_t
,
err_ptr
);
err_ptr
);
rocksdb_ffi
::
rocksdb_writeoptions_destroy
(
writeopts
);
if
!
err
.is_null
()
{
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
return
Err
(
error_message
(
err
));
}
}
Ok
(())
Ok
(())
}
}
}
}
fn
delete_opt
(
&
self
,
fn
delete
(
&
self
,
key
:
&
[
u8
])
->
Result
<
(),
String
>
{
key
:
&
[
u8
],
writeopts
:
&
WriteOptions
)
->
Result
<
(),
String
>
{
unsafe
{
unsafe
{
let
writeopts
=
rocksdb_ffi
::
rocksdb_writeoptions_create
();
let
mut
err
:
*
const
i8
=
0
as
*
const
i8
;
let
mut
err
:
*
const
i8
=
0
as
*
const
i8
;
let
err_ptr
:
*
mut
*
const
i8
=
&
mut
err
;
let
err_ptr
:
*
mut
*
const
i8
=
&
mut
err
;
rocksdb_ffi
::
rocksdb_delete
(
self
.inner
,
rocksdb_ffi
::
rocksdb_delete
(
self
.inner
,
writeopts
.
clone
()
,
writeopts
.
inner
,
key
.as_ptr
(),
key
.as_ptr
(),
key
.len
()
as
size_t
,
key
.len
()
as
size_t
,
err_ptr
);
err_ptr
);
rocksdb_ffi
::
rocksdb_writeoptions_destroy
(
writeopts
);
if
!
err
.is_null
()
{
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
return
Err
(
error_message
(
err
));
}
}
Ok
(())
Ok
(())
}
}
}
}
fn
delete_cf_opt
(
&
self
,
fn
delete_cf
(
&
self
,
cf
:
DBCFHandle
,
key
:
&
[
u8
])
->
Result
<
(),
String
>
{
cf
:
DBCFHandle
,
key
:
&
[
u8
],
writeopts
:
&
WriteOptions
)
->
Result
<
(),
String
>
{
unsafe
{
unsafe
{
let
writeopts
=
rocksdb_ffi
::
rocksdb_writeoptions_create
();
let
mut
err
:
*
const
i8
=
0
as
*
const
i8
;
let
mut
err
:
*
const
i8
=
0
as
*
const
i8
;
let
err_ptr
:
*
mut
*
const
i8
=
&
mut
err
;
let
err_ptr
:
*
mut
*
const
i8
=
&
mut
err
;
rocksdb_ffi
::
rocksdb_delete_cf
(
self
.inner
,
rocksdb_ffi
::
rocksdb_delete_cf
(
self
.inner
,
writeopts
.
clone
()
,
writeopts
.
inner
,
cf
,
cf
,
key
.as_ptr
(),
key
.as_ptr
(),
key
.len
()
as
size_t
,
key
.len
()
as
size_t
,
err_ptr
);
err_ptr
);
rocksdb_ffi
::
rocksdb_writeoptions_destroy
(
writeopts
);
if
!
err
.is_null
()
{
if
!
err
.is_null
()
{
return
Err
(
error_message
(
err
));
return
Err
(
error_message
(
err
));
}
}
...
@@ -669,6 +673,40 @@ impl Writable for DB {
...
@@ -669,6 +673,40 @@ impl Writable for DB {
}
}
}
}
impl
Writable
for
DB
{
fn
put
(
&
self
,
key
:
&
[
u8
],
value
:
&
[
u8
])
->
Result
<
(),
String
>
{
self
.put_opt
(
key
,
value
,
&
WriteOptions
::
new
())
}
fn
put_cf
(
&
self
,
cf
:
DBCFHandle
,
key
:
&
[
u8
],
value
:
&
[
u8
])
->
Result
<
(),
String
>
{
self
.put_cf_opt
(
cf
,
key
,
value
,
&
WriteOptions
::
new
())
}
fn
merge
(
&
self
,
key
:
&
[
u8
],
value
:
&
[
u8
])
->
Result
<
(),
String
>
{
self
.merge_opt
(
key
,
value
,
&
WriteOptions
::
new
())
}
fn
merge_cf
(
&
self
,
cf
:
DBCFHandle
,
key
:
&
[
u8
],
value
:
&
[
u8
])
->
Result
<
(),
String
>
{
self
.merge_cf_opt
(
cf
,
key
,
value
,
&
WriteOptions
::
new
())
}
fn
delete
(
&
self
,
key
:
&
[
u8
])
->
Result
<
(),
String
>
{
self
.delete_opt
(
key
,
&
WriteOptions
::
new
())
}
fn
delete_cf
(
&
self
,
cf
:
DBCFHandle
,
key
:
&
[
u8
])
->
Result
<
(),
String
>
{
self
.delete_cf_opt
(
cf
,
key
,
&
WriteOptions
::
new
())
}
}
impl
WriteBatch
{
impl
WriteBatch
{
pub
fn
new
()
->
WriteBatch
{
pub
fn
new
()
->
WriteBatch
{
WriteBatch
{
WriteBatch
{
...
...
src/rocksdb_options.rs
View file @
259b4e92
...
@@ -30,6 +30,10 @@ pub struct Options {
...
@@ -30,6 +30,10 @@ pub struct Options {
pub
inner
:
rocksdb_ffi
::
DBOptions
,
pub
inner
:
rocksdb_ffi
::
DBOptions
,
}
}
pub
struct
WriteOptions
{
pub
inner
:
rocksdb_ffi
::
DBWriteOptions
,
}
impl
Drop
for
Options
{
impl
Drop
for
Options
{
fn
drop
(
&
mut
self
)
{
fn
drop
(
&
mut
self
)
{
unsafe
{
unsafe
{
...
@@ -46,6 +50,14 @@ impl Drop for BlockBasedOptions {
...
@@ -46,6 +50,14 @@ impl Drop for BlockBasedOptions {
}
}
}
}
impl
Drop
for
WriteOptions
{
fn
drop
(
&
mut
self
)
{
unsafe
{
rocksdb_ffi
::
rocksdb_writeoptions_destroy
(
self
.inner
);
}
}
}
impl
BlockBasedOptions
{
impl
BlockBasedOptions
{
pub
fn
new
()
->
BlockBasedOptions
{
pub
fn
new
()
->
BlockBasedOptions
{
let
block_opts
=
unsafe
{
let
block_opts
=
unsafe
{
...
@@ -315,3 +327,19 @@ impl Options {
...
@@ -315,3 +327,19 @@ impl Options {
}
}
}
}
}
}
impl
WriteOptions
{
pub
fn
new
()
->
WriteOptions
{
let
write_opts
=
unsafe
{
rocksdb_ffi
::
rocksdb_writeoptions_create
()
};
let
rocksdb_ffi
::
DBWriteOptions
(
opt_ptr
)
=
write_opts
;
if
opt_ptr
.is_null
()
{
panic!
(
"Could not create rocksdb write options"
.to_string
());
}
WriteOptions
{
inner
:
write_opts
}
}
pub
fn
set_sync
(
&
mut
self
,
sync
:
bool
)
{
unsafe
{
rocksdb_ffi
::
rocksdb_writeoptions_set_sync
(
self
.inner
,
sync
);
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment