const bufferlist &to_set_bl)
{
string key = combine_strings(prefix, k);
- //bufferlist::c_str() is non-constant, so we need to make a copy
- bufferlist val = to_set_bl;
bat->Delete(rocksdb::Slice(key));
- bat->Put(rocksdb::Slice(key),
- rocksdb::Slice(val.c_str(), val.length()));
+
+ // bufferlist::c_str() is non-constant, so we can't call c_str()
+ if (to_set_bl.is_contiguous() && to_set_bl.length() > 0) {
+ bat->Put(rocksdb::Slice(key),
+ rocksdb::Slice(to_set_bl.buffers().front().c_str(),
+ to_set_bl.length()));
+ } else {
+ // make a copy
+ bufferlist val = to_set_bl;
+ bat->Put(rocksdb::Slice(key),
+ rocksdb::Slice(val.c_str(), val.length()));
+ }
}
void RocksDBStore::RocksDBTransactionImpl::rmkey(const string &prefix,