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

Side by Side Diff: chrome/browser/sync/syncable/directory_backing_store.h

Issue 2830027: Remove extended attributes. The lame broken codepath in the DBS was causing (Closed)
Patch Set: Synced with TOT, resolved conflicts. Created 10 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_SYNC_SYNCABLE_DIRECTORY_BACKING_STORE_H_ 5 #ifndef CHROME_BROWSER_SYNC_SYNCABLE_DIRECTORY_BACKING_STORE_H_
6 #define CHROME_BROWSER_SYNC_SYNCABLE_DIRECTORY_BACKING_STORE_H_ 6 #define CHROME_BROWSER_SYNC_SYNCABLE_DIRECTORY_BACKING_STORE_H_
7 7
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 10
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 // SaveChanges is called a new sqlite3 handle is created, and it will get closed 52 // SaveChanges is called a new sqlite3 handle is created, and it will get closed
53 // when the DBS is destroyed, which is the reason for the requirement that the 53 // when the DBS is destroyed, which is the reason for the requirement that the
54 // thread that "uses" the DBS is the thread that destroys it. 54 // thread that "uses" the DBS is the thread that destroys it.
55 class DirectoryBackingStore { 55 class DirectoryBackingStore {
56 public: 56 public:
57 DirectoryBackingStore(const std::string& dir_name, 57 DirectoryBackingStore(const std::string& dir_name,
58 const FilePath& backing_filepath); 58 const FilePath& backing_filepath);
59 59
60 virtual ~DirectoryBackingStore(); 60 virtual ~DirectoryBackingStore();
61 61
62 // Loads and drops all currently persisted meta entries into 62 // Loads and drops all currently persisted meta entries into |entry_bucket|
63 // |entry_bucket|, all currently persisted xattrs in |xattrs_bucket|, 63 // and loads appropriate persisted kernel info into |info_bucket|.
64 // and loads appropriate persisted kernel info in |info_bucket|.
65 // NOTE: On success (return value of OPENED), the buckets are populated with 64 // NOTE: On success (return value of OPENED), the buckets are populated with
66 // newly allocated items, meaning ownership is bestowed upon the caller. 65 // newly allocated items, meaning ownership is bestowed upon the caller.
67 DirOpenResult Load(MetahandlesIndex* entry_bucket, 66 DirOpenResult Load(MetahandlesIndex* entry_bucket,
68 ExtendedAttributes* xattrs_bucket,
69 Directory::KernelLoadInfo* kernel_load_info); 67 Directory::KernelLoadInfo* kernel_load_info);
70 68
71 // Updates the on-disk store with the input |snapshot| as a database 69 // Updates the on-disk store with the input |snapshot| as a database
72 // transaction. Does NOT open any syncable transactions as this would cause 70 // transaction. Does NOT open any syncable transactions as this would cause
73 // opening transactions elsewhere to block on synchronous I/O. 71 // opening transactions elsewhere to block on synchronous I/O.
74 // DO NOT CALL THIS FROM MORE THAN ONE THREAD EVER. Also, whichever thread 72 // DO NOT CALL THIS FROM MORE THAN ONE THREAD EVER. Also, whichever thread
75 // calls SaveChanges *must* be the thread that owns/destroys |this|. 73 // calls SaveChanges *must* be the thread that owns/destroys |this|.
76 virtual bool SaveChanges(const Directory::SaveChangesSnapshot& snapshot); 74 virtual bool SaveChanges(const Directory::SaveChangesSnapshot& snapshot);
77 75
78 private: 76 private:
79 FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest, MigrateVersion67To68); 77 FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest, MigrateVersion67To68);
80 FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest, MigrateVersion68To69); 78 FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest, MigrateVersion68To69);
81 FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest, MigrateVersion69To70); 79 FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest, MigrateVersion69To70);
82 FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest, MigrateVersion70To71); 80 FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest, MigrateVersion70To71);
81 FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest, MigrateVersion71To72);
83 FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest, ModelTypeIds); 82 FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest, ModelTypeIds);
84 FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest, Corruption); 83 FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest, Corruption);
85 FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest, DeleteEntries);
86 FRIEND_TEST_ALL_PREFIXES(MigrationTest, ToCurrentVersion); 84 FRIEND_TEST_ALL_PREFIXES(MigrationTest, ToCurrentVersion);
87 friend class MigrationTest; 85 friend class MigrationTest;
88 86
89 // General Directory initialization and load helpers. 87 // General Directory initialization and load helpers.
90 DirOpenResult InitializeTables(); 88 DirOpenResult InitializeTables();
91 // Returns an sqlite return code, usually SQLITE_DONE. 89 // Returns an sqlite return code, usually SQLITE_DONE.
92 int CreateTables(); 90 int CreateTables();
93 91
94 // Create 'share_info' or 'temp_share_info' depending on value of 92 // Create 'share_info' or 'temp_share_info' depending on value of
95 // is_temporary. Returns an sqlite return code, SQLITE_DONE on success. 93 // is_temporary. Returns an sqlite return code, SQLITE_DONE on success.
96 int CreateShareInfoTable(bool is_temporary); 94 int CreateShareInfoTable(bool is_temporary);
97 // Create 'metas' or 'temp_metas' depending on value of is_temporary. 95 // Create 'metas' or 'temp_metas' depending on value of is_temporary.
98 // Returns an sqlite return code, SQLITE_DONE on success. 96 // Returns an sqlite return code, SQLITE_DONE on success.
99 int CreateMetasTable(bool is_temporary); 97 int CreateMetasTable(bool is_temporary);
100 // Returns an sqlite return code, SQLITE_DONE on success. 98 // Returns an sqlite return code, SQLITE_DONE on success.
101 int CreateModelsTable(); 99 int CreateModelsTable();
102 // Returns an sqlite return code, SQLITE_DONE on success.
103 int CreateExtendedAttributeTable();
104 100
105 // We don't need to load any synced and applied deleted entries, we can 101 // We don't need to load any synced and applied deleted entries, we can
106 // in fact just purge them forever on startup. 102 // in fact just purge them forever on startup.
107 bool DropDeletedEntries(); 103 bool DropDeletedEntries();
108 // Drops a table if it exists, harmless if the table did not already exist. 104 // Drops a table if it exists, harmless if the table did not already exist.
109 int SafeDropTable(const char* table_name); 105 int SafeDropTable(const char* table_name);
110 106
111 // Load helpers for entries and attributes. 107 // Load helpers for entries and attributes.
112 bool LoadEntries(MetahandlesIndex* entry_bucket); 108 bool LoadEntries(MetahandlesIndex* entry_bucket);
113 bool LoadExtendedAttributes(ExtendedAttributes* xattrs_bucket);
114 bool LoadInfo(Directory::KernelLoadInfo* info); 109 bool LoadInfo(Directory::KernelLoadInfo* info);
115 110
116 // Save/update helpers for entries. Return false if sqlite commit fails. 111 // Save/update helpers for entries. Return false if sqlite commit fails.
117 bool SaveEntryToDB(const EntryKernel& entry); 112 bool SaveEntryToDB(const EntryKernel& entry);
118 bool SaveNewEntryToDB(const EntryKernel& entry); 113 bool SaveNewEntryToDB(const EntryKernel& entry);
119 bool UpdateEntryToDB(const EntryKernel& entry); 114 bool UpdateEntryToDB(const EntryKernel& entry);
120 115
121 // Save/update helpers for attributes. Return false if sqlite commit fails.
122 bool SaveExtendedAttributeToDB(ExtendedAttributes::const_iterator i);
123 bool DeleteExtendedAttributeFromDB(ExtendedAttributes::const_iterator i);
124
125 // Creates a new sqlite3 handle to the backing database. Sets sqlite operation 116 // Creates a new sqlite3 handle to the backing database. Sets sqlite operation
126 // timeout preferences and registers our overridden sqlite3 operators for 117 // timeout preferences and registers our overridden sqlite3 operators for
127 // said handle. Returns true on success, false if the sqlite open operation 118 // said handle. Returns true on success, false if the sqlite open operation
128 // did not succeed. 119 // did not succeed.
129 bool OpenAndConfigureHandleHelper(sqlite3** handle) const; 120 bool OpenAndConfigureHandleHelper(sqlite3** handle) const;
130 // Initialize and destroy load_dbhandle_. Broken out for testing. 121 // Initialize and destroy load_dbhandle_. Broken out for testing.
131 bool BeginLoad(); 122 bool BeginLoad();
132 void EndLoad(); 123 void EndLoad();
133 124
134 // Lazy creation of save_dbhandle_ for use by SaveChanges code path. 125 // Lazy creation of save_dbhandle_ for use by SaveChanges code path.
(...skipping 19 matching lines...) Expand all
154 void(*handler_function) ( 145 void(*handler_function) (
155 SQLStatement* old_value_query, 146 SQLStatement* old_value_query,
156 int old_value_column, 147 int old_value_column,
157 sync_pb::EntitySpecifics* mutable_new_value)); 148 sync_pb::EntitySpecifics* mutable_new_value));
158 149
159 // Individual version migrations. 150 // Individual version migrations.
160 bool MigrateVersion67To68(); 151 bool MigrateVersion67To68();
161 bool MigrateVersion68To69(); 152 bool MigrateVersion68To69();
162 bool MigrateVersion69To70(); 153 bool MigrateVersion69To70();
163 bool MigrateVersion70To71(); 154 bool MigrateVersion70To71();
155 bool MigrateVersion71To72();
164 156
165 // The handle to our sqlite on-disk store for initialization and loading, and 157 // The handle to our sqlite on-disk store for initialization and loading, and
166 // for saving changes periodically via SaveChanges, respectively. 158 // for saving changes periodically via SaveChanges, respectively.
167 // TODO(timsteele): We should only have one handle here. The reason we need 159 // TODO(timsteele): We should only have one handle here. The reason we need
168 // two at the moment is because the DB can be opened by either the AuthWatcher 160 // two at the moment is because the DB can be opened by either the AuthWatcher
169 // or SyncCore threads, but SaveChanges is always called by the latter. We 161 // or SyncCore threads, but SaveChanges is always called by the latter. We
170 // need to change initialization so the DB is only accessed from one thread. 162 // need to change initialization so the DB is only accessed from one thread.
171 sqlite3* load_dbhandle_; 163 sqlite3* load_dbhandle_;
172 sqlite3* save_dbhandle_; 164 sqlite3* save_dbhandle_;
173 165
174 std::string dir_name_; 166 std::string dir_name_;
175 FilePath backing_filepath_; 167 FilePath backing_filepath_;
176 168
177 // Set to true if migration left some old columns around that need to be 169 // Set to true if migration left some old columns around that need to be
178 // discarded. 170 // discarded.
179 bool needs_column_refresh_; 171 bool needs_column_refresh_;
180 172
181 DISALLOW_COPY_AND_ASSIGN(DirectoryBackingStore); 173 DISALLOW_COPY_AND_ASSIGN(DirectoryBackingStore);
182 }; 174 };
183 175
184 } // namespace syncable 176 } // namespace syncable
185 177
186 #endif // CHROME_BROWSER_SYNC_SYNCABLE_DIRECTORY_BACKING_STORE_H_ 178 #endif // CHROME_BROWSER_SYNC_SYNCABLE_DIRECTORY_BACKING_STORE_H_
OLDNEW
« no previous file with comments | « chrome/browser/sync/protocol/sync.proto ('k') | chrome/browser/sync/syncable/directory_backing_store.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698