extern rocksdb::Logger *create_rocksdb_ceph_logger();
+inline rocksdb::Slice make_slice(const std::optional<std::string>& bound) {
+ if (bound) {
+ return {*bound};
+ } else {
+ return {};
+ }
+}
+
/**
* Uses RocksDB to implement the KeyValueDB interface
*/
uint64_t cache_size = 0;
bool set_cache_flag = false;
friend class ShardMergeIteratorImpl;
+ friend class CFIteratorImpl;
friend class WholeMergeIteratorImpl;
/*
* See RocksDB's definition of a column family(CF) and how to use it.
void add_column_family(const std::string& cf_name, uint32_t hash_l, uint32_t hash_h,
size_t shard_idx, rocksdb::ColumnFamilyHandle *handle);
bool is_column_family(const std::string& prefix);
+ std::string_view get_key_hash_view(const prefix_shards& shards, const char* key, const size_t keylen);
+ rocksdb::ColumnFamilyHandle *get_key_cf(const prefix_shards& shards, const char* key, const size_t keylen);
rocksdb::ColumnFamilyHandle *get_cf_handle(const std::string& prefix, const std::string& key);
rocksdb::ColumnFamilyHandle *get_cf_handle(const std::string& prefix, const char* key, size_t keylen);
+ rocksdb::ColumnFamilyHandle *get_cf_handle(const std::string& prefix, const IteratorBounds& bounds);
int submit_common(rocksdb::WriteOptions& woptions, KeyValueDB::Transaction t);
int install_cf_mergeop(const std::string &cf_name, rocksdb::ColumnFamilyOptions *cf_opt);
protected:
rocksdb::Iterator *dbiter;
public:
- explicit RocksDBWholeSpaceIteratorImpl(rocksdb::Iterator *iter) :
- dbiter(iter) { }
- //virtual ~RocksDBWholeSpaceIteratorImpl() { }
+ explicit RocksDBWholeSpaceIteratorImpl(const RocksDBStore* db,
+ rocksdb::ColumnFamilyHandle* cf,
+ const KeyValueDB::IteratorOpts opts)
+ {
+ rocksdb::ReadOptions options = rocksdb::ReadOptions();
+ if (opts & ITERATOR_NOCACHE)
+ options.fill_cache=false;
+ dbiter = db->db->NewIterator(options, cf);
+ }
~RocksDBWholeSpaceIteratorImpl() override;
int seek_to_first() override;
size_t value_size() override;
};
- Iterator get_iterator(const std::string& prefix, IteratorOpts opts = 0) override;
+ Iterator get_iterator(const std::string& prefix, IteratorOpts opts = 0, IteratorBounds = IteratorBounds()) override;
private:
/// this iterator spans single cf
rocksdb::Iterator* new_shard_iterator(rocksdb::ColumnFamilyHandle* cf);