@nxtedition/rocksdb 8.1.3 → 8.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/deps/rocksdb/rocksdb/CMakeLists.txt +13 -1
- package/deps/rocksdb/rocksdb/Makefile +2 -2
- package/deps/rocksdb/rocksdb/TARGETS +4 -2
- package/deps/rocksdb/rocksdb/cache/cache_bench_tool.cc +32 -35
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.cc +0 -30
- package/deps/rocksdb/rocksdb/cache/cache_entry_roles.h +0 -83
- package/deps/rocksdb/rocksdb/cache/cache_entry_stats.h +13 -14
- package/deps/rocksdb/rocksdb/cache/cache_helpers.cc +40 -0
- package/deps/rocksdb/rocksdb/cache/cache_helpers.h +14 -20
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.cc +8 -9
- package/deps/rocksdb/rocksdb/cache/cache_reservation_manager.h +5 -4
- package/deps/rocksdb/rocksdb/cache/cache_test.cc +124 -156
- package/deps/rocksdb/rocksdb/cache/charged_cache.cc +10 -26
- package/deps/rocksdb/rocksdb/cache/charged_cache.h +11 -16
- package/deps/rocksdb/rocksdb/cache/clock_cache.cc +35 -32
- package/deps/rocksdb/rocksdb/cache/clock_cache.h +19 -21
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.cc +42 -30
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache.h +9 -8
- package/deps/rocksdb/rocksdb/cache/compressed_secondary_cache_test.cc +91 -143
- package/deps/rocksdb/rocksdb/cache/lru_cache.cc +54 -60
- package/deps/rocksdb/rocksdb/cache/lru_cache.h +37 -63
- package/deps/rocksdb/rocksdb/cache/lru_cache_test.cc +120 -106
- package/deps/rocksdb/rocksdb/cache/secondary_cache.cc +14 -5
- package/deps/rocksdb/rocksdb/cache/sharded_cache.h +16 -31
- package/deps/rocksdb/rocksdb/cache/typed_cache.h +339 -0
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.cc +0 -48
- package/deps/rocksdb/rocksdb/db/blob/blob_contents.h +18 -15
- package/deps/rocksdb/rocksdb/db/blob/blob_counting_iterator.h +0 -11
- package/deps/rocksdb/rocksdb/db/blob/blob_file_builder.cc +5 -26
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.cc +7 -8
- package/deps/rocksdb/rocksdb/db/blob/blob_file_cache.h +6 -3
- package/deps/rocksdb/rocksdb/db/blob/blob_file_reader.cc +2 -7
- package/deps/rocksdb/rocksdb/db/blob/blob_source.cc +19 -47
- package/deps/rocksdb/rocksdb/db/blob/blob_source.h +13 -5
- package/deps/rocksdb/rocksdb/db/blob/blob_source_test.cc +15 -22
- package/deps/rocksdb/rocksdb/db/builder.cc +17 -12
- package/deps/rocksdb/rocksdb/db/column_family.cc +0 -1
- package/deps/rocksdb/rocksdb/db/column_family.h +0 -6
- package/deps/rocksdb/rocksdb/db/compaction/clipping_iterator.h +0 -5
- package/deps/rocksdb/rocksdb/db/compaction/compaction.cc +3 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction.h +0 -2
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.cc +28 -27
- package/deps/rocksdb/rocksdb/db/compaction/compaction_iterator.h +2 -17
- package/deps/rocksdb/rocksdb/db/compaction/compaction_job.cc +1 -0
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.cc +254 -139
- package/deps/rocksdb/rocksdb/db/compaction/compaction_outputs.h +7 -5
- package/deps/rocksdb/rocksdb/db/compaction/subcompaction_state.h +0 -5
- package/deps/rocksdb/rocksdb/db/db_basic_test.cc +98 -9
- package/deps/rocksdb/rocksdb/db/db_block_cache_test.cc +28 -28
- package/deps/rocksdb/rocksdb/db/db_compaction_test.cc +125 -0
- package/deps/rocksdb/rocksdb/db/db_flush_test.cc +65 -4
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.cc +1 -1
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +27 -15
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_compaction_flush.cc +78 -49
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_write.cc +34 -24
- package/deps/rocksdb/rocksdb/db/db_iter.cc +8 -2
- package/deps/rocksdb/rocksdb/db/db_merge_operand_test.cc +42 -0
- package/deps/rocksdb/rocksdb/db/db_merge_operator_test.cc +155 -0
- package/deps/rocksdb/rocksdb/db/db_properties_test.cc +12 -12
- package/deps/rocksdb/rocksdb/db/db_range_del_test.cc +117 -210
- package/deps/rocksdb/rocksdb/db/db_test_util.cc +11 -10
- package/deps/rocksdb/rocksdb/db/db_test_util.h +36 -24
- package/deps/rocksdb/rocksdb/db/db_with_timestamp_basic_test.cc +28 -0
- package/deps/rocksdb/rocksdb/db/flush_job.cc +6 -6
- package/deps/rocksdb/rocksdb/db/flush_job.h +3 -2
- package/deps/rocksdb/rocksdb/db/flush_job_test.cc +29 -29
- package/deps/rocksdb/rocksdb/db/history_trimming_iterator.h +0 -4
- package/deps/rocksdb/rocksdb/db/internal_stats.cc +11 -11
- package/deps/rocksdb/rocksdb/db/internal_stats.h +2 -2
- package/deps/rocksdb/rocksdb/db/log_reader.cc +8 -6
- package/deps/rocksdb/rocksdb/db/log_test.cc +35 -2
- package/deps/rocksdb/rocksdb/db/memtable.cc +30 -5
- package/deps/rocksdb/rocksdb/db/merge_helper.cc +47 -33
- package/deps/rocksdb/rocksdb/db/merge_helper.h +14 -6
- package/deps/rocksdb/rocksdb/db/table_cache.cc +41 -91
- package/deps/rocksdb/rocksdb/db/table_cache.h +17 -19
- package/deps/rocksdb/rocksdb/db/table_cache_sync_and_async.h +7 -9
- package/deps/rocksdb/rocksdb/db/version_builder.cc +12 -9
- package/deps/rocksdb/rocksdb/db/version_edit.h +1 -0
- package/deps/rocksdb/rocksdb/db/version_set.cc +20 -28
- package/deps/rocksdb/rocksdb/db/version_set.h +2 -2
- package/deps/rocksdb/rocksdb/db/version_set_sync_and_async.h +1 -1
- package/deps/rocksdb/rocksdb/db/write_batch.cc +4 -1
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +1 -0
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +358 -214
- package/deps/rocksdb/rocksdb/include/rocksdb/cache.h +137 -135
- package/deps/rocksdb/rocksdb/include/rocksdb/merge_operator.h +21 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/secondary_cache.h +8 -6
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
- package/deps/rocksdb/rocksdb/memory/memory_allocator.h +9 -0
- package/deps/rocksdb/rocksdb/options/customizable_test.cc +4 -3
- package/deps/rocksdb/rocksdb/port/port_posix.h +2 -0
- package/{prebuilds → deps/rocksdb/rocksdb/prebuilds}/linux-x64/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/src.mk +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block.h +3 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.cc +25 -67
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_builder.h +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_factory.cc +18 -13
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.cc +156 -223
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +31 -50
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_impl.h +46 -18
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_sync_and_async.h +3 -3
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.cc +96 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_cache.h +132 -0
- package/deps/rocksdb/rocksdb/table/block_based/cachable_entry.h +28 -0
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.cc +6 -5
- package/deps/rocksdb/rocksdb/table/block_based/filter_block_reader_common.h +1 -4
- package/deps/rocksdb/rocksdb/table/block_based/full_filter_block.cc +6 -7
- package/deps/rocksdb/rocksdb/table/block_based/index_reader_common.cc +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/parsed_full_filter_block.h +6 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.cc +19 -18
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block.h +9 -5
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_filter_block_test.cc +3 -1
- package/deps/rocksdb/rocksdb/table/block_based/partitioned_index_reader.cc +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/uncompression_dict_reader.cc +2 -2
- package/deps/rocksdb/rocksdb/table/format.h +1 -1
- package/deps/rocksdb/rocksdb/table/get_context.cc +12 -3
- package/deps/rocksdb/rocksdb/table/internal_iterator.h +0 -2
- package/deps/rocksdb/rocksdb/table/merging_iterator.cc +92 -7
- package/deps/rocksdb/rocksdb/table/merging_iterator.h +0 -80
- package/deps/rocksdb/rocksdb/tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc +66 -1
- package/deps/rocksdb/rocksdb/tools/db_bench_tool.cc +9 -2
- package/deps/rocksdb/rocksdb/trace_replay/block_cache_tracer.cc +5 -0
- package/deps/rocksdb/rocksdb/trace_replay/trace_replay.cc +1 -1
- package/deps/rocksdb/rocksdb/util/async_file_reader.cc +20 -12
- package/deps/rocksdb/rocksdb/util/compression.cc +2 -2
- package/deps/rocksdb/rocksdb/util/compression.h +11 -2
- package/deps/rocksdb/rocksdb/util/xxhash.h +1901 -887
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.cc +35 -57
- package/deps/rocksdb/rocksdb/utilities/cache_dump_load_impl.h +4 -5
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.cc +11 -6
- package/deps/rocksdb/rocksdb/utilities/fault_injection_secondary_cache.h +6 -5
- package/deps/rocksdb/rocksdb/utilities/memory_allocators.h +0 -1
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/cache_simulator.cc +10 -11
- package/deps/rocksdb/rocksdb/utilities/simulator_cache/sim_cache.cc +31 -31
- package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/portability/toku_time.h +4 -0
- package/deps/rocksdb/rocksdb/utilities/transactions/transaction_test.cc +52 -0
- package/deps/rocksdb/rocksdb/utilities/ttl/db_ttl_impl.cc +1 -0
- package/deps/rocksdb/rocksdb/utilities/write_batch_with_index/write_batch_with_index_internal.cc +12 -3
- package/deps/rocksdb/rocksdb.gyp +0 -3
- package/index.js +2 -2
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/deps/rocksdb/rocksdb/table/block_based/block_like_traits.h +0 -182
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.cc +0 -142
- package/deps/rocksdb/rocksdb/table/compaction_merging_iterator.h +0 -241
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
#include <unordered_map>
|
|
22
22
|
#include <utility>
|
|
23
23
|
|
|
24
|
+
#include "block_cache.h"
|
|
24
25
|
#include "cache/cache_entry_roles.h"
|
|
25
26
|
#include "cache/cache_helpers.h"
|
|
26
27
|
#include "cache/cache_key.h"
|
|
@@ -41,7 +42,6 @@
|
|
|
41
42
|
#include "table/block_based/block_based_table_factory.h"
|
|
42
43
|
#include "table/block_based/block_based_table_reader.h"
|
|
43
44
|
#include "table/block_based/block_builder.h"
|
|
44
|
-
#include "table/block_based/block_like_traits.h"
|
|
45
45
|
#include "table/block_based/filter_block.h"
|
|
46
46
|
#include "table/block_based/filter_policy_internal.h"
|
|
47
47
|
#include "table/block_based/full_filter_block.h"
|
|
@@ -335,6 +335,7 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
335
335
|
std::vector<std::unique_ptr<IntTblPropCollector>> table_properties_collectors;
|
|
336
336
|
|
|
337
337
|
std::unique_ptr<ParallelCompressionRep> pc_rep;
|
|
338
|
+
BlockCreateContext create_context;
|
|
338
339
|
|
|
339
340
|
uint64_t get_offset() { return offset.load(std::memory_order_relaxed); }
|
|
340
341
|
void set_offset(uint64_t o) { offset.store(o, std::memory_order_relaxed); }
|
|
@@ -443,6 +444,9 @@ struct BlockBasedTableBuilder::Rep {
|
|
|
443
444
|
flush_block_policy(
|
|
444
445
|
table_options.flush_block_policy_factory->NewFlushBlockPolicy(
|
|
445
446
|
table_options, data_block)),
|
|
447
|
+
create_context(&table_options, ioptions.stats,
|
|
448
|
+
compression_type == kZSTD ||
|
|
449
|
+
compression_type == kZSTDNotFinalCompression),
|
|
446
450
|
status_ok(true),
|
|
447
451
|
io_status_ok(true) {
|
|
448
452
|
if (tbo.target_file_size == 0) {
|
|
@@ -1240,6 +1244,10 @@ void BlockBasedTableBuilder::WriteMaybeCompressedBlock(
|
|
|
1240
1244
|
handle->set_size(block_contents.size());
|
|
1241
1245
|
assert(status().ok());
|
|
1242
1246
|
assert(io_status().ok());
|
|
1247
|
+
if (uncompressed_block_data == nullptr) {
|
|
1248
|
+
uncompressed_block_data = &block_contents;
|
|
1249
|
+
assert(type == kNoCompression);
|
|
1250
|
+
}
|
|
1243
1251
|
|
|
1244
1252
|
{
|
|
1245
1253
|
IOStatus io_s = r->file->Append(block_contents);
|
|
@@ -1291,12 +1299,8 @@ void BlockBasedTableBuilder::WriteMaybeCompressedBlock(
|
|
|
1291
1299
|
warm_cache = false;
|
|
1292
1300
|
}
|
|
1293
1301
|
if (warm_cache) {
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
} else if (uncompressed_block_data != nullptr) {
|
|
1297
|
-
s = InsertBlockInCacheHelper(*uncompressed_block_data, handle,
|
|
1298
|
-
block_type);
|
|
1299
|
-
}
|
|
1302
|
+
s = InsertBlockInCacheHelper(*uncompressed_block_data, handle,
|
|
1303
|
+
block_type);
|
|
1300
1304
|
if (!s.ok()) {
|
|
1301
1305
|
r->SetStatus(s);
|
|
1302
1306
|
return;
|
|
@@ -1425,13 +1429,14 @@ Status BlockBasedTableBuilder::InsertBlockInCompressedCache(
|
|
|
1425
1429
|
const Slice& block_contents, const CompressionType type,
|
|
1426
1430
|
const BlockHandle* handle) {
|
|
1427
1431
|
Rep* r = rep_;
|
|
1428
|
-
|
|
1432
|
+
CompressedBlockCacheInterface block_cache_compressed{
|
|
1433
|
+
r->table_options.block_cache_compressed.get()};
|
|
1429
1434
|
Status s;
|
|
1430
|
-
if (type != kNoCompression && block_cache_compressed
|
|
1435
|
+
if (type != kNoCompression && block_cache_compressed) {
|
|
1431
1436
|
size_t size = block_contents.size();
|
|
1432
1437
|
|
|
1433
|
-
auto ubuf =
|
|
1434
|
-
|
|
1438
|
+
auto ubuf = AllocateBlock(size + 1,
|
|
1439
|
+
block_cache_compressed.get()->memory_allocator());
|
|
1435
1440
|
memcpy(ubuf.get(), block_contents.data(), size);
|
|
1436
1441
|
ubuf[size] = type;
|
|
1437
1442
|
|
|
@@ -1443,10 +1448,9 @@ Status BlockBasedTableBuilder::InsertBlockInCompressedCache(
|
|
|
1443
1448
|
|
|
1444
1449
|
CacheKey key = BlockBasedTable::GetCacheKey(rep_->base_cache_key, *handle);
|
|
1445
1450
|
|
|
1446
|
-
s = block_cache_compressed
|
|
1451
|
+
s = block_cache_compressed.Insert(
|
|
1447
1452
|
key.AsSlice(), block_contents_to_cache,
|
|
1448
|
-
block_contents_to_cache->ApproximateMemoryUsage()
|
|
1449
|
-
&DeleteCacheEntry<BlockContents>);
|
|
1453
|
+
block_contents_to_cache->ApproximateMemoryUsage());
|
|
1450
1454
|
if (s.ok()) {
|
|
1451
1455
|
RecordTick(rep_->ioptions.stats, BLOCK_CACHE_COMPRESSED_ADD);
|
|
1452
1456
|
} else {
|
|
@@ -1462,65 +1466,19 @@ Status BlockBasedTableBuilder::InsertBlockInCompressedCache(
|
|
|
1462
1466
|
Status BlockBasedTableBuilder::InsertBlockInCacheHelper(
|
|
1463
1467
|
const Slice& block_contents, const BlockHandle* handle,
|
|
1464
1468
|
BlockType block_type) {
|
|
1465
|
-
Status s;
|
|
1466
|
-
switch (block_type) {
|
|
1467
|
-
case BlockType::kData:
|
|
1468
|
-
case BlockType::kIndex:
|
|
1469
|
-
case BlockType::kFilterPartitionIndex:
|
|
1470
|
-
s = InsertBlockInCache<Block>(block_contents, handle, block_type);
|
|
1471
|
-
break;
|
|
1472
|
-
case BlockType::kFilter:
|
|
1473
|
-
s = InsertBlockInCache<ParsedFullFilterBlock>(block_contents, handle,
|
|
1474
|
-
block_type);
|
|
1475
|
-
break;
|
|
1476
|
-
case BlockType::kCompressionDictionary:
|
|
1477
|
-
s = InsertBlockInCache<UncompressionDict>(block_contents, handle,
|
|
1478
|
-
block_type);
|
|
1479
|
-
break;
|
|
1480
|
-
default:
|
|
1481
|
-
// no-op / not cached
|
|
1482
|
-
break;
|
|
1483
|
-
}
|
|
1484
|
-
return s;
|
|
1485
|
-
}
|
|
1486
1469
|
|
|
1487
|
-
template <typename TBlocklike>
|
|
1488
|
-
Status BlockBasedTableBuilder::InsertBlockInCache(const Slice& block_contents,
|
|
1489
|
-
const BlockHandle* handle,
|
|
1490
|
-
BlockType block_type) {
|
|
1491
|
-
// Uncompressed regular block cache
|
|
1492
1470
|
Cache* block_cache = rep_->table_options.block_cache.get();
|
|
1493
1471
|
Status s;
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
memcpy(buf.get(), block_contents.data(), size);
|
|
1498
|
-
BlockContents results(std::move(buf), size);
|
|
1499
|
-
|
|
1472
|
+
auto helper =
|
|
1473
|
+
GetCacheItemHelper(block_type, rep_->ioptions.lowest_used_cache_tier);
|
|
1474
|
+
if (block_cache && helper && helper->create_cb) {
|
|
1500
1475
|
CacheKey key = BlockBasedTable::GetCacheKey(rep_->base_cache_key, *handle);
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
// TODO akanksha:: Dedup below code by calling
|
|
1506
|
-
// BlockBasedTable::PutDataBlockToCache.
|
|
1507
|
-
std::unique_ptr<TBlocklike> block_holder(
|
|
1508
|
-
BlocklikeTraits<TBlocklike>::Create(
|
|
1509
|
-
std::move(results), read_amp_bytes_per_bit,
|
|
1510
|
-
rep_->ioptions.statistics.get(),
|
|
1511
|
-
false /*rep_->blocks_definitely_zstd_compressed*/,
|
|
1512
|
-
rep_->table_options.filter_policy.get()));
|
|
1513
|
-
|
|
1514
|
-
assert(block_holder->own_bytes());
|
|
1515
|
-
size_t charge = block_holder->ApproximateMemoryUsage();
|
|
1516
|
-
s = block_cache->Insert(
|
|
1517
|
-
key.AsSlice(), block_holder.get(),
|
|
1518
|
-
BlocklikeTraits<TBlocklike>::GetCacheItemHelper(block_type), charge,
|
|
1519
|
-
nullptr, Cache::Priority::LOW);
|
|
1476
|
+
size_t charge;
|
|
1477
|
+
s = WarmInCache(block_cache, key.AsSlice(), block_contents,
|
|
1478
|
+
&rep_->create_context, helper, Cache::Priority::LOW,
|
|
1479
|
+
&charge);
|
|
1520
1480
|
|
|
1521
1481
|
if (s.ok()) {
|
|
1522
|
-
// Release ownership of block_holder.
|
|
1523
|
-
block_holder.release();
|
|
1524
1482
|
BlockBasedTable::UpdateCacheInsertionMetrics(
|
|
1525
1483
|
block_type, nullptr /*get_context*/, charge, s.IsOkOverwritten(),
|
|
1526
1484
|
rep_->ioptions.stats);
|
|
@@ -122,9 +122,9 @@ class BlockBasedTableBuilder : public TableBuilder {
|
|
|
122
122
|
void WriteBlock(const Slice& block_contents, BlockHandle* handle,
|
|
123
123
|
BlockType block_type);
|
|
124
124
|
// Directly write data to the file.
|
|
125
|
-
void WriteMaybeCompressedBlock(
|
|
126
|
-
|
|
127
|
-
|
|
125
|
+
void WriteMaybeCompressedBlock(
|
|
126
|
+
const Slice& block_contents, CompressionType, BlockHandle* handle,
|
|
127
|
+
BlockType block_type, const Slice* uncompressed_block_data = nullptr);
|
|
128
128
|
|
|
129
129
|
void SetupCacheKeyPrefix(const TableBuilderOptions& tbo);
|
|
130
130
|
|
|
@@ -525,20 +525,24 @@ Status CheckCacheOptionCompatibility(const BlockBasedTableOptions& bbto) {
|
|
|
525
525
|
|
|
526
526
|
// More complex test of shared key space, in case the instances are wrappers
|
|
527
527
|
// for some shared underlying cache.
|
|
528
|
+
static Cache::CacheItemHelper kHelper{CacheEntryRole::kMisc};
|
|
528
529
|
CacheKey sentinel_key = CacheKey::CreateUniqueForProcessLifetime();
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
530
|
+
struct SentinelValue {
|
|
531
|
+
explicit SentinelValue(char _c) : c(_c) {}
|
|
532
|
+
char c;
|
|
533
|
+
};
|
|
534
|
+
static SentinelValue kRegularBlockCacheMarker{'b'};
|
|
535
|
+
static SentinelValue kCompressedBlockCacheMarker{'c'};
|
|
536
|
+
static char kPersistentCacheMarker{'p'};
|
|
532
537
|
if (bbto.block_cache) {
|
|
533
538
|
bbto.block_cache
|
|
534
|
-
->Insert(sentinel_key.AsSlice(), &kRegularBlockCacheMarker, 1
|
|
535
|
-
GetNoopDeleterForRole<CacheEntryRole::kMisc>())
|
|
539
|
+
->Insert(sentinel_key.AsSlice(), &kRegularBlockCacheMarker, &kHelper, 1)
|
|
536
540
|
.PermitUncheckedError();
|
|
537
541
|
}
|
|
538
542
|
if (bbto.block_cache_compressed) {
|
|
539
543
|
bbto.block_cache_compressed
|
|
540
|
-
->Insert(sentinel_key.AsSlice(), &kCompressedBlockCacheMarker,
|
|
541
|
-
|
|
544
|
+
->Insert(sentinel_key.AsSlice(), &kCompressedBlockCacheMarker, &kHelper,
|
|
545
|
+
1)
|
|
542
546
|
.PermitUncheckedError();
|
|
543
547
|
}
|
|
544
548
|
if (bbto.persistent_cache) {
|
|
@@ -552,8 +556,8 @@ Status CheckCacheOptionCompatibility(const BlockBasedTableOptions& bbto) {
|
|
|
552
556
|
if (bbto.block_cache) {
|
|
553
557
|
auto handle = bbto.block_cache->Lookup(sentinel_key.AsSlice());
|
|
554
558
|
if (handle) {
|
|
555
|
-
auto v = static_cast<
|
|
556
|
-
char c =
|
|
559
|
+
auto v = static_cast<SentinelValue*>(bbto.block_cache->Value(handle));
|
|
560
|
+
char c = v->c;
|
|
557
561
|
bbto.block_cache->Release(handle);
|
|
558
562
|
if (v == &kCompressedBlockCacheMarker) {
|
|
559
563
|
return Status::InvalidArgument(
|
|
@@ -571,8 +575,9 @@ Status CheckCacheOptionCompatibility(const BlockBasedTableOptions& bbto) {
|
|
|
571
575
|
if (bbto.block_cache_compressed) {
|
|
572
576
|
auto handle = bbto.block_cache_compressed->Lookup(sentinel_key.AsSlice());
|
|
573
577
|
if (handle) {
|
|
574
|
-
auto v = static_cast<
|
|
575
|
-
|
|
578
|
+
auto v = static_cast<SentinelValue*>(
|
|
579
|
+
bbto.block_cache_compressed->Value(handle));
|
|
580
|
+
char c = v->c;
|
|
576
581
|
bbto.block_cache_compressed->Release(handle);
|
|
577
582
|
if (v == &kRegularBlockCacheMarker) {
|
|
578
583
|
return Status::InvalidArgument(
|
|
@@ -595,11 +600,11 @@ Status CheckCacheOptionCompatibility(const BlockBasedTableOptions& bbto) {
|
|
|
595
600
|
bbto.persistent_cache->Lookup(sentinel_key.AsSlice(), &data, &size)
|
|
596
601
|
.PermitUncheckedError();
|
|
597
602
|
if (data && size > 0) {
|
|
598
|
-
if (data[0] == kRegularBlockCacheMarker) {
|
|
603
|
+
if (data[0] == kRegularBlockCacheMarker.c) {
|
|
599
604
|
return Status::InvalidArgument(
|
|
600
605
|
"persistent_cache and block_cache share the same key space, "
|
|
601
606
|
"which is not supported");
|
|
602
|
-
} else if (data[0] == kCompressedBlockCacheMarker) {
|
|
607
|
+
} else if (data[0] == kCompressedBlockCacheMarker.c) {
|
|
603
608
|
return Status::InvalidArgument(
|
|
604
609
|
"persistent_cache and block_cache_compressed share the same key "
|
|
605
610
|
"space, "
|