ldb_cmd_impl.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628
  1. // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
  2. // This source code is licensed under both the GPLv2 (found in the
  3. // COPYING file in the root directory) and Apache 2.0 License
  4. // (found in the LICENSE.Apache file in the root directory).
  5. #pragma once
  6. #include "rocksdb/utilities/ldb_cmd.h"
  7. #include <map>
  8. #include <string>
  9. #include <utility>
  10. #include <vector>
  11. namespace ROCKSDB_NAMESPACE {
  12. class CompactorCommand : public LDBCommand {
  13. public:
  14. static std::string Name() { return "compact"; }
  15. CompactorCommand(const std::vector<std::string>& params,
  16. const std::map<std::string, std::string>& options,
  17. const std::vector<std::string>& flags);
  18. static void Help(std::string& ret);
  19. virtual void DoCommand() override;
  20. private:
  21. bool null_from_;
  22. std::string from_;
  23. bool null_to_;
  24. std::string to_;
  25. };
  26. class DBFileDumperCommand : public LDBCommand {
  27. public:
  28. static std::string Name() { return "dump_live_files"; }
  29. DBFileDumperCommand(const std::vector<std::string>& params,
  30. const std::map<std::string, std::string>& options,
  31. const std::vector<std::string>& flags);
  32. static void Help(std::string& ret);
  33. virtual void DoCommand() override;
  34. };
  35. class DBDumperCommand : public LDBCommand {
  36. public:
  37. static std::string Name() { return "dump"; }
  38. DBDumperCommand(const std::vector<std::string>& params,
  39. const std::map<std::string, std::string>& options,
  40. const std::vector<std::string>& flags);
  41. static void Help(std::string& ret);
  42. virtual void DoCommand() override;
  43. private:
  44. /**
  45. * Extract file name from the full path. We handle both the forward slash (/)
  46. * and backslash (\) to make sure that different OS-s are supported.
  47. */
  48. static std::string GetFileNameFromPath(const std::string& s) {
  49. std::size_t n = s.find_last_of("/\\");
  50. if (std::string::npos == n) {
  51. return s;
  52. } else {
  53. return s.substr(n + 1);
  54. }
  55. }
  56. void DoDumpCommand();
  57. bool null_from_;
  58. std::string from_;
  59. bool null_to_;
  60. std::string to_;
  61. int max_keys_;
  62. std::string delim_;
  63. bool count_only_;
  64. bool count_delim_;
  65. bool print_stats_;
  66. std::string path_;
  67. static const std::string ARG_COUNT_ONLY;
  68. static const std::string ARG_COUNT_DELIM;
  69. static const std::string ARG_STATS;
  70. static const std::string ARG_TTL_BUCKET;
  71. };
  72. class InternalDumpCommand : public LDBCommand {
  73. public:
  74. static std::string Name() { return "idump"; }
  75. InternalDumpCommand(const std::vector<std::string>& params,
  76. const std::map<std::string, std::string>& options,
  77. const std::vector<std::string>& flags);
  78. static void Help(std::string& ret);
  79. virtual void DoCommand() override;
  80. private:
  81. bool has_from_;
  82. std::string from_;
  83. bool has_to_;
  84. std::string to_;
  85. int max_keys_;
  86. std::string delim_;
  87. bool count_only_;
  88. bool count_delim_;
  89. bool print_stats_;
  90. bool is_input_key_hex_;
  91. static const std::string ARG_DELIM;
  92. static const std::string ARG_COUNT_ONLY;
  93. static const std::string ARG_COUNT_DELIM;
  94. static const std::string ARG_STATS;
  95. static const std::string ARG_INPUT_KEY_HEX;
  96. };
  97. class DBLoaderCommand : public LDBCommand {
  98. public:
  99. static std::string Name() { return "load"; }
  100. DBLoaderCommand(std::string& db_name, std::vector<std::string>& args);
  101. DBLoaderCommand(const std::vector<std::string>& params,
  102. const std::map<std::string, std::string>& options,
  103. const std::vector<std::string>& flags);
  104. static void Help(std::string& ret);
  105. virtual void DoCommand() override;
  106. virtual Options PrepareOptionsForOpenDB() override;
  107. private:
  108. bool disable_wal_;
  109. bool bulk_load_;
  110. bool compact_;
  111. static const std::string ARG_DISABLE_WAL;
  112. static const std::string ARG_BULK_LOAD;
  113. static const std::string ARG_COMPACT;
  114. };
  115. class ManifestDumpCommand : public LDBCommand {
  116. public:
  117. static std::string Name() { return "manifest_dump"; }
  118. ManifestDumpCommand(const std::vector<std::string>& params,
  119. const std::map<std::string, std::string>& options,
  120. const std::vector<std::string>& flags);
  121. static void Help(std::string& ret);
  122. virtual void DoCommand() override;
  123. virtual bool NoDBOpen() override { return true; }
  124. private:
  125. bool verbose_;
  126. bool json_;
  127. std::string path_;
  128. static const std::string ARG_VERBOSE;
  129. static const std::string ARG_JSON;
  130. static const std::string ARG_PATH;
  131. };
  132. class FileChecksumDumpCommand : public LDBCommand {
  133. public:
  134. static std::string Name() { return "file_checksum_dump"; }
  135. FileChecksumDumpCommand(const std::vector<std::string>& params,
  136. const std::map<std::string, std::string>& options,
  137. const std::vector<std::string>& flags);
  138. static void Help(std::string& ret);
  139. void DoCommand() override;
  140. bool NoDBOpen() override { return true; }
  141. private:
  142. std::string path_;
  143. static const std::string ARG_PATH;
  144. };
  145. class ListColumnFamiliesCommand : public LDBCommand {
  146. public:
  147. static std::string Name() { return "list_column_families"; }
  148. ListColumnFamiliesCommand(const std::vector<std::string>& params,
  149. const std::map<std::string, std::string>& options,
  150. const std::vector<std::string>& flags);
  151. static void Help(std::string& ret);
  152. virtual void DoCommand() override;
  153. virtual bool NoDBOpen() override { return true; }
  154. };
  155. class CreateColumnFamilyCommand : public LDBCommand {
  156. public:
  157. static std::string Name() { return "create_column_family"; }
  158. CreateColumnFamilyCommand(const std::vector<std::string>& params,
  159. const std::map<std::string, std::string>& options,
  160. const std::vector<std::string>& flags);
  161. static void Help(std::string& ret);
  162. virtual void DoCommand() override;
  163. virtual bool NoDBOpen() override { return false; }
  164. private:
  165. std::string new_cf_name_;
  166. };
  167. class DropColumnFamilyCommand : public LDBCommand {
  168. public:
  169. static std::string Name() { return "drop_column_family"; }
  170. DropColumnFamilyCommand(const std::vector<std::string>& params,
  171. const std::map<std::string, std::string>& options,
  172. const std::vector<std::string>& flags);
  173. static void Help(std::string& ret);
  174. virtual void DoCommand() override;
  175. virtual bool NoDBOpen() override { return false; }
  176. private:
  177. std::string cf_name_to_drop_;
  178. };
  179. class ReduceDBLevelsCommand : public LDBCommand {
  180. public:
  181. static std::string Name() { return "reduce_levels"; }
  182. ReduceDBLevelsCommand(const std::vector<std::string>& params,
  183. const std::map<std::string, std::string>& options,
  184. const std::vector<std::string>& flags);
  185. virtual Options PrepareOptionsForOpenDB() override;
  186. virtual void DoCommand() override;
  187. virtual bool NoDBOpen() override { return true; }
  188. static void Help(std::string& msg);
  189. static std::vector<std::string> PrepareArgs(const std::string& db_path,
  190. int new_levels,
  191. bool print_old_level = false);
  192. private:
  193. int old_levels_;
  194. int new_levels_;
  195. bool print_old_levels_;
  196. static const std::string ARG_NEW_LEVELS;
  197. static const std::string ARG_PRINT_OLD_LEVELS;
  198. Status GetOldNumOfLevels(Options& opt, int* levels);
  199. };
  200. class ChangeCompactionStyleCommand : public LDBCommand {
  201. public:
  202. static std::string Name() { return "change_compaction_style"; }
  203. ChangeCompactionStyleCommand(
  204. const std::vector<std::string>& params,
  205. const std::map<std::string, std::string>& options,
  206. const std::vector<std::string>& flags);
  207. virtual Options PrepareOptionsForOpenDB() override;
  208. virtual void DoCommand() override;
  209. static void Help(std::string& msg);
  210. private:
  211. int old_compaction_style_;
  212. int new_compaction_style_;
  213. static const std::string ARG_OLD_COMPACTION_STYLE;
  214. static const std::string ARG_NEW_COMPACTION_STYLE;
  215. };
  216. class WALDumperCommand : public LDBCommand {
  217. public:
  218. static std::string Name() { return "dump_wal"; }
  219. WALDumperCommand(const std::vector<std::string>& params,
  220. const std::map<std::string, std::string>& options,
  221. const std::vector<std::string>& flags);
  222. virtual bool NoDBOpen() override { return true; }
  223. static void Help(std::string& ret);
  224. virtual void DoCommand() override;
  225. private:
  226. bool print_header_;
  227. std::string wal_file_;
  228. bool print_values_;
  229. bool is_write_committed_; // default will be set to true
  230. static const std::string ARG_WAL_FILE;
  231. static const std::string ARG_WRITE_COMMITTED;
  232. static const std::string ARG_PRINT_HEADER;
  233. static const std::string ARG_PRINT_VALUE;
  234. };
  235. class GetCommand : public LDBCommand {
  236. public:
  237. static std::string Name() { return "get"; }
  238. GetCommand(const std::vector<std::string>& params,
  239. const std::map<std::string, std::string>& options,
  240. const std::vector<std::string>& flags);
  241. virtual void DoCommand() override;
  242. static void Help(std::string& ret);
  243. private:
  244. std::string key_;
  245. };
  246. class ApproxSizeCommand : public LDBCommand {
  247. public:
  248. static std::string Name() { return "approxsize"; }
  249. ApproxSizeCommand(const std::vector<std::string>& params,
  250. const std::map<std::string, std::string>& options,
  251. const std::vector<std::string>& flags);
  252. virtual void DoCommand() override;
  253. static void Help(std::string& ret);
  254. private:
  255. std::string start_key_;
  256. std::string end_key_;
  257. };
  258. class BatchPutCommand : public LDBCommand {
  259. public:
  260. static std::string Name() { return "batchput"; }
  261. BatchPutCommand(const std::vector<std::string>& params,
  262. const std::map<std::string, std::string>& options,
  263. const std::vector<std::string>& flags);
  264. virtual void DoCommand() override;
  265. static void Help(std::string& ret);
  266. virtual Options PrepareOptionsForOpenDB() override;
  267. private:
  268. /**
  269. * The key-values to be inserted.
  270. */
  271. std::vector<std::pair<std::string, std::string>> key_values_;
  272. };
  273. class ScanCommand : public LDBCommand {
  274. public:
  275. static std::string Name() { return "scan"; }
  276. ScanCommand(const std::vector<std::string>& params,
  277. const std::map<std::string, std::string>& options,
  278. const std::vector<std::string>& flags);
  279. virtual void DoCommand() override;
  280. static void Help(std::string& ret);
  281. private:
  282. std::string start_key_;
  283. std::string end_key_;
  284. bool start_key_specified_;
  285. bool end_key_specified_;
  286. int max_keys_scanned_;
  287. bool no_value_;
  288. };
  289. class DeleteCommand : public LDBCommand {
  290. public:
  291. static std::string Name() { return "delete"; }
  292. DeleteCommand(const std::vector<std::string>& params,
  293. const std::map<std::string, std::string>& options,
  294. const std::vector<std::string>& flags);
  295. virtual void DoCommand() override;
  296. static void Help(std::string& ret);
  297. private:
  298. std::string key_;
  299. };
  300. class DeleteRangeCommand : public LDBCommand {
  301. public:
  302. static std::string Name() { return "deleterange"; }
  303. DeleteRangeCommand(const std::vector<std::string>& params,
  304. const std::map<std::string, std::string>& options,
  305. const std::vector<std::string>& flags);
  306. virtual void DoCommand() override;
  307. static void Help(std::string& ret);
  308. private:
  309. std::string begin_key_;
  310. std::string end_key_;
  311. };
  312. class PutCommand : public LDBCommand {
  313. public:
  314. static std::string Name() { return "put"; }
  315. PutCommand(const std::vector<std::string>& params,
  316. const std::map<std::string, std::string>& options,
  317. const std::vector<std::string>& flags);
  318. virtual void DoCommand() override;
  319. static void Help(std::string& ret);
  320. virtual Options PrepareOptionsForOpenDB() override;
  321. private:
  322. std::string key_;
  323. std::string value_;
  324. };
  325. /**
  326. * Command that starts up a REPL shell that allows
  327. * get/put/delete.
  328. */
  329. class DBQuerierCommand : public LDBCommand {
  330. public:
  331. static std::string Name() { return "query"; }
  332. DBQuerierCommand(const std::vector<std::string>& params,
  333. const std::map<std::string, std::string>& options,
  334. const std::vector<std::string>& flags);
  335. static void Help(std::string& ret);
  336. virtual void DoCommand() override;
  337. private:
  338. static const char* HELP_CMD;
  339. static const char* GET_CMD;
  340. static const char* PUT_CMD;
  341. static const char* DELETE_CMD;
  342. };
  343. class CheckConsistencyCommand : public LDBCommand {
  344. public:
  345. static std::string Name() { return "checkconsistency"; }
  346. CheckConsistencyCommand(const std::vector<std::string>& params,
  347. const std::map<std::string, std::string>& options,
  348. const std::vector<std::string>& flags);
  349. virtual void DoCommand() override;
  350. virtual bool NoDBOpen() override { return true; }
  351. static void Help(std::string& ret);
  352. };
  353. class CheckPointCommand : public LDBCommand {
  354. public:
  355. static std::string Name() { return "checkpoint"; }
  356. CheckPointCommand(const std::vector<std::string>& params,
  357. const std::map<std::string, std::string>& options,
  358. const std::vector<std::string>& flags);
  359. virtual void DoCommand() override;
  360. static void Help(std::string& ret);
  361. std::string checkpoint_dir_;
  362. private:
  363. static const std::string ARG_CHECKPOINT_DIR;
  364. };
  365. class RepairCommand : public LDBCommand {
  366. public:
  367. static std::string Name() { return "repair"; }
  368. RepairCommand(const std::vector<std::string>& params,
  369. const std::map<std::string, std::string>& options,
  370. const std::vector<std::string>& flags);
  371. virtual void DoCommand() override;
  372. virtual bool NoDBOpen() override { return true; }
  373. static void Help(std::string& ret);
  374. };
  375. class BackupableCommand : public LDBCommand {
  376. public:
  377. BackupableCommand(const std::vector<std::string>& params,
  378. const std::map<std::string, std::string>& options,
  379. const std::vector<std::string>& flags);
  380. protected:
  381. static void Help(const std::string& name, std::string& ret);
  382. std::string backup_env_uri_;
  383. std::string backup_dir_;
  384. int num_threads_;
  385. std::unique_ptr<Logger> logger_;
  386. std::shared_ptr<Env> backup_env_guard_;
  387. private:
  388. static const std::string ARG_BACKUP_DIR;
  389. static const std::string ARG_BACKUP_ENV_URI;
  390. static const std::string ARG_NUM_THREADS;
  391. static const std::string ARG_STDERR_LOG_LEVEL;
  392. };
  393. class BackupCommand : public BackupableCommand {
  394. public:
  395. static std::string Name() { return "backup"; }
  396. BackupCommand(const std::vector<std::string>& params,
  397. const std::map<std::string, std::string>& options,
  398. const std::vector<std::string>& flags);
  399. virtual void DoCommand() override;
  400. static void Help(std::string& ret);
  401. };
  402. class RestoreCommand : public BackupableCommand {
  403. public:
  404. static std::string Name() { return "restore"; }
  405. RestoreCommand(const std::vector<std::string>& params,
  406. const std::map<std::string, std::string>& options,
  407. const std::vector<std::string>& flags);
  408. virtual void DoCommand() override;
  409. virtual bool NoDBOpen() override { return true; }
  410. static void Help(std::string& ret);
  411. };
  412. class WriteExternalSstFilesCommand : public LDBCommand {
  413. public:
  414. static std::string Name() { return "write_extern_sst"; }
  415. WriteExternalSstFilesCommand(
  416. const std::vector<std::string>& params,
  417. const std::map<std::string, std::string>& options,
  418. const std::vector<std::string>& flags);
  419. virtual void DoCommand() override;
  420. virtual bool NoDBOpen() override { return false; }
  421. virtual Options PrepareOptionsForOpenDB() override;
  422. static void Help(std::string& ret);
  423. private:
  424. std::string output_sst_path_;
  425. };
  426. class IngestExternalSstFilesCommand : public LDBCommand {
  427. public:
  428. static std::string Name() { return "ingest_extern_sst"; }
  429. IngestExternalSstFilesCommand(
  430. const std::vector<std::string>& params,
  431. const std::map<std::string, std::string>& options,
  432. const std::vector<std::string>& flags);
  433. virtual void DoCommand() override;
  434. virtual bool NoDBOpen() override { return false; }
  435. virtual Options PrepareOptionsForOpenDB() override;
  436. static void Help(std::string& ret);
  437. private:
  438. std::string input_sst_path_;
  439. bool move_files_;
  440. bool snapshot_consistency_;
  441. bool allow_global_seqno_;
  442. bool allow_blocking_flush_;
  443. bool ingest_behind_;
  444. bool write_global_seqno_;
  445. static const std::string ARG_MOVE_FILES;
  446. static const std::string ARG_SNAPSHOT_CONSISTENCY;
  447. static const std::string ARG_ALLOW_GLOBAL_SEQNO;
  448. static const std::string ARG_ALLOW_BLOCKING_FLUSH;
  449. static const std::string ARG_INGEST_BEHIND;
  450. static const std::string ARG_WRITE_GLOBAL_SEQNO;
  451. };
  452. // Command that prints out range delete tombstones in SST files.
  453. class ListFileRangeDeletesCommand : public LDBCommand {
  454. public:
  455. static std::string Name() { return "list_file_range_deletes"; }
  456. ListFileRangeDeletesCommand(const std::map<std::string, std::string>& options,
  457. const std::vector<std::string>& flags);
  458. void DoCommand() override;
  459. static void Help(std::string& ret);
  460. private:
  461. int max_keys_ = 1000;
  462. };
  463. } // namespace ROCKSDB_NAMESPACE