mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-12 19:02:12 +00:00
Fixes #10489 Killing the CDC log table on CDC disable is unhelpful in many ways, partly because it can cause random exceptions on nodes trying to do a CDC-enabled write at the same time as log table is dropped, but also because it makes it impossible to collect data generated before CDC was turned off, but which is not yet consumed. Since data should be TTL:ed anyway, retaining the table should not really add any overhead beyond the compaction to eventually clear it. And user did set TTL=0 (disabled), then he is already responsible for clearing out the data. This also has the nice feature of meshing with the alternator streams semantics. Closes #10601
55 lines
1.3 KiB
C++
55 lines
1.3 KiB
C++
/*
|
|
* Copyright (C) 2020-present ScyllaDB
|
|
*/
|
|
|
|
/*
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
|
|
#include "cdc_partitioner.hh"
|
|
#include "dht/token.hh"
|
|
#include "schema.hh"
|
|
#include "sstables/key.hh"
|
|
#include "utils/class_registrator.hh"
|
|
#include "cdc/generation.hh"
|
|
#include "keys.hh"
|
|
|
|
namespace cdc {
|
|
|
|
const sstring cdc_partitioner::classname = "com.scylladb.dht.CDCPartitioner";
|
|
|
|
const sstring cdc_partitioner::name() const {
|
|
return classname;
|
|
}
|
|
|
|
static dht::token to_token(int64_t value) {
|
|
return dht::token(dht::token::kind::key, value);
|
|
}
|
|
|
|
static dht::token to_token(bytes_view key) {
|
|
// Key should be 16 B long, of which first 8 B are used for token calculation
|
|
if (key.size() != 2*sizeof(int64_t)) {
|
|
return dht::minimum_token();
|
|
}
|
|
return to_token(stream_id::token_from_bytes(key));
|
|
}
|
|
|
|
dht::token
|
|
cdc_partitioner::get_token(const sstables::key_view& key) const {
|
|
return key.with_linearized([&] (bytes_view v) {
|
|
return to_token(v);
|
|
});
|
|
}
|
|
|
|
dht::token
|
|
cdc_partitioner::get_token(const schema& s, partition_key_view key) const {
|
|
auto exploded_key = key.explode(s);
|
|
return to_token(exploded_key[0]);
|
|
}
|
|
|
|
using registry = class_registrator<dht::i_partitioner, cdc_partitioner>;
|
|
static registry registrator(cdc::cdc_partitioner::classname);
|
|
static registry registrator_short_name("CDCPartitioner");
|
|
|
|
}
|