|
- /** zstreedb2 maint.cxx
- (C) 2018 Erik Zscheile
- License: GPLv2
- **/
-
- #include <stdio.h>
- #include <rocksdb/db.h>
- #include <memory>
- #include <thread>
-
- using namespace std;
-
- static void pdberrmsg(const rocksdb::Status &st, const char *fn) {
- auto str = st.ToString();
- fprintf(stderr, "zstreedb2maint: ERROR: db %s failed: %s", fn, str.c_str());
- }
-
- int main(const int argc, char *argv[]) {
- rocksdb::Status st;
- rocksdb::Options opts;
- opts.IncreaseParallelism(std::max(thread::hardware_concurrency(), 1u));
- opts.allow_mmap_reads = true;
- opts.allow_mmap_writes = true;
-
- if(argc > 1)
- switch(argv[1][0]) {
- case 'j':
- opts.compression = rocksdb::kBZip2Compression;
- break;
-
- case 'J':
- opts.compression = rocksdb::kLZ4Compression;
- break;
-
- case 's':
- opts.compression = rocksdb::kSnappyCompression;
- break;
-
- case 'z':
- opts.compression = rocksdb::kZlibCompression;
- break;
-
- case 'Z':
- opts.compression = rocksdb::kZSTD;
- break;
-
- case 'h':
- puts("USAGE: zstreedb2maint [COMPR]");
- puts(" COMPR := one of: j J s z Z");
- return 0;
- }
-
- opts.bottommost_compression = opts.compression;
-
- std::unique_ptr<rocksdb::DB> db;
- {
- rocksdb::DB *dbptr;
- st = rocksdb::DB::Open(opts, ".", &dbptr);
- if(!st.ok()) {
- pdberrmsg(st, "open");
- st = rocksdb::RepairDB(".", opts);
- if(!st.ok())
- pdberrmsg(st, "repair");
- return 1;
- }
- db.reset(dbptr);
- }
-
- rocksdb::CompactRangeOptions copts;
- copts.change_level = true;
- copts.bottommost_level_compaction
- = rocksdb::BottommostLevelCompaction::kForce;
-
- st = db->CompactRange(copts, nullptr, nullptr);
- if(!st.ok()) {
- pdberrmsg(st, "compact");
- return 1;
- }
- return 0;
- }
|