a281822331
Summary: Open-source users recently reported two occurrences of LSM-tree corruption (https://github.com/facebook/rocksdb/issues/5558 is one), which would be caught by options.force_consistency_checks = true. options.force_consistency_checks has a usability limitation because it crashes the service once inconsistency is detected. This makes the feature hard to use. Most users serve from multiple RocksDB shards per server and the impacts of crashing the service is higher than it should be. Instead, we just pass the error back to users without killing the service, and ask them to deal with the problem accordingly. Pull Request resolved: https://github.com/facebook/rocksdb/pull/5744 Differential Revision: D17096940 Pulled By: pdhandharia fbshipit-source-id: b6780039044e265f26ed2ad03c51f4abbe8b603c
49 lines
1.8 KiB
C++
49 lines
1.8 KiB
C++
// 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).
|
|
//
|
|
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file. See the AUTHORS file for names of contributors.
|
|
//
|
|
#pragma once
|
|
#include "rocksdb/env.h"
|
|
#include "rocksdb/slice_transform.h"
|
|
|
|
namespace rocksdb {
|
|
|
|
class TableCache;
|
|
class VersionStorageInfo;
|
|
class VersionEdit;
|
|
struct FileMetaData;
|
|
class InternalStats;
|
|
|
|
// A helper class so we can efficiently apply a whole sequence
|
|
// of edits to a particular state without creating intermediate
|
|
// Versions that contain full copies of the intermediate state.
|
|
class VersionBuilder {
|
|
public:
|
|
VersionBuilder(const EnvOptions& env_options, TableCache* table_cache,
|
|
VersionStorageInfo* base_vstorage, Logger* info_log = nullptr);
|
|
~VersionBuilder();
|
|
Status CheckConsistency(VersionStorageInfo* vstorage);
|
|
Status CheckConsistencyForDeletes(VersionEdit* edit, uint64_t number,
|
|
int level);
|
|
bool CheckConsistencyForNumLevels();
|
|
Status Apply(VersionEdit* edit);
|
|
Status SaveTo(VersionStorageInfo* vstorage);
|
|
Status LoadTableHandlers(InternalStats* internal_stats, int max_threads,
|
|
bool prefetch_index_and_filter_in_cache,
|
|
bool is_initial_load,
|
|
const SliceTransform* prefix_extractor);
|
|
void MaybeAddFile(VersionStorageInfo* vstorage, int level, FileMetaData* f);
|
|
|
|
private:
|
|
class Rep;
|
|
Rep* rep_;
|
|
};
|
|
|
|
extern bool NewestFirstBySeqNo(FileMetaData* a, FileMetaData* b);
|
|
} // namespace rocksdb
|