Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(951)

Unified Diff: sync/internal_api/public/model_type_store_backend.h

Issue 1436573002: [Sync] Implementation of ModelTypeStoreBackend (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add paranoid_checks Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sync/internal_api/model_type_store_impl.cc ('k') | sync/sync_tests.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sync/internal_api/public/model_type_store_backend.h
diff --git a/sync/internal_api/public/model_type_store_backend.h b/sync/internal_api/public/model_type_store_backend.h
index cdbcd7b892bd6b44ec219ed50297b209a0ff7715..47ff50d8f729358ebc89dd40fe3f586b8de765ef 100644
--- a/sync/internal_api/public/model_type_store_backend.h
+++ b/sync/internal_api/public/model_type_store_backend.h
@@ -5,20 +5,79 @@
#ifndef SYNC_INTERNAL_API_PUBLIC_MODEL_TYPE_STORE_BACKEND_H_
#define SYNC_INTERNAL_API_PUBLIC_MODEL_TYPE_STORE_BACKEND_H_
+#include <string>
+
+#include "base/macros.h"
+#include "base/memory/scoped_ptr.h"
#include "base/threading/non_thread_safe.h"
#include "sync/api/model_type_store.h"
+#include "sync/base/sync_export.h"
+
+namespace leveldb {
+class DB;
+class Env;
+class WriteBatch;
+} // namespace leveldb
namespace syncer_v2 {
// ModelTypeStoreBackend handles operations with leveldb. It is oblivious of the
// fact that it is called from separate thread (with the exception of ctor),
// meaning it shouldn't deal with callbacks and task_runners.
-class ModelTypeStoreBackend : public base::NonThreadSafe {
+class SYNC_EXPORT_PRIVATE ModelTypeStoreBackend : public base::NonThreadSafe {
public:
ModelTypeStoreBackend();
~ModelTypeStoreBackend();
- ModelTypeStore::Result Init();
+ // Helper function to create in memory environment for leveldb.
+ static scoped_ptr<leveldb::Env> CreateInMemoryEnv();
+
+ // Take ownership of env from consumer of ModelTypeStoreBackend object. env
+ // will be deleted right after db_ is deleted. This function allows tests to
+ // create in-memory store without requiring them to manage env ownership.
+ void TakeEnvOwnership(scoped_ptr<leveldb::Env> env);
+
+ // Init opens database at |path|. If database doesn't exist it creates one.
+ // Normally |env| should be nullptr, this causes leveldb to use default disk
+ // based environment from leveldb::Env::Default().
+ // Providing |env| allows to override environment used by leveldb for tests
+ // with in-memory or faulty environment.
+ ModelTypeStore::Result Init(const std::string& path, leveldb::Env* env);
+
+ // Reads records with keys formed by prepending ids from |id_list| with
+ // |prefix|. If the record is found its id (without prefix) and value is
+ // appended to record_list. If record is not found its id is appended to
+ // |missing_id_list|. It is not an error that records for ids are not found so
+ // function will still return success in this case.
+ ModelTypeStore::Result ReadRecordsWithPrefix(
+ const std::string& prefix,
+ const ModelTypeStore::IdList& id_list,
+ ModelTypeStore::RecordList* record_list,
+ ModelTypeStore::IdList* missing_id_list);
+
+ // Reads all records with keys starting with |prefix|. Prefix is removed from
+ // key before it is added to |record_list|.
+ ModelTypeStore::Result ReadAllRecordsWithPrefix(
+ const std::string& prefix,
+ ModelTypeStore::RecordList* record_list);
+
+ // Writes modifications accumulated in |write_batch| to database.
+ ModelTypeStore::Result WriteModifications(
+ scoped_ptr<leveldb::WriteBatch> write_batch);
+
+ private:
+ // In some scenarios ModelTypeStoreBackend holds ownership of env. Typical
+ // example is when test creates in memory environment with CreateInMemoryEnv
+ // and wants it to be destroyed along with backend. This is achieved by
+ // passing ownership of env to TakeEnvOwnership function.
+ //
+ // env_ declaration should appear before declaration of db_ because
+ // environment object should still be valid when db_'s destructor is called.
+ scoped_ptr<leveldb::Env> env_;
+
+ scoped_ptr<leveldb::DB> db_;
+
+ DISALLOW_COPY_AND_ASSIGN(ModelTypeStoreBackend);
};
} // namespace syncer_v2
« no previous file with comments | « sync/internal_api/model_type_store_impl.cc ('k') | sync/sync_tests.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698