This is an automated email from the ASF dual-hosted git repository.
xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git
The following commit(s) were added to refs/heads/main by this push:
new 1cd70e30a feat(services/rocksdb): Add scan support (#2827)
1cd70e30a is described below
commit 1cd70e30a3fc9545c0402a9b67221452164d817c
Author: JLer <[email protected]>
AuthorDate: Wed Aug 9 14:38:35 2023 +0800
feat(services/rocksdb): Add scan support (#2827)
---
core/src/services/rocksdb/backend.rs | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/core/src/services/rocksdb/backend.rs
b/core/src/services/rocksdb/backend.rs
index fc1492664..9eaeb748a 100644
--- a/core/src/services/rocksdb/backend.rs
+++ b/core/src/services/rocksdb/backend.rs
@@ -110,6 +110,8 @@ impl kv::Adapter for Adapter {
Capability {
read: true,
write: true,
+ list: true,
+ blocking: true,
..Default::default()
},
)
@@ -138,6 +140,25 @@ impl kv::Adapter for Adapter {
fn blocking_delete(&self, path: &str) -> Result<()> {
Ok(self.db.delete(path)?)
}
+
+ async fn scan(&self, path: &str) -> Result<Vec<String>> {
+ self.blocking_scan(path)
+ }
+
+ fn blocking_scan(&self, path: &str) -> Result<Vec<String>> {
+ let it = self.db.prefix_iterator(path).map(|r| r.map(|(k, _v)| k));
+ let mut res = Vec::default();
+
+ for i in it {
+ let bs = i?.to_vec();
+ res.push(String::from_utf8(bs).map_err(|err| {
+ Error::new(ErrorKind::Unexpected, "store key is not valid
utf-8 string")
+ .set_source(err)
+ })?);
+ }
+
+ Ok(res)
+ }
}
impl From<rocksdb::Error> for Error {