mirror of https://github.com/facebook/rocksdb.git
45 lines
1.5 KiB
C++
45 lines
1.5 KiB
C++
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
|
|
// This source code is licensed under both the GPLv2 (found in the
|
|
// COPYING file in the root directory) and Apache 2.0 License
|
|
// (found in the LICENSE.Apache file in the root directory).
|
|
|
|
#include "rocksdb/secondary_cache.h"
|
|
|
|
#include "cache/cache_entry_roles.h"
|
|
|
|
namespace ROCKSDB_NAMESPACE {
|
|
|
|
namespace {
|
|
|
|
void NoopDelete(Cache::ObjectPtr, MemoryAllocator*) {}
|
|
|
|
size_t SliceSize(Cache::ObjectPtr obj) {
|
|
return static_cast<Slice*>(obj)->size();
|
|
}
|
|
|
|
Status SliceSaveTo(Cache::ObjectPtr from_obj, size_t from_offset, size_t length,
|
|
char* out) {
|
|
const Slice& slice = *static_cast<Slice*>(from_obj);
|
|
std::memcpy(out, slice.data() + from_offset, length);
|
|
return Status::OK();
|
|
}
|
|
|
|
Status FailCreate(const Slice&, Cache::CreateContext*, MemoryAllocator*,
|
|
Cache::ObjectPtr*, size_t*) {
|
|
return Status::NotSupported("Only for dumping data into SecondaryCache");
|
|
}
|
|
|
|
} // namespace
|
|
|
|
Status SecondaryCache::InsertSaved(const Slice& key, const Slice& saved) {
|
|
static Cache::CacheItemHelper helper_no_secondary{CacheEntryRole::kMisc,
|
|
&NoopDelete};
|
|
static Cache::CacheItemHelper helper{
|
|
CacheEntryRole::kMisc, &NoopDelete, &SliceSize,
|
|
&SliceSaveTo, &FailCreate, &helper_no_secondary};
|
|
// NOTE: depends on Insert() being synchronous, not keeping pointer `&saved`
|
|
return Insert(key, const_cast<Slice*>(&saved), &helper);
|
|
}
|
|
|
|
} // namespace ROCKSDB_NAMESPACE
|