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

Unified Diff: chrome/browser/sync_file_system/drive_backend/metadata_database.h

Issue 18591004: [SyncFS] Implement MetadataDatabase initialization (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: +test verification Created 7 years, 5 months 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
Index: chrome/browser/sync_file_system/drive_backend/metadata_database.h
diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_database.h b/chrome/browser/sync_file_system/drive_backend/metadata_database.h
index 967950a29c68b6a420024a7c7eb60bc932f1da4c..ea2e795e483c8d2480b9f179eadd0fface00a7d6 100644
--- a/chrome/browser/sync_file_system/drive_backend/metadata_database.h
+++ b/chrome/browser/sync_file_system/drive_backend/metadata_database.h
@@ -5,9 +5,12 @@
#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_H_
#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_METADATA_DATABASE_H_
+#include <map>
+
#include "base/callback_forward.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/scoped_vector.h"
+#include "base/memory/weak_ptr.h"
#include "webkit/browser/fileapi/syncable/sync_callbacks.h"
#include "webkit/browser/fileapi/syncable/sync_status_code.h"
@@ -32,11 +35,39 @@ namespace drive_backend {
class ServiceMetadata;
class DriveFileMetadata;
-struct InitializeInfo;
// This class holds a snapshot of the server side metadata.
class MetadataDatabase {
public:
+ struct FileIDComparator {
kinuko 2013/07/04 15:59:11 can't these typenames be kept private?
tzik 2013/07/05 07:42:28 Done.
+ bool operator()(DriveFileMetadata* left, DriveFileMetadata* right);
+ };
+
+ typedef std::set<DriveFileMetadata*, FileIDComparator> FileSet;
+ typedef std::map<std::string, DriveFileMetadata*> FileByFileID;
+ typedef std::map<std::string, FileSet> FilesByParent;
+ typedef std::map<std::pair<std::string, std::string>, DriveFileMetadata*>
+ FileByParentAndTitle;
+ typedef std::map<std::string, DriveFileMetadata*> FileByAppID;
+
+ struct InitializeInfo {
+ SyncStatusCode status;
+ scoped_ptr<leveldb::DB> db;
+
+ scoped_ptr<ServiceMetadata> service_metadata;
+ ScopedVector<DriveFileMetadata> file_metadata;
+
+ FileByFileID file_by_file_id;
+ FilesByParent files_by_parent;
+ FileByAppID app_root_by_app_id;
+ FileByParentAndTitle active_file_by_parent_and_title;
kinuko 2013/07/04 15:59:11 Is there a chance we could simplify some initializ
tzik 2013/07/05 07:42:28 Done.
+
+ bool created;
+
+ InitializeInfo();
+ ~InitializeInfo();
+ };
+
explicit MetadataDatabase(base::SequencedTaskRunner* task_runner);
~MetadataDatabase();
@@ -124,6 +155,44 @@ class MetadataDatabase {
const SyncStatusCallback& callback);
private:
+ friend class SyncFS_MetadataDatabaseTest;
+
+ static const char* kDatabaseVersionKey;
+ static const int64 kCurrentDatabaseVersion;
+ static const char* kServiceMetadataKey;
+ static const char* kFileMetadataKeyPrefix;
+
+ static scoped_ptr<leveldb::DB> OpenDatabase(
+ const base::FilePath& path,
+ SyncStatusCode* status,
+ bool* created);
+ static SyncStatusCode WriteInitialData(leveldb::DB* db);
+ static SyncStatusCode MigrateDatabaseIfNeeded(leveldb::DB* db);
+ static SyncStatusCode ReadDatabaseContents(leveldb::DB* db,
+ InitializeInfo* info);
+ static SyncStatusCode ConstructDataStructure(InitializeInfo* info,
+ leveldb::WriteBatch* batch);
+ static scoped_ptr<InitializeInfo> InitializeOnWorker(
+ const base::FilePath& db_path);
+
+ void WriteToDB(scoped_ptr<leveldb::WriteBatch> batch,
kinuko 2013/07/04 15:59:11 Do you want to use Database or DB in methods names
tzik 2013/07/05 07:42:28 Changed to WriteToDatabase. I prefer using Databas
+ const SyncStatusCallback& callback);
+
+ void DidInitialize(const SyncStatusCallback& callback,
+ scoped_ptr<InitializeInfo> contents);
+
+ scoped_refptr<base::SequencedTaskRunner> task_runner_;
+ scoped_ptr<leveldb::DB> db_;
+
+ scoped_ptr<ServiceMetadata> service_metadata_;
+ FileByFileID file_by_file_id_; // Owned.
+
+ FilesByParent files_by_parent_; // Not owned.
+ FileByAppID app_root_by_app_id_; // Not owned.
+ FileByParentAndTitle active_file_by_parent_and_title_; // Not owned.
+
+ base::WeakPtrFactory<MetadataDatabase> weak_ptr_factory_;
+
DISALLOW_COPY_AND_ASSIGN(MetadataDatabase);
};

Powered by Google App Engine
This is Rietveld 408576698