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

Side by Side Diff: sync/syncable/mutable_entry.cc

Issue 10989063: Changed DB to store node positions as Ordinals. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fixed memory leak error in unittest Created 8 years, 2 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
« no previous file with comments | « sync/syncable/mutable_entry.h ('k') | sync/syncable/syncable_columns.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 #include "sync/syncable/mutable_entry.h" 5 #include "sync/syncable/mutable_entry.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "sync/internal_api/public/base/node_ordinal.h"
8 #include "sync/syncable/directory.h" 9 #include "sync/syncable/directory.h"
9 #include "sync/syncable/scoped_index_updater.h" 10 #include "sync/syncable/scoped_index_updater.h"
10 #include "sync/syncable/scoped_kernel_lock.h" 11 #include "sync/syncable/scoped_kernel_lock.h"
11 #include "sync/syncable/syncable-inl.h" 12 #include "sync/syncable/syncable-inl.h"
12 #include "sync/syncable/syncable_changes_version.h" 13 #include "sync/syncable/syncable_changes_version.h"
13 #include "sync/syncable/syncable_util.h" 14 #include "sync/syncable/syncable_util.h"
14 #include "sync/syncable/write_transaction.h" 15 #include "sync/syncable/write_transaction.h"
15 16
16 using std::string; 17 using std::string;
17 18
(...skipping 16 matching lines...) Expand all
34 kernel->put(ID, trans->directory_->NextId()); 35 kernel->put(ID, trans->directory_->NextId());
35 kernel->put(META_HANDLE, trans->directory_->NextMetahandle()); 36 kernel->put(META_HANDLE, trans->directory_->NextMetahandle());
36 kernel->mark_dirty(trans->directory_->kernel_->dirty_metahandles); 37 kernel->mark_dirty(trans->directory_->kernel_->dirty_metahandles);
37 kernel->put(PARENT_ID, parent_id); 38 kernel->put(PARENT_ID, parent_id);
38 kernel->put(NON_UNIQUE_NAME, name); 39 kernel->put(NON_UNIQUE_NAME, name);
39 const base::Time& now = base::Time::Now(); 40 const base::Time& now = base::Time::Now();
40 kernel->put(CTIME, now); 41 kernel->put(CTIME, now);
41 kernel->put(MTIME, now); 42 kernel->put(MTIME, now);
42 // We match the database defaults here 43 // We match the database defaults here
43 kernel->put(BASE_VERSION, CHANGES_VERSION); 44 kernel->put(BASE_VERSION, CHANGES_VERSION);
45 kernel->put(SERVER_ORDINAL_IN_PARENT, NodeOrdinal::CreateInitialOrdinal());
44 if (!trans->directory()->InsertEntry(trans, kernel.get())) { 46 if (!trans->directory()->InsertEntry(trans, kernel.get())) {
45 return; // We failed inserting, nothing more to do. 47 return; // We failed inserting, nothing more to do.
46 } 48 }
47 // Because this entry is new, it was originally deleted. 49 // Because this entry is new, it was originally deleted.
48 kernel->put(IS_DEL, true); 50 kernel->put(IS_DEL, true);
49 trans->SaveOriginal(kernel.get()); 51 trans->SaveOriginal(kernel.get());
50 kernel->put(IS_DEL, false); 52 kernel->put(IS_DEL, false);
51 53
52 // Now swap the pointers. 54 // Now swap the pointers.
53 kernel_ = kernel.release(); 55 kernel_ = kernel.release();
54 } 56 }
55 57
56 MutableEntry::MutableEntry(WriteTransaction* trans, CreateNewUpdateItem, 58 MutableEntry::MutableEntry(WriteTransaction* trans, CreateNewUpdateItem,
57 const Id& id) 59 const Id& id)
58 : Entry(trans), write_transaction_(trans) { 60 : Entry(trans), write_transaction_(trans) {
59 Entry same_id(trans, GET_BY_ID, id); 61 Entry same_id(trans, GET_BY_ID, id);
60 kernel_ = NULL; 62 kernel_ = NULL;
61 if (same_id.good()) { 63 if (same_id.good()) {
62 return; // already have an item with this ID. 64 return; // already have an item with this ID.
63 } 65 }
64 scoped_ptr<EntryKernel> kernel(new EntryKernel()); 66 scoped_ptr<EntryKernel> kernel(new EntryKernel());
65 67
66 kernel->put(ID, id); 68 kernel->put(ID, id);
67 kernel->put(META_HANDLE, trans->directory_->NextMetahandle()); 69 kernel->put(META_HANDLE, trans->directory_->NextMetahandle());
68 kernel->mark_dirty(trans->directory_->kernel_->dirty_metahandles); 70 kernel->mark_dirty(trans->directory_->kernel_->dirty_metahandles);
71 kernel->put(SERVER_ORDINAL_IN_PARENT, NodeOrdinal::CreateInitialOrdinal());
69 kernel->put(IS_DEL, true); 72 kernel->put(IS_DEL, true);
70 // We match the database defaults here 73 // We match the database defaults here
71 kernel->put(BASE_VERSION, CHANGES_VERSION); 74 kernel->put(BASE_VERSION, CHANGES_VERSION);
72 if (!trans->directory()->InsertEntry(trans, kernel.get())) { 75 if (!trans->directory()->InsertEntry(trans, kernel.get())) {
73 return; // Failed inserting. 76 return; // Failed inserting.
74 } 77 }
75 trans->SaveOriginal(kernel.get()); 78 trans->SaveOriginal(kernel.get());
76 79
77 kernel_ = kernel.release(); 80 kernel_ = kernel.release();
78 } 81 }
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 } 142 }
140 143
141 return true; 144 return true;
142 } 145 }
143 146
144 bool MutableEntry::Put(Int64Field field, const int64& value) { 147 bool MutableEntry::Put(Int64Field field, const int64& value) {
145 DCHECK(kernel_); 148 DCHECK(kernel_);
146 write_transaction_->SaveOriginal(kernel_); 149 write_transaction_->SaveOriginal(kernel_);
147 if (kernel_->ref(field) != value) { 150 if (kernel_->ref(field) != value) {
148 ScopedKernelLock lock(dir()); 151 ScopedKernelLock lock(dir());
149 if (SERVER_POSITION_IN_PARENT == field) { 152 kernel_->put(field, value);
150 ScopedIndexUpdater<ParentIdAndHandleIndexer> updater(lock, kernel_,
151 dir()->kernel_->parent_id_child_index);
152 kernel_->put(field, value);
153 } else {
154 kernel_->put(field, value);
155 }
156 kernel_->mark_dirty(dir()->kernel_->dirty_metahandles); 153 kernel_->mark_dirty(dir()->kernel_->dirty_metahandles);
157 } 154 }
158 return true; 155 return true;
159 } 156 }
160 157
161 bool MutableEntry::Put(TimeField field, const base::Time& value) { 158 bool MutableEntry::Put(TimeField field, const base::Time& value) {
162 DCHECK(kernel_); 159 DCHECK(kernel_);
163 write_transaction_->SaveOriginal(kernel_); 160 write_transaction_->SaveOriginal(kernel_);
164 if (kernel_->ref(field) != value) { 161 if (kernel_->ref(field) != value) {
165 kernel_->put(field, value); 162 kernel_->put(field, value);
(...skipping 17 matching lines...) Expand all
183 NOTREACHED(); 180 NOTREACHED();
184 } 181 }
185 } else { 182 } else {
186 kernel_->put(field, value); 183 kernel_->put(field, value);
187 } 184 }
188 kernel_->mark_dirty(dir()->kernel_->dirty_metahandles); 185 kernel_->mark_dirty(dir()->kernel_->dirty_metahandles);
189 } 186 }
190 return true; 187 return true;
191 } 188 }
192 189
190 bool MutableEntry::Put(OrdinalField field, const NodeOrdinal& value) {
191 DCHECK(kernel_);
192 DCHECK(value.IsValid());
193 write_transaction_->SaveOriginal(kernel_);
194 if(!kernel_->ref(field).Equals(value)) {
195 ScopedKernelLock lock(dir());
196 if (SERVER_ORDINAL_IN_PARENT == field) {
197 ScopedIndexUpdater<ParentIdAndHandleIndexer> updater(
198 lock, kernel_, dir()->kernel_->parent_id_child_index);
199 kernel_->put(field, value);
200 } else {
201 kernel_->put(field, value);
202 }
203 kernel_->mark_dirty(dir()->kernel_->dirty_metahandles);
204 }
205 return true;
206 }
207
193 void MutableEntry::PutParentIdPropertyOnly(const Id& parent_id) { 208 void MutableEntry::PutParentIdPropertyOnly(const Id& parent_id) {
194 write_transaction_->SaveOriginal(kernel_); 209 write_transaction_->SaveOriginal(kernel_);
195 dir()->ReindexParentId(write_transaction(), kernel_, parent_id); 210 dir()->ReindexParentId(write_transaction(), kernel_, parent_id);
196 kernel_->mark_dirty(dir()->kernel_->dirty_metahandles); 211 kernel_->mark_dirty(dir()->kernel_->dirty_metahandles);
197 } 212 }
198 213
199 bool MutableEntry::Put(BaseVersion field, int64 value) { 214 bool MutableEntry::Put(BaseVersion field, int64 value) {
200 DCHECK(kernel_); 215 DCHECK(kernel_);
201 write_transaction_->SaveOriginal(kernel_); 216 write_transaction_->SaveOriginal(kernel_);
202 if (kernel_->ref(field) != value) { 217 if (kernel_->ref(field) != value) {
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 DCHECK_NE(static_cast<MutableEntry*>(NULL), e); 426 DCHECK_NE(static_cast<MutableEntry*>(NULL), e);
412 DCHECK(!e->IsRoot()) << "We shouldn't mark a permanent object for syncing."; 427 DCHECK(!e->IsRoot()) << "We shouldn't mark a permanent object for syncing.";
413 if (!(e->Put(IS_UNSYNCED, true))) 428 if (!(e->Put(IS_UNSYNCED, true)))
414 return false; 429 return false;
415 e->Put(SYNCING, false); 430 e->Put(SYNCING, false);
416 return true; 431 return true;
417 } 432 }
418 433
419 } // namespace syncable 434 } // namespace syncable
420 } // namespace syncer 435 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/syncable/mutable_entry.h ('k') | sync/syncable/syncable_columns.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698