summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAndrew Kryczka <andrewkr@fb.com>2017-05-12 14:59:57 -0700
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>2017-05-12 15:54:06 -0700
commit3fa9a39c68e0f75298236589b3a0119d595862eb (patch)
tree68c31129caa997bc24b3d3ddb297908445d02f39 /include
parent1a60982a5a1a0eb2ae7c1ef3b46b6510bac37f55 (diff)
Add GetAllKeyVersions API
Summary: - Introduced an include/ file dedicated to db-related debug functions to avoid making db.h more complex - Added debugging function, `GetAllKeyVersions()`, to return a listing of internal data for a range of user keys. The new `struct KeyVersion` exposes data similar to internal key without exposing any internal type. - Migrated the "ldb idump" subcommand to use this function - The API takes an inclusive-exclusive range to match behavior of "ldb idump". This will be quite annoying for users who want to query a single user key's versions :(. Closes https://github.com/facebook/rocksdb/pull/2232 Differential Revision: D4976007 Pulled By: ajkr fbshipit-source-id: cab375da53a7595d6575af2b7e3b776aa3ad793e
Diffstat (limited to 'include')
-rw-r--r--include/rocksdb/utilities/debug.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/include/rocksdb/utilities/debug.h b/include/rocksdb/utilities/debug.h
new file mode 100644
index 000000000..1ef52c102
--- /dev/null
+++ b/include/rocksdb/utilities/debug.h
@@ -0,0 +1,41 @@
+// Copyright (c) 2017-present, 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.
+// This source code is also licensed under the GPLv2 license found in the
+// COPYING file in the root directory of this source tree.
+
+#pragma once
+
+#ifndef ROCKSDB_LITE
+
+#include "rocksdb/db.h"
+#include "rocksdb/types.h"
+
+namespace rocksdb {
+
+// Data associated with a particular version of a key. A database may internally
+// store multiple versions of a same user key due to snapshots, compaction not
+// happening yet, etc.
+struct KeyVersion {
+ KeyVersion(const std::string& _user_key, const std::string& _value,
+ SequenceNumber _sequence, int _type)
+ : user_key(_user_key), value(_value), sequence(_sequence), type(_type) {}
+
+ std::string user_key;
+ std::string value;
+ SequenceNumber sequence;
+ // TODO(ajkr): we should provide a helper function that converts the int to a
+ // string describing the type for easier debugging.
+ int type;
+};
+
+// Returns listing of all versions of keys in the provided user key range.
+// The range is inclusive-inclusive, i.e., [`begin_key`, `end_key`].
+// The result is inserted into the provided vector, `key_versions`.
+Status GetAllKeyVersions(DB* db, Slice begin_key, Slice end_key,
+ std::vector<KeyVersion>* key_versions);
+
+} // namespace rocksdb
+
+#endif // ROCKSDB_LITE