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

Side by Side Diff: sync/engine/get_commit_ids_command.cc

Issue 15764010: Experimental functionize patch (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sync: Expose sync functionality as functions Created 7 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « sync/engine/get_commit_ids_command.h ('k') | sync/engine/sync_scheduler_impl.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 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/engine/get_commit_ids_command.h" 5 #include "sync/engine/get_commit_ids_command.h"
6 6
7 #include <set> 7 #include <set>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 10 matching lines...) Expand all
21 using std::vector; 21 using std::vector;
22 22
23 namespace syncer { 23 namespace syncer {
24 24
25 using sessions::OrderedCommitSet; 25 using sessions::OrderedCommitSet;
26 using sessions::SyncSession; 26 using sessions::SyncSession;
27 using sessions::StatusController; 27 using sessions::StatusController;
28 28
29 GetCommitIdsCommand::GetCommitIdsCommand( 29 GetCommitIdsCommand::GetCommitIdsCommand(
30 syncable::BaseTransaction* trans, 30 syncable::BaseTransaction* trans,
31 ModelTypeSet requested_types,
31 const size_t commit_batch_size, 32 const size_t commit_batch_size,
32 sessions::OrderedCommitSet* commit_set) 33 sessions::OrderedCommitSet* commit_set)
33 : trans_(trans), 34 : trans_(trans),
35 requested_types_(requested_types),
34 requested_commit_batch_size_(commit_batch_size), 36 requested_commit_batch_size_(commit_batch_size),
35 commit_set_(commit_set) { 37 commit_set_(commit_set) {
36 } 38 }
37 39
38 GetCommitIdsCommand::~GetCommitIdsCommand() {} 40 GetCommitIdsCommand::~GetCommitIdsCommand() {}
39 41
40 SyncerError GetCommitIdsCommand::ExecuteImpl(SyncSession* session) { 42 SyncerError GetCommitIdsCommand::ExecuteImpl(SyncSession* session) {
41 // Gather the full set of unsynced items and store it in the session. They 43 // Gather the full set of unsynced items and store it in the session. They
42 // are not in the correct order for commit. 44 // are not in the correct order for commit.
43 std::set<int64> ready_unsynced_set; 45 std::set<int64> ready_unsynced_set;
44 syncable::Directory::Metahandles all_unsynced_handles; 46 syncable::Directory::Metahandles all_unsynced_handles;
45 GetUnsyncedEntries(trans_, 47 GetUnsyncedEntries(trans_,
46 &all_unsynced_handles); 48 &all_unsynced_handles);
47 49
48 ModelTypeSet encrypted_types; 50 ModelTypeSet encrypted_types;
49 bool passphrase_missing = false; 51 bool passphrase_missing = false;
50 Cryptographer* cryptographer = 52 Cryptographer* cryptographer =
51 session->context()-> 53 session->context()->
52 directory()->GetCryptographer(trans_); 54 directory()->GetCryptographer(trans_);
53 if (cryptographer) { 55 if (cryptographer) {
54 encrypted_types = session->context()->directory()->GetNigoriHandler()-> 56 encrypted_types = session->context()->directory()->GetNigoriHandler()->
55 GetEncryptedTypes(trans_); 57 GetEncryptedTypes(trans_);
56 passphrase_missing = cryptographer->has_pending_keys(); 58 passphrase_missing = cryptographer->has_pending_keys();
57 }; 59 };
58 60
59 // If we're comitting, then we must be performing a nudge job and must have a
60 // session with a nudge tracker.
61 DCHECK(session->nudge_tracker());
62
63 // We filter out all unready entries from the set of unsynced handles. This 61 // We filter out all unready entries from the set of unsynced handles. This
64 // new set of ready and unsynced items (which excludes throttled items as 62 // new set of ready and unsynced items is then what we use to determine what
65 // well) is then what we use to determine what is a candidate for commit. 63 // is a candidate for commit. The caller of this SyncerCommand is responsible
64 // for ensuring that no throttled types are included among the
65 // requested_types.
66 FilterUnreadyEntries(trans_, 66 FilterUnreadyEntries(trans_,
67 session->nudge_tracker()->GetThrottledTypes(), 67 requested_types_,
68 encrypted_types, 68 encrypted_types,
69 passphrase_missing, 69 passphrase_missing,
70 all_unsynced_handles, 70 all_unsynced_handles,
71 &ready_unsynced_set); 71 &ready_unsynced_set);
72 72
73 BuildCommitIds(trans_, 73 BuildCommitIds(trans_,
74 session->context()->routing_info(), 74 session->context()->routing_info(),
75 ready_unsynced_set); 75 ready_unsynced_set);
76 76
77 const vector<syncable::Id>& verified_commit_ids = 77 const vector<syncable::Id>& verified_commit_ids =
(...skipping 22 matching lines...) Expand all
100 return false; 100 return false;
101 } 101 }
102 102
103 // An entry is not considered ready for commit if any are true: 103 // An entry is not considered ready for commit if any are true:
104 // 1. It's in conflict. 104 // 1. It's in conflict.
105 // 2. It requires encryption (either the type is encrypted but a passphrase 105 // 2. It requires encryption (either the type is encrypted but a passphrase
106 // is missing from the cryptographer, or the entry itself wasn't properly 106 // is missing from the cryptographer, or the entry itself wasn't properly
107 // encrypted). 107 // encrypted).
108 // 3. It's type is currently throttled. 108 // 3. It's type is currently throttled.
109 // 4. It's a delete but has not been committed. 109 // 4. It's a delete but has not been committed.
110 bool IsEntryReadyForCommit(ModelTypeSet throttled_types, 110 bool IsEntryReadyForCommit(ModelTypeSet requested_types,
111 ModelTypeSet encrypted_types, 111 ModelTypeSet encrypted_types,
112 bool passphrase_missing, 112 bool passphrase_missing,
113 const syncable::Entry& entry) { 113 const syncable::Entry& entry) {
114 DCHECK(entry.Get(syncable::IS_UNSYNCED)); 114 DCHECK(entry.Get(syncable::IS_UNSYNCED));
115 if (IsEntryInConflict(entry)) 115 if (IsEntryInConflict(entry))
116 return false; 116 return false;
117 117
118 const ModelType type = entry.GetModelType(); 118 const ModelType type = entry.GetModelType();
119 // We special case the nigori node because even though it is considered an 119 // We special case the nigori node because even though it is considered an
120 // "encrypted type", not all nigori node changes require valid encryption 120 // "encrypted type", not all nigori node changes require valid encryption
121 // (ex: sync_tabs). 121 // (ex: sync_tabs).
122 if ((type != NIGORI) && encrypted_types.Has(type) && 122 if ((type != NIGORI) && encrypted_types.Has(type) &&
123 (passphrase_missing || 123 (passphrase_missing ||
124 syncable::EntryNeedsEncryption(encrypted_types, entry))) { 124 syncable::EntryNeedsEncryption(encrypted_types, entry))) {
125 // This entry requires encryption but is not properly encrypted (possibly 125 // This entry requires encryption but is not properly encrypted (possibly
126 // due to the cryptographer not being initialized or the user hasn't 126 // due to the cryptographer not being initialized or the user hasn't
127 // provided the most recent passphrase). 127 // provided the most recent passphrase).
128 DVLOG(1) << "Excluding entry from commit due to lack of encryption " 128 DVLOG(1) << "Excluding entry from commit due to lack of encryption "
129 << entry; 129 << entry;
130 return false; 130 return false;
131 } 131 }
132 132
133 // Look at the throttled types. 133 // Ignore it if it's not in our set of requested types.
134 if (throttled_types.Has(type)) 134 if (!requested_types.Has(type))
135 return false; 135 return false;
136 136
137 if (entry.Get(syncable::IS_DEL) && !entry.Get(syncable::ID).ServerKnows()) { 137 if (entry.Get(syncable::IS_DEL) && !entry.Get(syncable::ID).ServerKnows()) {
138 // New clients (following the resolution of crbug.com/125381) should not 138 // New clients (following the resolution of crbug.com/125381) should not
139 // create such items. Old clients may have left some in the database 139 // create such items. Old clients may have left some in the database
140 // (crbug.com/132905), but we should now be cleaning them on startup. 140 // (crbug.com/132905), but we should now be cleaning them on startup.
141 NOTREACHED() << "Found deleted and unsynced local item: " << entry; 141 NOTREACHED() << "Found deleted and unsynced local item: " << entry;
142 return false; 142 return false;
143 } 143 }
144 144
(...skipping 12 matching lines...) Expand all
157 } 157 }
158 158
159 DVLOG(2) << "Entry is ready for commit: " << entry; 159 DVLOG(2) << "Entry is ready for commit: " << entry;
160 return true; 160 return true;
161 } 161 }
162 162
163 } // namespace 163 } // namespace
164 164
165 void GetCommitIdsCommand::FilterUnreadyEntries( 165 void GetCommitIdsCommand::FilterUnreadyEntries(
166 syncable::BaseTransaction* trans, 166 syncable::BaseTransaction* trans,
167 ModelTypeSet throttled_types, 167 ModelTypeSet requested_types,
168 ModelTypeSet encrypted_types, 168 ModelTypeSet encrypted_types,
169 bool passphrase_missing, 169 bool passphrase_missing,
170 const syncable::Directory::Metahandles& unsynced_handles, 170 const syncable::Directory::Metahandles& unsynced_handles,
171 std::set<int64>* ready_unsynced_set) { 171 std::set<int64>* ready_unsynced_set) {
172 for (syncable::Directory::Metahandles::const_iterator iter = 172 for (syncable::Directory::Metahandles::const_iterator iter =
173 unsynced_handles.begin(); iter != unsynced_handles.end(); ++iter) { 173 unsynced_handles.begin(); iter != unsynced_handles.end(); ++iter) {
174 syncable::Entry entry(trans, syncable::GET_BY_HANDLE, *iter); 174 syncable::Entry entry(trans, syncable::GET_BY_HANDLE, *iter);
175 if (IsEntryReadyForCommit(throttled_types, 175 if (IsEntryReadyForCommit(requested_types,
176 encrypted_types, 176 encrypted_types,
177 passphrase_missing, 177 passphrase_missing,
178 entry)) { 178 entry)) {
179 ready_unsynced_set->insert(*iter); 179 ready_unsynced_set->insert(*iter);
180 } 180 }
181 } 181 }
182 } 182 }
183 183
184 bool GetCommitIdsCommand::AddUncommittedParentsAndTheirPredecessors( 184 bool GetCommitIdsCommand::AddUncommittedParentsAndTheirPredecessors(
185 syncable::BaseTransaction* trans, 185 syncable::BaseTransaction* trans,
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 // delete trees. 425 // delete trees.
426 426
427 // Add moves and creates, and prepend their uncommitted parents. 427 // Add moves and creates, and prepend their uncommitted parents.
428 AddCreatesAndMoves(trans, routes, ready_unsynced_set); 428 AddCreatesAndMoves(trans, routes, ready_unsynced_set);
429 429
430 // Add all deletes. 430 // Add all deletes.
431 AddDeletes(trans, ready_unsynced_set); 431 AddDeletes(trans, ready_unsynced_set);
432 } 432 }
433 433
434 } // namespace syncer 434 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/engine/get_commit_ids_command.h ('k') | sync/engine/sync_scheduler_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698