unique_proto_database.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. // Copyright 2018 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef COMPONENTS_LEVELDB_PROTO_INTERNAL_UNIQUE_PROTO_DATABASE_H_
  5. #define COMPONENTS_LEVELDB_PROTO_INTERNAL_UNIQUE_PROTO_DATABASE_H_
  6. #include <memory>
  7. #include <string>
  8. #include "base/bind.h"
  9. #include "base/component_export.h"
  10. #include "base/sequence_checker.h"
  11. #include "components/leveldb_proto/internal/proto_leveldb_wrapper.h"
  12. #include "components/leveldb_proto/public/proto_database.h"
  13. namespace leveldb_proto {
  14. // An implementation of ProtoDatabase<std::string> that manages the lifecycle of
  15. // a unique LevelDB instance.
  16. class COMPONENT_EXPORT(LEVELDB_PROTO) UniqueProtoDatabase {
  17. public:
  18. explicit UniqueProtoDatabase(
  19. const scoped_refptr<base::SequencedTaskRunner>& task_runner);
  20. explicit UniqueProtoDatabase(std::unique_ptr<ProtoLevelDBWrapper>);
  21. virtual ~UniqueProtoDatabase();
  22. UniqueProtoDatabase(
  23. const base::FilePath& database_dir,
  24. const leveldb_env::Options& options,
  25. const scoped_refptr<base::SequencedTaskRunner>& task_runner);
  26. virtual void Init(const std::string& client_name,
  27. Callbacks::InitStatusCallback callback);
  28. virtual void InitWithDatabase(LevelDB* database,
  29. const base::FilePath& database_dir,
  30. const leveldb_env::Options& options,
  31. bool destroy_on_corruption,
  32. Callbacks::InitStatusCallback callback);
  33. virtual void UpdateEntries(std::unique_ptr<KeyValueVector> entries_to_save,
  34. std::unique_ptr<KeyVector> keys_to_remove,
  35. Callbacks::UpdateCallback callback);
  36. virtual void UpdateEntriesWithRemoveFilter(
  37. std::unique_ptr<KeyValueVector> entries_to_save,
  38. const KeyFilter& delete_key_filter,
  39. Callbacks::UpdateCallback callback);
  40. virtual void UpdateEntriesWithRemoveFilter(
  41. std::unique_ptr<KeyValueVector> entries_to_save,
  42. const KeyFilter& delete_key_filter,
  43. const std::string& target_prefix,
  44. Callbacks::UpdateCallback callback);
  45. virtual void LoadEntries(typename Callbacks::LoadCallback callback);
  46. virtual void LoadEntriesWithFilter(const KeyFilter& filter,
  47. typename Callbacks::LoadCallback callback);
  48. virtual void LoadEntriesWithFilter(const KeyFilter& key_filter,
  49. const leveldb::ReadOptions& options,
  50. const std::string& target_prefix,
  51. typename Callbacks::LoadCallback callback);
  52. virtual void LoadKeysAndEntries(
  53. typename Callbacks::LoadKeysAndEntriesCallback callback);
  54. virtual void LoadKeysAndEntriesWithFilter(
  55. const KeyFilter& filter,
  56. typename Callbacks::LoadKeysAndEntriesCallback callback);
  57. virtual void LoadKeysAndEntriesWithFilter(
  58. const KeyFilter& filter,
  59. const leveldb::ReadOptions& options,
  60. const std::string& target_prefix,
  61. typename Callbacks::LoadKeysAndEntriesCallback callback);
  62. virtual void LoadKeysAndEntriesInRange(
  63. const std::string& start,
  64. const std::string& end,
  65. typename Callbacks::LoadKeysAndEntriesCallback callback);
  66. virtual void LoadKeysAndEntriesWhile(
  67. const std::string& start,
  68. const KeyIteratorController& controller,
  69. typename Callbacks::LoadKeysAndEntriesCallback callback);
  70. virtual void LoadKeys(Callbacks::LoadKeysCallback callback);
  71. virtual void LoadKeys(const std::string& target_prefix,
  72. Callbacks::LoadKeysCallback callback);
  73. virtual void GetEntry(const std::string& key,
  74. typename Callbacks::GetCallback callback);
  75. virtual void Destroy(Callbacks::DestroyCallback callback);
  76. void RemoveKeysForTesting(const KeyFilter& key_filter,
  77. const std::string& target_prefix,
  78. Callbacks::UpdateCallback callback);
  79. bool GetApproximateMemoryUse(uint64_t* approx_mem_use);
  80. // Sets the identifier used by the underlying LevelDB wrapper to record
  81. // metrics.
  82. void SetMetricsId(const std::string& id);
  83. protected:
  84. std::unique_ptr<ProtoLevelDBWrapper> db_wrapper_;
  85. private:
  86. SEQUENCE_CHECKER(sequence_checker_);
  87. base::FilePath database_dir_;
  88. leveldb_env::Options options_;
  89. std::unique_ptr<LevelDB> db_;
  90. };
  91. } // namespace leveldb_proto
  92. #endif // COMPONENTS_LEVELDB_PROTO_INTERNAL_UNIQUE_PROTO_DATABASE_H_