diff --git a/utilities/blob_db/blob_db.h b/utilities/blob_db/blob_db.h index dfb21383d..e68b40a0a 100644 --- a/utilities/blob_db/blob_db.h +++ b/utilities/blob_db/blob_db.h @@ -13,12 +13,13 @@ #include "rocksdb/db.h" #include "rocksdb/status.h" #include "rocksdb/utilities/stackable_db.h" -#include "utilities/blob_db/ttl_extractor.h" namespace rocksdb { namespace blob_db { +class TTLExtractor; + // A wrapped database which puts values of KV pairs in a separate log // and store location to the log in the underlying DB. // It lacks lots of importatant functionalities, e.g. DB restarts, @@ -188,6 +189,33 @@ class BlobDB : public StackableDB { Status DestroyBlobDB(const std::string& dbname, const Options& options, const BlobDBOptions& bdb_options); +// TTLExtractor allow applications to extract TTL from key-value pairs. +// This useful for applications using Put or WriteBatch to write keys and +// don't intend to migrate to PutWithTTL or PutUntil. +// +// Applications can implement either ExtractTTL or ExtractExpiration. If both +// are implemented, ExtractExpiration will take precedence. +class TTLExtractor { + public: + // Extract TTL from key-value pair. + // Return true if the key has TTL, false otherwise. If key has TTL, + // TTL is pass back through ttl. The method can optionally modify the value, + // pass the result back through new_value, and also set value_changed to true. + virtual bool ExtractTTL(const Slice& key, const Slice& value, uint64_t* ttl, + std::string* new_value, bool* value_changed); + + // Extract expiration time from key-value pair. + // Return true if the key has expiration time, false otherwise. If key has + // expiration time, it is pass back through expiration. The method can + // optionally modify the value, pass the result back through new_value, + // and also set value_changed to true. + virtual bool ExtractExpiration(const Slice& key, const Slice& value, + uint64_t now, uint64_t* expiration, + std::string* new_value, bool* value_changed); + + virtual ~TTLExtractor() = default; +}; + } // namespace blob_db } // namespace rocksdb #endif // ROCKSDB_LITE diff --git a/utilities/blob_db/ttl_extractor.cc b/utilities/blob_db/ttl_extractor.cc index 735b2f30f..267f904b6 100644 --- a/utilities/blob_db/ttl_extractor.cc +++ b/utilities/blob_db/ttl_extractor.cc @@ -2,8 +2,9 @@ // 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). -#include "ttl_extractor.h" +#ifndef ROCKSDB_LITE +#include "utilities/blob_db/blob_db.h" #include "util/coding.h" namespace rocksdb { @@ -29,3 +30,5 @@ bool TTLExtractor::ExtractExpiration(const Slice& key, const Slice& value, } // namespace blob_db } // namespace rocksdb + +#endif // ROCKSDB_LITE diff --git a/utilities/blob_db/ttl_extractor.h b/utilities/blob_db/ttl_extractor.h deleted file mode 100644 index 51df94451..000000000 --- a/utilities/blob_db/ttl_extractor.h +++ /dev/null @@ -1,43 +0,0 @@ -// 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 -#include - -#include "rocksdb/slice.h" - -namespace rocksdb { -namespace blob_db { - -// TTLExtractor allow applications to extract TTL from key-value pairs. -// This useful for applications using Put or WriteBatch to write keys and -// don't intend to migrate to PutWithTTL or PutUntil. -// -// Applications can implement either ExtractTTL or ExtractExpiration. If both -// are implemented, ExtractExpiration will take precedence. -class TTLExtractor { - public: - // Extract TTL from key-value pair. - // Return true if the key has TTL, false otherwise. If key has TTL, - // TTL is pass back through ttl. The method can optionally modify the value, - // pass the result back through new_value, and also set value_changed to true. - virtual bool ExtractTTL(const Slice& key, const Slice& value, uint64_t* ttl, - std::string* new_value, bool* value_changed); - - // Extract expiration time from key-value pair. - // Return true if the key has expiration time, false otherwise. If key has - // expiration time, it is pass back through expiration. The method can - // optionally modify the value, pass the result back through new_value, - // and also set value_changed to true. - virtual bool ExtractExpiration(const Slice& key, const Slice& value, - uint64_t now, uint64_t* expiration, - std::string* new_value, bool* value_changed); - - virtual ~TTLExtractor() = default; -}; - -} // namespace blob_db -} // namespace rocksdb