// 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 "utilities/cassandra/cassandra_compaction_filter.h" #include #include "rocksdb/slice.h" #include "utilities/cassandra/format.h" namespace rocksdb { namespace cassandra { const char* CassandraCompactionFilter::Name() const { return "CassandraCompactionFilter"; } CompactionFilter::Decision CassandraCompactionFilter::FilterV2( int level, const Slice& key, ValueType value_type, const Slice& existing_value, std::string* new_value, std::string* skip_until) const { bool value_changed = false; RowValue row_value = RowValue::Deserialize( existing_value.data(), existing_value.size()); RowValue compacted = purge_ttl_on_expiration_ ? row_value.PurgeTtl(&value_changed) : row_value.ExpireTtl(&value_changed); if(compacted.Empty()) { return Decision::kRemove; } if (value_changed) { compacted.Serialize(new_value); return Decision::kChangeValue; } return Decision::kKeep; } } // namespace cassandra } // namespace rocksdb