RemoveEmptyValueCompactionFilter - A compaction filter which removes entries which have an empty value

This commit is contained in:
Adam Retter 2015-07-14 17:41:20 +01:00
parent e1c99e10c1
commit 62dec0e2b7
3 changed files with 58 additions and 0 deletions

1
src.mk
View File

@ -98,6 +98,7 @@ LIB_SOURCES = \
utilities/backupable/backupable_db.cc \ utilities/backupable/backupable_db.cc \
utilities/convenience/convenience.cc \ utilities/convenience/convenience.cc \
utilities/checkpoint/checkpoint.cc \ utilities/checkpoint/checkpoint.cc \
utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc \
utilities/document/document_db.cc \ utilities/document/document_db.cc \
utilities/document/json_document_builder.cc \ utilities/document/json_document_builder.cc \
utilities/document/json_document.cc \ utilities/document/json_document.cc \

View File

@ -0,0 +1,30 @@
// Copyright (c) 2015, Facebook, Inc. All rights reserved.
// This source code is licensed under the BSD-style license found in the
// LICENSE file in the root directory of this source tree. An additional grant
// of patent rights can be found in the PATENTS file in the same directory.
#ifndef ROCKSDB_LITE
#include <string>
#include "rocksdb/slice.h"
#include "utilities/compaction_filters/remove_emptyvalue_compactionfilter.h"
namespace rocksdb {
const char* RemoveEmptyValueCompactionFilter::Name() const {
return "RemoveEmptyValueCompactionFilter";
}
bool RemoveEmptyValueCompactionFilter::Filter(int level,
const Slice& key,
const Slice& existing_value,
std::string* new_value,
bool* value_changed) const {
// remove kv pairs that have empty values
return existing_value.empty();
}
} // namespace rocksdb
#endif // !ROCKSDB_LITE

View File

@ -0,0 +1,27 @@
// Copyright (c) 2015, Facebook, Inc. All rights reserved.
// This source code is licensed under the BSD-style license found in the
// LICENSE file in the root directory of this source tree. An additional grant
// of patent rights can be found in the PATENTS file in the same directory.
#ifndef ROCKSDB_LITE
#pragma once
#include <string>
#include "rocksdb/compaction_filter.h"
#include "rocksdb/slice.h"
namespace rocksdb {
class RemoveEmptyValueCompactionFilter : public CompactionFilter {
public:
const char* Name() const override;
bool Filter(int level,
const Slice& key,
const Slice& existing_value,
std::string* new_value,
bool* value_changed) const override;
};
} // namespace rocksdb
#endif // !ROCKSDB_LITE