Skip to content

Commit e4e690f

Browse files
committed
Add pluggable compression
1 parent 6acf396 commit e4e690f

33 files changed

+990
-91
lines changed

db/blob/blob_file_builder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212

1313
#include "rocksdb/advanced_options.h"
1414
#include "rocksdb/compression_type.h"
15+
#include "rocksdb/compressor.h"
1516
#include "rocksdb/env.h"
1617
#include "rocksdb/rocksdb_namespace.h"
1718
#include "rocksdb/types.h"
18-
#include "util/compressor.h"
1919

2020
namespace ROCKSDB_NAMESPACE {
2121

db/blob/blob_file_reader.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
#include "rocksdb/compression_type.h"
1414
#include "rocksdb/rocksdb_namespace.h"
1515
#include "util/autovector.h"
16-
#include "util/compressor.h"
1716

1817
namespace ROCKSDB_NAMESPACE {
1918

db/blob/blob_read_request.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
#include <cinttypes>
99

1010
#include "rocksdb/compression_type.h"
11+
#include "rocksdb/compressor.h"
1112
#include "rocksdb/slice.h"
1213
#include "rocksdb/status.h"
1314
#include "util/autovector.h"
14-
#include "util/compressor.h"
1515

1616
namespace ROCKSDB_NAMESPACE {
1717

db/blob/blob_source.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@
1414
#include "db/blob/blob_file_cache.h"
1515
#include "db/blob/blob_read_request.h"
1616
#include "rocksdb/cache.h"
17+
#include "rocksdb/compressor.h"
1718
#include "rocksdb/rocksdb_namespace.h"
1819
#include "table/block_based/cachable_entry.h"
1920
#include "util/autovector.h"
20-
#include "util/compressor.h"
2121

2222
namespace ROCKSDB_NAMESPACE {
2323

db/compact_files_test.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111

1212
#include "db/db_impl/db_impl.h"
1313
#include "port/port.h"
14+
#include "rocksdb/compressor.h"
1415
#include "rocksdb/db.h"
1516
#include "rocksdb/env.h"
1617
#include "test_util/sync_point.h"
1718
#include "test_util/testharness.h"
1819
#include "util/cast_util.h"
19-
#include "util/compressor.h"
2020
#include "util/string_util.h"
2121

2222
namespace ROCKSDB_NAMESPACE {

db/db_basic_test.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "db/db_test_util.h"
1313
#include "options/options_helper.h"
1414
#include "port/stack_trace.h"
15+
#include "rocksdb/compressor.h"
1516
#include "rocksdb/filter_policy.h"
1617
#include "rocksdb/flush_block_policy.h"
1718
#include "rocksdb/merge_operator.h"
@@ -21,7 +22,6 @@
2122
#include "table/block_based/block_based_table_reader.h"
2223
#include "table/block_based/block_builder.h"
2324
#include "test_util/sync_point.h"
24-
#include "util/compressor.h"
2525
#include "util/file_checksum_helper.h"
2626
#include "util/random.h"
2727
#include "utilities/counted_fs.h"

db/db_block_cache_test.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020
#include "db/db_test_util.h"
2121
#include "env/unique_id_gen.h"
2222
#include "port/stack_trace.h"
23+
#include "rocksdb/compressor.h"
2324
#include "rocksdb/persistent_cache.h"
2425
#include "rocksdb/statistics.h"
2526
#include "rocksdb/table.h"
2627
#include "rocksdb/table_properties.h"
2728
#include "table/block_based/block_based_table_reader.h"
2829
#include "table/unique_id_impl.h"
29-
#include "util/compressor.h"
3030
#include "util/defer.h"
3131
#include "util/hash.h"
3232
#include "util/math.h"

db/db_options_test.cc

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1107,6 +1107,8 @@ TEST_F(DBOptionsTest, ChangeCompression) {
11071107
"LevelCompactionPicker::PickCompaction:Return", [&](void* arg) {
11081108
Compaction* c = reinterpret_cast<Compaction*>(arg);
11091109
compression_used = c->output_compressor()->GetCompressionType();
1110+
compression_opt_used =
1111+
*(c->output_compressor()->GetOptions<CompressionOptions>());
11101112
compacted = true;
11111113
});
11121114
SyncPoint::GetInstance()->EnableProcessing();
@@ -1127,7 +1129,8 @@ TEST_F(DBOptionsTest, ChangeCompression) {
11271129
compression_used = CompressionType::kLZ4Compression;
11281130
compacted = false;
11291131
ASSERT_OK(dbfull()->SetOptions(
1130-
{{"bottommost_compression", "kSnappyCompression"},
1132+
{{"bottommost_compressor", "nullptr"},
1133+
{"bottommost_compression", "kSnappyCompression"},
11311134
{"bottommost_compression_opts", "0:6:0:0:4:true"}}));
11321135
ASSERT_OK(Put("foo", "foofoofoo"));
11331136
ASSERT_OK(Put("bar", "foofoofoo"));
@@ -1138,8 +1141,30 @@ TEST_F(DBOptionsTest, ChangeCompression) {
11381141
ASSERT_OK(dbfull()->TEST_WaitForCompact());
11391142
ASSERT_TRUE(compacted);
11401143
ASSERT_EQ(CompressionType::kSnappyCompression, compression_used);
1144+
// Snappy compressor does not define level option. Default is returned.
1145+
ASSERT_EQ(32767, compression_opt_used.level);
11411146
// Right now parallel_level is not yet allowed to be changed.
11421147

1148+
if (!Zlib_Supported()) {
1149+
return;
1150+
}
1151+
compression_used = CompressionType::kLZ4Compression;
1152+
compacted = false;
1153+
ASSERT_OK(dbfull()->SetOptions(
1154+
{{"bottommost_compressor", "nullptr"},
1155+
{"bottommost_compression", "kZlibCompression"},
1156+
{"bottommost_compression_opts", "0:6:0:0:4:true"}}));
1157+
ASSERT_OK(Put("foo", "foofoofoo"));
1158+
ASSERT_OK(Put("bar", "foofoofoo"));
1159+
ASSERT_OK(Flush());
1160+
ASSERT_OK(Put("foo", "foofoofoo"));
1161+
ASSERT_OK(Put("bar", "foofoofoo"));
1162+
ASSERT_OK(Flush());
1163+
ASSERT_OK(dbfull()->TEST_WaitForCompact());
1164+
ASSERT_TRUE(compacted);
1165+
ASSERT_EQ(CompressionType::kZlibCompression, compression_used);
1166+
ASSERT_EQ(6, compression_opt_used.level);
1167+
11431168
SyncPoint::GetInstance()->DisableProcessing();
11441169
}
11451170

db/db_test2.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "options/options_helper.h"
1919
#include "port/port.h"
2020
#include "port/stack_trace.h"
21+
#include "rocksdb/compressor.h"
2122
#include "rocksdb/experimental.h"
2223
#include "rocksdb/iostats_context.h"
2324
#include "rocksdb/persistent_cache.h"
@@ -26,7 +27,6 @@
2627
#include "rocksdb/utilities/replayer.h"
2728
#include "rocksdb/wal_filter.h"
2829
#include "test_util/testutil.h"
29-
#include "util/compressor.h"
3030
#include "util/random.h"
3131
#include "utilities/fault_injection_env.h"
3232

include/rocksdb/advanced_options.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
namespace ROCKSDB_NAMESPACE {
1919

20+
class Compressor;
2021
class Slice;
2122
class SliceTransform;
2223
class TablePropertiesCollectorFactory;
@@ -526,6 +527,19 @@ struct AdvancedColumnFamilyOptions {
526527
// Dynamically changeable through SetOptions() API
527528
std::vector<CompressionType> compression_per_level;
528529

530+
// Similar to compression_per_level, but the algorithms are encapsulated in
531+
// Compressor objects. This adds the ability to select custom compressors,
532+
// beyond the built-in ones provided through CompressionType.
533+
//
534+
// If compressor_per_level is specified (not empty), it overrides
535+
// compression_per_level.
536+
//
537+
// If compressor_per_level is not specified (empty),
538+
// compression_per_level is applied as described for that option.
539+
//
540+
// Default: empty
541+
std::vector<std::shared_ptr<Compressor>> compressor_per_level;
542+
529543
// Number of levels for this database
530544
int num_levels = 7;
531545

@@ -1013,6 +1027,19 @@ struct AdvancedColumnFamilyOptions {
10131027
// Dynamically changeable through the SetOptions() API
10141028
CompressionType blob_compression_type = kNoCompression;
10151029

1030+
// Similar to blob_compression_type, but the algorithm is encapsulated in a
1031+
// Compressor class. This adds the ability to select plugin compressors,
1032+
// beyond the built-in ones provided through CompressionType.
1033+
//
1034+
// If blob_compressor is specified (not null), it overrides
1035+
// blob_compression_type.
1036+
//
1037+
// If blob_compressor is not specified (null), blob_compression_type is
1038+
// applied.
1039+
//
1040+
// Default: nullptr
1041+
std::shared_ptr<Compressor> blob_compressor = nullptr;
1042+
10161043
// Enables garbage collection of blobs. Blob GC is performed as part of
10171044
// compaction. Valid blobs residing in blob files older than a cutoff get
10181045
// relocated to new files as they are encountered during compaction, which

0 commit comments

Comments
 (0)