2dc421df48
Summary: This diff implements a new `DB` method `PromoteL0` which moves all files in L0 to a given level skipping compaction, provided that the files have disjoint ranges and all levels up to the target level are empty. This method provides finer-grain control for trivial compactions, and it is useful for bulk-loading pre-sorted keys. Compared to D34797, it does not change the semantics of an existing operation, which can impact existing code. PromoteL0 is designed to work well in combination with the proposed `GetSstFileWriter`/`AddFile` interface, enabling to "design" the level structure by populating one level at a time. Such fine-grained control can be very useful for static or mostly-static databases. Test Plan: `make check` Reviewers: IslamAbdelRahman, philipp, MarkCallaghan, yhchiang, igor, sdong Reviewed By: sdong Subscribers: dhruba Differential Revision: https://reviews.facebook.net/D37107
30 lines
1.1 KiB
C++
30 lines
1.1 KiB
C++
// Copyright (c) 2014, 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.
|
|
|
|
#pragma once
|
|
|
|
#include "rocksdb/db.h"
|
|
#include "rocksdb/status.h"
|
|
|
|
namespace rocksdb {
|
|
namespace experimental {
|
|
|
|
// Supported only for Leveled compaction
|
|
Status SuggestCompactRange(DB* db, ColumnFamilyHandle* column_family,
|
|
const Slice* begin, const Slice* end);
|
|
Status SuggestCompactRange(DB* db, const Slice* begin, const Slice* end);
|
|
|
|
// Move all L0 files to target_level skipping compaction.
|
|
// This operation succeeds only if the files in L0 have disjoint ranges; this
|
|
// is guaranteed to happen, for instance, if keys are inserted in sorted
|
|
// order. Furthermore, all levels between 1 and target_level must be empty.
|
|
// If any of the above condition is violated, InvalidArgument will be
|
|
// returned.
|
|
Status PromoteL0(DB* db, ColumnFamilyHandle* column_family,
|
|
int target_level = 1);
|
|
|
|
} // namespace experimental
|
|
} // namespace rocksdb
|