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

Side by Side Diff: sync/syncable/entry_kernel.h

Issue 1258863007: [Sync] Add more info for invalid position check (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove change from directory since too much test failures Created 5 years, 4 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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 SYNC_SYNCABLE_ENTRY_KERNEL_H_ 5 #ifndef SYNC_SYNCABLE_ENTRY_KERNEL_H_
6 #define SYNC_SYNCABLE_ENTRY_KERNEL_H_ 6 #define SYNC_SYNCABLE_ENTRY_KERNEL_H_
7 7
8 #include <set> 8 #include <set>
9 9
10 #include "base/time/time.h" 10 #include "base/time/time.h"
11 #include "base/values.h" 11 #include "base/values.h"
12 #include "sync/base/sync_export.h" 12 #include "sync/base/sync_export.h"
13 #include "sync/internal_api/public/base/model_type.h" 13 #include "sync/internal_api/public/base/model_type.h"
14 #include "sync/internal_api/public/base/unique_position.h" 14 #include "sync/internal_api/public/base/unique_position.h"
15 #include "sync/internal_api/public/util/immutable.h" 15 #include "sync/internal_api/public/util/immutable.h"
16 #include "sync/syncable/metahandle_set.h" 16 #include "sync/syncable/metahandle_set.h"
17 #include "sync/syncable/proto_value_ptr.h" 17 #include "sync/syncable/proto_value_ptr.h"
18 #include "sync/syncable/syncable_columns.h"
stanisc 2015/08/07 18:24:04 Instead of including syncable_columns.h in entry_k
Gang Wu 2015/08/07 20:50:57 Done.
18 #include "sync/syncable/syncable_id.h" 19 #include "sync/syncable/syncable_id.h"
19 #include "sync/util/time.h" 20 #include "sync/util/time.h"
20 21
21 namespace syncer { 22 namespace syncer {
22 23
23 class Cryptographer; 24 class Cryptographer;
24 25
25 namespace syncable { 26 namespace syncable {
26 27
27 // Things you need to update if you change any of the fields below: 28 // Things you need to update if you change any of the fields below:
28 // - EntryKernel struct in this file 29 // - EntryKernel struct in this file
29 // - syncable_columns.h 30 // - syncable_columns.h
30 // - syncable_enum_conversions{.h,.cc,_unittest.cc} 31 // - syncable_enum_conversions{.h,.cc,_unittest.cc}
31 // - EntryKernel::EntryKernel(), EntryKernel::ToValue() in entry_kernel.cc 32 // - EntryKernel::EntryKernel(), EntryKernel::ToValue() in entry_kernel.cc
32 // - operator<< in Entry.cc 33 // - operator<< in Entry.cc
33 // - BindFields() and UnpackEntry() in directory_backing_store.cc 34 // - BindFields() and UnpackEntry() in directory_backing_store.cc
34 // - kCurrentDBVersion, DirectoryBackingStore::InitializeTables in 35 // - kCurrentDBVersion, DirectoryBackingStore::InitializeTables in
35 // directory_backing_store.cc 36 // directory_backing_store.cc
36 // - TestSimpleFieldsPreservedDuringSaveChanges in syncable_unittest.cc 37 // - TestSimpleFieldsPreservedDuringSaveChanges in syncable_unittest.cc
37 38
38 static const int64 kInvalidMetaHandle = 0; 39 static const int64 kInvalidMetaHandle = 0;
39 40
40 enum {
41 BEGIN_FIELDS = 0,
42 INT64_FIELDS_BEGIN = BEGIN_FIELDS
43 };
44
45 enum MetahandleField {
46 // Primary key into the table. Keep this as a handle to the meta entry
47 // across transactions.
48 META_HANDLE = INT64_FIELDS_BEGIN
49 };
50
51 enum BaseVersion {
52 // After initial upload, the version is controlled by the server, and is
53 // increased whenever the data or metadata changes on the server.
54 BASE_VERSION = META_HANDLE + 1,
55 };
56
57 enum Int64Field {
58 SERVER_VERSION = BASE_VERSION + 1,
59 LOCAL_EXTERNAL_ID, // ID of an item in the external local storage that this
60 // entry is associated with. (such as bookmarks.js)
61 TRANSACTION_VERSION,
62 INT64_FIELDS_END
63 };
64
65 enum {
66 INT64_FIELDS_COUNT = INT64_FIELDS_END - INT64_FIELDS_BEGIN,
67 TIME_FIELDS_BEGIN = INT64_FIELDS_END,
68 };
69
70 enum TimeField {
71 MTIME = TIME_FIELDS_BEGIN,
72 SERVER_MTIME,
73 CTIME,
74 SERVER_CTIME,
75 TIME_FIELDS_END,
76 };
77
78 enum {
79 TIME_FIELDS_COUNT = TIME_FIELDS_END - TIME_FIELDS_BEGIN,
80 ID_FIELDS_BEGIN = TIME_FIELDS_END,
81 };
82
83 enum IdField {
84 // Code in InitializeTables relies on ID being the first IdField value.
85 ID = ID_FIELDS_BEGIN,
86 PARENT_ID,
87 SERVER_PARENT_ID,
88 ID_FIELDS_END
89 };
90
91 enum {
92 ID_FIELDS_COUNT = ID_FIELDS_END - ID_FIELDS_BEGIN,
93 BIT_FIELDS_BEGIN = ID_FIELDS_END
94 };
95
96 enum IndexedBitField {
97 IS_UNSYNCED = BIT_FIELDS_BEGIN,
98 IS_UNAPPLIED_UPDATE,
99 INDEXED_BIT_FIELDS_END,
100 };
101
102 enum IsDelField {
103 IS_DEL = INDEXED_BIT_FIELDS_END,
104 };
105
106 enum BitField {
107 IS_DIR = IS_DEL + 1,
108 SERVER_IS_DIR,
109 SERVER_IS_DEL,
110 BIT_FIELDS_END
111 };
112
113 enum {
114 BIT_FIELDS_COUNT = BIT_FIELDS_END - BIT_FIELDS_BEGIN,
115 STRING_FIELDS_BEGIN = BIT_FIELDS_END
116 };
117
118 enum StringField {
119 // Name, will be truncated by server. Can be duplicated in a folder.
120 NON_UNIQUE_NAME = STRING_FIELDS_BEGIN,
121 // The server version of |NON_UNIQUE_NAME|.
122 SERVER_NON_UNIQUE_NAME,
123
124 // A tag string which identifies this node as a particular top-level
125 // permanent object. The tag can be thought of as a unique key that
126 // identifies a singleton instance.
127 UNIQUE_SERVER_TAG, // Tagged by the server
128 UNIQUE_CLIENT_TAG, // Tagged by the client
129 UNIQUE_BOOKMARK_TAG, // Client tags for bookmark items
130 STRING_FIELDS_END,
131 };
132
133 enum {
134 STRING_FIELDS_COUNT = STRING_FIELDS_END - STRING_FIELDS_BEGIN,
135 PROTO_FIELDS_BEGIN = STRING_FIELDS_END
136 };
137
138 // From looking at the sqlite3 docs, it's not directly stated, but it
139 // seems the overhead for storing a NULL blob is very small.
140 enum ProtoField {
141 SPECIFICS = PROTO_FIELDS_BEGIN,
142 SERVER_SPECIFICS,
143 BASE_SERVER_SPECIFICS,
144 PROTO_FIELDS_END,
145 };
146
147 enum {
148 PROTO_FIELDS_COUNT = PROTO_FIELDS_END - PROTO_FIELDS_BEGIN,
149 UNIQUE_POSITION_FIELDS_BEGIN = PROTO_FIELDS_END
150 };
151
152 enum UniquePositionField {
153 SERVER_UNIQUE_POSITION = UNIQUE_POSITION_FIELDS_BEGIN,
154 UNIQUE_POSITION,
155 UNIQUE_POSITION_FIELDS_END
156 };
157
158 enum {
159 UNIQUE_POSITION_FIELDS_COUNT =
160 UNIQUE_POSITION_FIELDS_END - UNIQUE_POSITION_FIELDS_BEGIN,
161 ATTACHMENT_METADATA_FIELDS_BEGIN = UNIQUE_POSITION_FIELDS_END
162 };
163
164 enum AttachmentMetadataField {
165 ATTACHMENT_METADATA = ATTACHMENT_METADATA_FIELDS_BEGIN,
166 SERVER_ATTACHMENT_METADATA,
167 ATTACHMENT_METADATA_FIELDS_END
168 };
169
170 enum {
171 ATTACHMENT_METADATA_FIELDS_COUNT =
172 ATTACHMENT_METADATA_FIELDS_END - ATTACHMENT_METADATA_FIELDS_BEGIN,
173 FIELD_COUNT = ATTACHMENT_METADATA_FIELDS_END - BEGIN_FIELDS,
174 // Past this point we have temporaries, stored in memory only.
175 BEGIN_TEMPS = ATTACHMENT_METADATA_FIELDS_END,
176 BIT_TEMPS_BEGIN = BEGIN_TEMPS,
177 };
178
179 enum BitTemp {
180 // Whether a server commit operation was started and has not yet completed
181 // for this entity.
182 SYNCING = BIT_TEMPS_BEGIN,
183 // Whether a local change was made to an entity that had SYNCING set to true,
184 // and was therefore in the middle of a commit operation.
185 // Note: must only be set if SYNCING is true.
186 DIRTY_SYNC,
187 BIT_TEMPS_END,
188 };
189
190 enum {
191 BIT_TEMPS_COUNT = BIT_TEMPS_END - BIT_TEMPS_BEGIN
192 };
193
194
195
196 struct SYNC_EXPORT_PRIVATE EntryKernel { 41 struct SYNC_EXPORT_PRIVATE EntryKernel {
197 private: 42 private:
198 std::string string_fields[STRING_FIELDS_COUNT]; 43 std::string string_fields[STRING_FIELDS_COUNT];
199 EntitySpecificsPtr specifics_fields[PROTO_FIELDS_COUNT]; 44 EntitySpecificsPtr specifics_fields[PROTO_FIELDS_COUNT];
200 int64 int64_fields[INT64_FIELDS_COUNT]; 45 int64 int64_fields[INT64_FIELDS_COUNT];
201 base::Time time_fields[TIME_FIELDS_COUNT]; 46 base::Time time_fields[TIME_FIELDS_COUNT];
202 Id id_fields[ID_FIELDS_COUNT]; 47 Id id_fields[ID_FIELDS_COUNT];
203 UniquePosition unique_position_fields[UNIQUE_POSITION_FIELDS_COUNT]; 48 UniquePosition unique_position_fields[UNIQUE_POSITION_FIELDS_COUNT];
204 AttachmentMetadataPtr 49 AttachmentMetadataPtr
205 attachment_metadata_fields[ATTACHMENT_METADATA_FIELDS_COUNT]; 50 attachment_metadata_fields[ATTACHMENT_METADATA_FIELDS_COUNT];
206 std::bitset<BIT_FIELDS_COUNT> bit_fields; 51 std::bitset<BIT_FIELDS_COUNT> bit_fields;
207 std::bitset<BIT_TEMPS_COUNT> bit_temps; 52 std::bitset<BIT_TEMPS_COUNT> bit_temps;
208 53
54 friend std::ostream& operator<<(std::ostream& s, const EntryKernel& e);
55
209 public: 56 public:
210 EntryKernel(); 57 EntryKernel();
211 ~EntryKernel(); 58 ~EntryKernel();
212 59
213 // Set the dirty bit, and optionally add this entry's metahandle to 60 // Set the dirty bit, and optionally add this entry's metahandle to
214 // a provided index on dirty bits in |dirty_index|. Parameter may be null, 61 // a provided index on dirty bits in |dirty_index|. Parameter may be null,
215 // and will result only in setting the dirty bit of this entry. 62 // and will result only in setting the dirty bit of this entry.
216 inline void mark_dirty(syncable::MetahandleSet* dirty_index) { 63 inline void mark_dirty(syncable::MetahandleSet* dirty_index) {
217 if (!dirty_ && dirty_index) { 64 if (!dirty_ && dirty_index) {
218 DCHECK_NE(0, ref(META_HANDLE)); 65 DCHECK_NE(0, ref(META_HANDLE));
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 typedef Immutable<EntryKernelMutationMap> ImmutableEntryKernelMutationMap; 233 typedef Immutable<EntryKernelMutationMap> ImmutableEntryKernelMutationMap;
387 234
388 // Caller owns the return value. 235 // Caller owns the return value.
389 base::DictionaryValue* EntryKernelMutationToValue( 236 base::DictionaryValue* EntryKernelMutationToValue(
390 const EntryKernelMutation& mutation); 237 const EntryKernelMutation& mutation);
391 238
392 // Caller owns the return value. 239 // Caller owns the return value.
393 base::ListValue* EntryKernelMutationMapToValue( 240 base::ListValue* EntryKernelMutationMapToValue(
394 const EntryKernelMutationMap& mutations); 241 const EntryKernelMutationMap& mutations);
395 242
243 std::ostream& operator<<(std::ostream& os, const EntryKernel& entry_kernel);
244
396 } // namespace syncable 245 } // namespace syncable
397 } // namespace syncer 246 } // namespace syncer
398 247
399 #endif // SYNC_SYNCABLE_ENTRY_KERNEL_H_ 248 #endif // SYNC_SYNCABLE_ENTRY_KERNEL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698