2017-07-21 23:42:32 +02:00
|
|
|
// 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).
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
#include <string>
|
|
|
|
#include "rocksdb/compaction_filter.h"
|
|
|
|
#include "rocksdb/slice.h"
|
|
|
|
|
2020-02-20 21:07:53 +01:00
|
|
|
namespace ROCKSDB_NAMESPACE {
|
2017-07-21 23:42:32 +02:00
|
|
|
namespace cassandra {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Compaction filter for removing expired Cassandra data with ttl.
|
|
|
|
* If option `purge_ttl_on_expiration` is set to true, expired data
|
|
|
|
* will be directly purged. Otherwise expired data will be converted
|
2017-09-19 01:19:06 +02:00
|
|
|
* tombstones first, then be eventally removed after gc grace period.
|
|
|
|
* `purge_ttl_on_expiration` should only be on in the case all the
|
2017-07-21 23:42:32 +02:00
|
|
|
* writes have same ttl setting, otherwise it could bring old data back.
|
2017-09-19 01:19:06 +02:00
|
|
|
*
|
|
|
|
* Compaction filter is also in charge of removing tombstone that has been
|
|
|
|
* promoted to kValue type after serials of merging in compaction.
|
2017-07-21 23:42:32 +02:00
|
|
|
*/
|
|
|
|
class CassandraCompactionFilter : public CompactionFilter {
|
|
|
|
public:
|
2017-09-19 01:19:06 +02:00
|
|
|
explicit CassandraCompactionFilter(bool purge_ttl_on_expiration,
|
|
|
|
int32_t gc_grace_period_in_seconds)
|
|
|
|
: purge_ttl_on_expiration_(purge_ttl_on_expiration),
|
|
|
|
gc_grace_period_in_seconds_(gc_grace_period_in_seconds) {}
|
2017-07-21 23:42:32 +02:00
|
|
|
|
2017-09-19 01:19:06 +02:00
|
|
|
const char* Name() const override;
|
|
|
|
virtual Decision FilterV2(int level, const Slice& key, ValueType value_type,
|
|
|
|
const Slice& existing_value, std::string* new_value,
|
|
|
|
std::string* skip_until) const override;
|
2017-07-21 23:42:32 +02:00
|
|
|
|
|
|
|
private:
|
|
|
|
bool purge_ttl_on_expiration_;
|
2017-09-19 01:19:06 +02:00
|
|
|
int32_t gc_grace_period_in_seconds_;
|
2017-07-21 23:42:32 +02:00
|
|
|
};
|
|
|
|
} // namespace cassandra
|
2020-02-20 21:07:53 +01:00
|
|
|
} // namespace ROCKSDB_NAMESPACE
|