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

Side by Side Diff: components/sync/syncable/syncable_write_transaction.cc

Issue 2130453004: [Sync] Move //sync to //components/sync. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 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 #include "sync/syncable/syncable_write_transaction.h" 5 #include "components/sync/syncable/syncable_write_transaction.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <string> 9 #include <string>
10 10
11 #include "sync/syncable/directory.h" 11 #include "components/sync/syncable/directory.h"
12 #include "sync/syncable/directory_change_delegate.h" 12 #include "components/sync/syncable/directory_change_delegate.h"
13 #include "sync/syncable/mutable_entry.h" 13 #include "components/sync/syncable/mutable_entry.h"
14 #include "sync/syncable/transaction_observer.h" 14 #include "components/sync/syncable/transaction_observer.h"
15 #include "sync/syncable/write_transaction_info.h" 15 #include "components/sync/syncable/write_transaction_info.h"
16 16
17 namespace syncer { 17 namespace syncer {
18 namespace syncable { 18 namespace syncable {
19 19
20 const int64_t kInvalidTransactionVersion = -1; 20 const int64_t kInvalidTransactionVersion = -1;
21 21
22 WriteTransaction::WriteTransaction(const tracked_objects::Location& location, 22 WriteTransaction::WriteTransaction(const tracked_objects::Location& location,
23 WriterTag writer, Directory* directory) 23 WriterTag writer,
24 Directory* directory)
24 : BaseWriteTransaction(location, "WriteTransaction", writer, directory), 25 : BaseWriteTransaction(location, "WriteTransaction", writer, directory),
25 transaction_version_(NULL) { 26 transaction_version_(NULL) {
26 Lock(); 27 Lock();
27 } 28 }
28 29
29 WriteTransaction::WriteTransaction(const tracked_objects::Location& location, 30 WriteTransaction::WriteTransaction(const tracked_objects::Location& location,
30 Directory* directory, 31 Directory* directory,
31 int64_t* transaction_version) 32 int64_t* transaction_version)
32 : BaseWriteTransaction(location, "WriteTransaction", SYNCAPI, directory), 33 : BaseWriteTransaction(location, "WriteTransaction", SYNCAPI, directory),
33 transaction_version_(transaction_version) { 34 transaction_version_(transaction_version) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 NotifyTransactionComplete(models_with_changes); 85 NotifyTransactionComplete(models_with_changes);
85 } 86 }
86 } 87 }
87 88
88 ModelTypeSet WriteTransaction::NotifyTransactionChangingAndEnding( 89 ModelTypeSet WriteTransaction::NotifyTransactionChangingAndEnding(
89 const ImmutableEntryKernelMutationMap& mutations) { 90 const ImmutableEntryKernelMutationMap& mutations) {
90 directory_->kernel()->transaction_mutex.AssertAcquired(); 91 directory_->kernel()->transaction_mutex.AssertAcquired();
91 DCHECK(!mutations.Get().empty()); 92 DCHECK(!mutations.Get().empty());
92 93
93 WriteTransactionInfo write_transaction_info( 94 WriteTransactionInfo write_transaction_info(
94 directory_->kernel()->next_write_transaction_id, 95 directory_->kernel()->next_write_transaction_id, from_here_, writer_,
95 from_here_, writer_, mutations); 96 mutations);
96 ++directory_->kernel()->next_write_transaction_id; 97 ++directory_->kernel()->next_write_transaction_id;
97 98
98 ImmutableWriteTransactionInfo immutable_write_transaction_info( 99 ImmutableWriteTransactionInfo immutable_write_transaction_info(
99 &write_transaction_info); 100 &write_transaction_info);
100 DirectoryChangeDelegate* const delegate = directory_->kernel()->delegate; 101 DirectoryChangeDelegate* const delegate = directory_->kernel()->delegate;
101 std::vector<int64_t> entry_changed; 102 std::vector<int64_t> entry_changed;
102 if (writer_ == syncable::SYNCAPI) { 103 if (writer_ == syncable::SYNCAPI) {
103 delegate->HandleCalculateChangesChangeEventFromSyncApi( 104 delegate->HandleCalculateChangesChangeEventFromSyncApi(
104 immutable_write_transaction_info, this, &entry_changed); 105 immutable_write_transaction_info, this, &entry_changed);
105 } else { 106 } else {
106 delegate->HandleCalculateChangesChangeEventFromSyncer( 107 delegate->HandleCalculateChangesChangeEventFromSyncer(
107 immutable_write_transaction_info, this, &entry_changed); 108 immutable_write_transaction_info, this, &entry_changed);
108 } 109 }
109 UpdateTransactionVersion(entry_changed); 110 UpdateTransactionVersion(entry_changed);
110 111
111 ModelTypeSet models_with_changes = 112 ModelTypeSet models_with_changes =
112 delegate->HandleTransactionEndingChangeEvent( 113 delegate->HandleTransactionEndingChangeEvent(
113 immutable_write_transaction_info, this); 114 immutable_write_transaction_info, this);
114 115
115 directory_->kernel()->transaction_observer.Call(FROM_HERE, 116 directory_->kernel()->transaction_observer.Call(
116 &TransactionObserver::OnTransactionWrite, 117 FROM_HERE, &TransactionObserver::OnTransactionWrite,
117 immutable_write_transaction_info, models_with_changes); 118 immutable_write_transaction_info, models_with_changes);
118 119
119 return models_with_changes; 120 return models_with_changes;
120 } 121 }
121 122
122 void WriteTransaction::NotifyTransactionComplete( 123 void WriteTransaction::NotifyTransactionComplete(
123 ModelTypeSet models_with_changes) { 124 ModelTypeSet models_with_changes) {
124 directory_->kernel()->delegate->HandleTransactionCompleteChangeEvent( 125 directory_->kernel()->delegate->HandleTransactionCompleteChangeEvent(
125 models_with_changes); 126 models_with_changes);
126 } 127 }
(...skipping 10 matching lines...) Expand all
137 if (!type_seen.Has(type)) { 138 if (!type_seen.Has(type)) {
138 directory_->IncrementTransactionVersion(type); 139 directory_->IncrementTransactionVersion(type);
139 type_seen.Put(type); 140 type_seen.Put(type);
140 } 141 }
141 entry.UpdateTransactionVersion(directory_->GetTransactionVersion(type)); 142 entry.UpdateTransactionVersion(directory_->GetTransactionVersion(type));
142 } 143 }
143 } 144 }
144 145
145 if (!type_seen.Empty() && transaction_version_) { 146 if (!type_seen.Empty() && transaction_version_) {
146 DCHECK_EQ(1u, type_seen.Size()); 147 DCHECK_EQ(1u, type_seen.Size());
147 *transaction_version_ = directory_->GetTransactionVersion( 148 *transaction_version_ =
148 type_seen.First().Get()); 149 directory_->GetTransactionVersion(type_seen.First().Get());
149 } 150 }
150 } 151 }
151 152
152 WriteTransaction::~WriteTransaction() { 153 WriteTransaction::~WriteTransaction() {
153 const ImmutableEntryKernelMutationMap& mutations = RecordMutations(); 154 const ImmutableEntryKernelMutationMap& mutations = RecordMutations();
154 155
155 MetahandleSet modified_handles; 156 MetahandleSet modified_handles;
156 for (EntryKernelMutationMap::const_iterator i = mutations.Get().begin(); 157 for (EntryKernelMutationMap::const_iterator i = mutations.Get().begin();
157 i != mutations.Get().end(); ++i) { 158 i != mutations.Get().end(); ++i) {
158 modified_handles.insert(i->first); 159 modified_handles.insert(i->first);
159 } 160 }
160 directory()->CheckInvariantsOnTransactionClose(this, modified_handles); 161 directory()->CheckInvariantsOnTransactionClose(this, modified_handles);
161 162
162 // |CheckTreeInvariants| could have thrown an unrecoverable error. 163 // |CheckTreeInvariants| could have thrown an unrecoverable error.
163 if (unrecoverable_error_set_) { 164 if (unrecoverable_error_set_) {
164 HandleUnrecoverableErrorIfSet(); 165 HandleUnrecoverableErrorIfSet();
165 Unlock(); 166 Unlock();
166 return; 167 return;
167 } 168 }
168 169
169 UnlockAndNotify(mutations); 170 UnlockAndNotify(mutations);
170 } 171 }
171 172
172 #define ENUM_CASE(x) case x: return #x; break 173 #define ENUM_CASE(x) \
174 case x: \
175 return #x; \
176 break
173 177
174 std::string WriterTagToString(WriterTag writer_tag) { 178 std::string WriterTagToString(WriterTag writer_tag) {
175 switch (writer_tag) { 179 switch (writer_tag) {
176 ENUM_CASE(INVALID); 180 ENUM_CASE(INVALID);
177 ENUM_CASE(SYNCER); 181 ENUM_CASE(SYNCER);
178 ENUM_CASE(AUTHWATCHER); 182 ENUM_CASE(AUTHWATCHER);
179 ENUM_CASE(UNITTEST); 183 ENUM_CASE(UNITTEST);
180 ENUM_CASE(VACUUM_AFTER_SAVE); 184 ENUM_CASE(VACUUM_AFTER_SAVE);
181 ENUM_CASE(HANDLE_SAVE_FAILURE); 185 ENUM_CASE(HANDLE_SAVE_FAILURE);
182 ENUM_CASE(PURGE_ENTRIES); 186 ENUM_CASE(PURGE_ENTRIES);
183 ENUM_CASE(SYNCAPI); 187 ENUM_CASE(SYNCAPI);
184 } 188 }
185 NOTREACHED(); 189 NOTREACHED();
186 return std::string(); 190 return std::string();
187 } 191 }
188 192
189 #undef ENUM_CASE 193 #undef ENUM_CASE
190 194
191 } // namespace syncable 195 } // namespace syncable
192 } // namespace syncer 196 } // namespace syncer
OLDNEW
« no previous file with comments | « components/sync/syncable/syncable_write_transaction.h ('k') | components/sync/syncable/transaction_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698