| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- // 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).
- //
- #pragma once
- #include "db/dbformat.h"
- #include "rocksdb/slice.h"
- #include "rocksdb/status.h"
- namespace ROCKSDB_NAMESPACE {
- // A class that validates key/value that is inserted to an SST file.
- // Pass every key/value of the file using OutputValidator::Add()
- // and the class validates key order and optionally calculate a hash
- // of all the key and value.
- class OutputValidator {
- public:
- explicit OutputValidator(const InternalKeyComparator& icmp, bool enable_hash,
- uint64_t precalculated_hash = 0)
- : icmp_(icmp),
- paranoid_hash_(precalculated_hash),
- enable_hash_(enable_hash) {}
- // Add a key to the KV sequence, and return whether the key follows
- // criteria, e.g. key is ordered.
- Status Add(const Slice& key, const Slice& value);
- // Compare result of two key orders are the same. It can be used
- // to compare the keys inserted into a file, and what is read back.
- // Return true if the validation passes.
- bool CompareValidator(const OutputValidator& other_validator) {
- return GetHash() == other_validator.GetHash();
- }
- // Not (yet) intended to be persisted, so subject to change
- // without notice between releases.
- uint64_t GetHash() const { return paranoid_hash_; }
- private:
- const InternalKeyComparator& icmp_;
- std::string prev_key_;
- uint64_t paranoid_hash_ = 0;
- bool enable_hash_;
- };
- } // namespace ROCKSDB_NAMESPACE
|