Add a SecondaryCache::InsertSaved() API, use in CacheDumper impl (#10945)
Summary: Can simplify some ugly code in cache_dump_load_impl.cc by having an API in SecondaryCache that can directly consume persisted data. Pull Request resolved: https://github.com/facebook/rocksdb/pull/10945 Test Plan: existing tests for CacheDumper, added basic unit test Reviewed By: anand1976 Differential Revision: D41231497 Pulled By: pdillinger fbshipit-source-id: b8ec993ef7d3e7efd68aae8602fd3f858da58068main
parent
097f9f4425
commit
e079d562af
@ -0,0 +1,32 @@ |
|||||||
|
// 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 { |
||||||
|
|
||||||
|
size_t SliceSize(void* obj) { return static_cast<Slice*>(obj)->size(); } |
||||||
|
|
||||||
|
Status SliceSaveTo(void* from_obj, size_t from_offset, size_t length, |
||||||
|
void* out) { |
||||||
|
const Slice& slice = *static_cast<Slice*>(from_obj); |
||||||
|
std::memcpy(out, slice.data() + from_offset, length); |
||||||
|
return Status::OK(); |
||||||
|
} |
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
Status SecondaryCache::InsertSaved(const Slice& key, const Slice& saved) { |
||||||
|
static Cache::CacheItemHelper helper{ |
||||||
|
&SliceSize, &SliceSaveTo, GetNoopDeleterForRole<CacheEntryRole::kMisc>()}; |
||||||
|
// NOTE: depends on Insert() being synchronous, not keeping pointer `&saved`
|
||||||
|
return Insert(key, const_cast<Slice*>(&saved), &helper); |
||||||
|
} |
||||||
|
|
||||||
|
} // namespace ROCKSDB_NAMESPACE
|
Loading…
Reference in new issue