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

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

Issue 10698014: [Sync] Rename csync namespace to syncer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 8 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 | Annotate | Revision Log
« no previous file with comments | « sync/engine/syncer_proto_util.h ('k') | sync/engine/syncer_proto_util_unittest.cc » ('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/engine/syncer_proto_util.h" 5 #include "sync/engine/syncer_proto_util.h"
6 6
7 #include "base/format_macros.h" 7 #include "base/format_macros.h"
8 #include "base/stringprintf.h" 8 #include "base/stringprintf.h"
9 #include "sync/engine/net/server_connection_manager.h" 9 #include "sync/engine/net/server_connection_manager.h"
10 #include "sync/engine/syncer.h" 10 #include "sync/engine/syncer.h"
11 #include "sync/engine/syncer_types.h" 11 #include "sync/engine/syncer_types.h"
12 #include "sync/engine/throttled_data_type_tracker.h" 12 #include "sync/engine/throttled_data_type_tracker.h"
13 #include "sync/engine/traffic_logger.h" 13 #include "sync/engine/traffic_logger.h"
14 #include "sync/internal_api/public/syncable/model_type.h" 14 #include "sync/internal_api/public/syncable/model_type.h"
15 #include "sync/protocol/sync.pb.h" 15 #include "sync/protocol/sync.pb.h"
16 #include "sync/protocol/sync_enums.pb.h" 16 #include "sync/protocol/sync_enums.pb.h"
17 #include "sync/protocol/sync_protocol_error.h" 17 #include "sync/protocol/sync_protocol_error.h"
18 #include "sync/sessions/sync_session.h" 18 #include "sync/sessions/sync_session.h"
19 #include "sync/syncable/directory.h" 19 #include "sync/syncable/directory.h"
20 #include "sync/syncable/entry.h" 20 #include "sync/syncable/entry.h"
21 #include "sync/syncable/syncable-inl.h" 21 #include "sync/syncable/syncable-inl.h"
22 #include "sync/util/time.h" 22 #include "sync/util/time.h"
23 23
24 using csync::SyncProtocolErrorType; 24 using syncer::SyncProtocolErrorType;
25 using std::string; 25 using std::string;
26 using std::stringstream; 26 using std::stringstream;
27 using syncable::BASE_VERSION; 27 using syncable::BASE_VERSION;
28 using syncable::CTIME; 28 using syncable::CTIME;
29 using syncable::ID; 29 using syncable::ID;
30 using syncable::IS_DEL; 30 using syncable::IS_DEL;
31 using syncable::IS_DIR; 31 using syncable::IS_DIR;
32 using syncable::IS_UNSYNCED; 32 using syncable::IS_UNSYNCED;
33 using syncable::MTIME; 33 using syncable::MTIME;
34 using syncable::PARENT_ID; 34 using syncable::PARENT_ID;
35 35
36 namespace csync { 36 namespace syncer {
37 using sessions::SyncSession; 37 using sessions::SyncSession;
38 38
39 namespace { 39 namespace {
40 40
41 // Time to backoff syncing after receiving a throttled response. 41 // Time to backoff syncing after receiving a throttled response.
42 const int kSyncDelayAfterThrottled = 2 * 60 * 60; // 2 hours 42 const int kSyncDelayAfterThrottled = 2 * 60 * 60; // 2 hours
43 43
44 void LogResponseProfilingData(const ClientToServerResponse& response) { 44 void LogResponseProfilingData(const ClientToServerResponse& response) {
45 if (response.has_profiling_data()) { 45 if (response.has_profiling_data()) {
46 stringstream response_trace; 46 stringstream response_trace;
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 } 210 }
211 } 211 }
212 return throttle_delay; 212 return throttle_delay;
213 } 213 }
214 214
215 void SyncerProtoUtil::HandleThrottleError( 215 void SyncerProtoUtil::HandleThrottleError(
216 const SyncProtocolError& error, 216 const SyncProtocolError& error,
217 const base::TimeTicks& throttled_until, 217 const base::TimeTicks& throttled_until,
218 ThrottledDataTypeTracker* tracker, 218 ThrottledDataTypeTracker* tracker,
219 sessions::SyncSession::Delegate* delegate) { 219 sessions::SyncSession::Delegate* delegate) {
220 DCHECK_EQ(error.error_type, csync::THROTTLED); 220 DCHECK_EQ(error.error_type, syncer::THROTTLED);
221 if (error.error_data_types.Empty()) { 221 if (error.error_data_types.Empty()) {
222 // No datatypes indicates the client should be completely throttled. 222 // No datatypes indicates the client should be completely throttled.
223 delegate->OnSilencedUntil(throttled_until); 223 delegate->OnSilencedUntil(throttled_until);
224 } else { 224 } else {
225 tracker->SetUnthrottleTime(error.error_data_types, throttled_until); 225 tracker->SetUnthrottleTime(error.error_data_types, throttled_until);
226 } 226 }
227 } 227 }
228 228
229 namespace { 229 namespace {
230 230
231 // Helper function for an assertion in PostClientToServerMessage. 231 // Helper function for an assertion in PostClientToServerMessage.
232 bool IsVeryFirstGetUpdates(const ClientToServerMessage& message) { 232 bool IsVeryFirstGetUpdates(const ClientToServerMessage& message) {
233 if (!message.has_get_updates()) 233 if (!message.has_get_updates())
234 return false; 234 return false;
235 DCHECK_LT(0, message.get_updates().from_progress_marker_size()); 235 DCHECK_LT(0, message.get_updates().from_progress_marker_size());
236 for (int i = 0; i < message.get_updates().from_progress_marker_size(); ++i) { 236 for (int i = 0; i < message.get_updates().from_progress_marker_size(); ++i) {
237 if (!message.get_updates().from_progress_marker(i).token().empty()) 237 if (!message.get_updates().from_progress_marker(i).token().empty())
238 return false; 238 return false;
239 } 239 }
240 return true; 240 return true;
241 } 241 }
242 242
243 SyncProtocolErrorType ConvertSyncProtocolErrorTypePBToLocalType( 243 SyncProtocolErrorType ConvertSyncProtocolErrorTypePBToLocalType(
244 const sync_pb::SyncEnums::ErrorType& error_type) { 244 const sync_pb::SyncEnums::ErrorType& error_type) {
245 switch (error_type) { 245 switch (error_type) {
246 case sync_pb::SyncEnums::SUCCESS: 246 case sync_pb::SyncEnums::SUCCESS:
247 return csync::SYNC_SUCCESS; 247 return syncer::SYNC_SUCCESS;
248 case sync_pb::SyncEnums::NOT_MY_BIRTHDAY: 248 case sync_pb::SyncEnums::NOT_MY_BIRTHDAY:
249 return csync::NOT_MY_BIRTHDAY; 249 return syncer::NOT_MY_BIRTHDAY;
250 case sync_pb::SyncEnums::THROTTLED: 250 case sync_pb::SyncEnums::THROTTLED:
251 return csync::THROTTLED; 251 return syncer::THROTTLED;
252 case sync_pb::SyncEnums::CLEAR_PENDING: 252 case sync_pb::SyncEnums::CLEAR_PENDING:
253 return csync::CLEAR_PENDING; 253 return syncer::CLEAR_PENDING;
254 case sync_pb::SyncEnums::TRANSIENT_ERROR: 254 case sync_pb::SyncEnums::TRANSIENT_ERROR:
255 return csync::TRANSIENT_ERROR; 255 return syncer::TRANSIENT_ERROR;
256 case sync_pb::SyncEnums::MIGRATION_DONE: 256 case sync_pb::SyncEnums::MIGRATION_DONE:
257 return csync::MIGRATION_DONE; 257 return syncer::MIGRATION_DONE;
258 case sync_pb::SyncEnums::UNKNOWN: 258 case sync_pb::SyncEnums::UNKNOWN:
259 return csync::UNKNOWN_ERROR; 259 return syncer::UNKNOWN_ERROR;
260 case sync_pb::SyncEnums::USER_NOT_ACTIVATED: 260 case sync_pb::SyncEnums::USER_NOT_ACTIVATED:
261 case sync_pb::SyncEnums::AUTH_INVALID: 261 case sync_pb::SyncEnums::AUTH_INVALID:
262 case sync_pb::SyncEnums::ACCESS_DENIED: 262 case sync_pb::SyncEnums::ACCESS_DENIED:
263 return csync::INVALID_CREDENTIAL; 263 return syncer::INVALID_CREDENTIAL;
264 default: 264 default:
265 NOTREACHED(); 265 NOTREACHED();
266 return csync::UNKNOWN_ERROR; 266 return syncer::UNKNOWN_ERROR;
267 } 267 }
268 } 268 }
269 269
270 csync::ClientAction ConvertClientActionPBToLocalClientAction( 270 syncer::ClientAction ConvertClientActionPBToLocalClientAction(
271 const sync_pb::SyncEnums::Action& action) { 271 const sync_pb::SyncEnums::Action& action) {
272 switch (action) { 272 switch (action) {
273 case sync_pb::SyncEnums::UPGRADE_CLIENT: 273 case sync_pb::SyncEnums::UPGRADE_CLIENT:
274 return csync::UPGRADE_CLIENT; 274 return syncer::UPGRADE_CLIENT;
275 case sync_pb::SyncEnums::CLEAR_USER_DATA_AND_RESYNC: 275 case sync_pb::SyncEnums::CLEAR_USER_DATA_AND_RESYNC:
276 return csync::CLEAR_USER_DATA_AND_RESYNC; 276 return syncer::CLEAR_USER_DATA_AND_RESYNC;
277 case sync_pb::SyncEnums::ENABLE_SYNC_ON_ACCOUNT: 277 case sync_pb::SyncEnums::ENABLE_SYNC_ON_ACCOUNT:
278 return csync::ENABLE_SYNC_ON_ACCOUNT; 278 return syncer::ENABLE_SYNC_ON_ACCOUNT;
279 case sync_pb::SyncEnums::STOP_AND_RESTART_SYNC: 279 case sync_pb::SyncEnums::STOP_AND_RESTART_SYNC:
280 return csync::STOP_AND_RESTART_SYNC; 280 return syncer::STOP_AND_RESTART_SYNC;
281 case sync_pb::SyncEnums::DISABLE_SYNC_ON_CLIENT: 281 case sync_pb::SyncEnums::DISABLE_SYNC_ON_CLIENT:
282 return csync::DISABLE_SYNC_ON_CLIENT; 282 return syncer::DISABLE_SYNC_ON_CLIENT;
283 case sync_pb::SyncEnums::UNKNOWN_ACTION: 283 case sync_pb::SyncEnums::UNKNOWN_ACTION:
284 return csync::UNKNOWN_ACTION; 284 return syncer::UNKNOWN_ACTION;
285 default: 285 default:
286 NOTREACHED(); 286 NOTREACHED();
287 return csync::UNKNOWN_ACTION; 287 return syncer::UNKNOWN_ACTION;
288 } 288 }
289 } 289 }
290 290
291 csync::SyncProtocolError ConvertErrorPBToLocalType( 291 syncer::SyncProtocolError ConvertErrorPBToLocalType(
292 const sync_pb::ClientToServerResponse::Error& error) { 292 const sync_pb::ClientToServerResponse::Error& error) {
293 csync::SyncProtocolError sync_protocol_error; 293 syncer::SyncProtocolError sync_protocol_error;
294 sync_protocol_error.error_type = ConvertSyncProtocolErrorTypePBToLocalType( 294 sync_protocol_error.error_type = ConvertSyncProtocolErrorTypePBToLocalType(
295 error.error_type()); 295 error.error_type());
296 sync_protocol_error.error_description = error.error_description(); 296 sync_protocol_error.error_description = error.error_description();
297 sync_protocol_error.url = error.url(); 297 sync_protocol_error.url = error.url();
298 sync_protocol_error.action = ConvertClientActionPBToLocalClientAction( 298 sync_protocol_error.action = ConvertClientActionPBToLocalClientAction(
299 error.action()); 299 error.action());
300 300
301 if (error.error_data_type_ids_size() > 0) { 301 if (error.error_data_type_ids_size() > 0) {
302 // THROTTLED is currently the only error code that uses |error_data_types|. 302 // THROTTLED is currently the only error code that uses |error_data_types|.
303 DCHECK_EQ(error.error_type(), sync_pb::SyncEnums::THROTTLED); 303 DCHECK_EQ(error.error_type(), sync_pb::SyncEnums::THROTTLED);
304 for (int i = 0; i < error.error_data_type_ids_size(); ++i) { 304 for (int i = 0; i < error.error_data_type_ids_size(); ++i) {
305 sync_protocol_error.error_data_types.Put( 305 sync_protocol_error.error_data_types.Put(
306 syncable::GetModelTypeFromSpecificsFieldNumber( 306 syncable::GetModelTypeFromSpecificsFieldNumber(
307 error.error_data_type_ids(i))); 307 error.error_data_type_ids(i)));
308 } 308 }
309 } 309 }
310 310
311 return sync_protocol_error; 311 return sync_protocol_error;
312 } 312 }
313 313
314 // TODO(lipalani) : Rename these function names as per the CR for issue 7740067. 314 // TODO(lipalani) : Rename these function names as per the CR for issue 7740067.
315 csync::SyncProtocolError ConvertLegacyErrorCodeToNewError( 315 syncer::SyncProtocolError ConvertLegacyErrorCodeToNewError(
316 const sync_pb::SyncEnums::ErrorType& error_type) { 316 const sync_pb::SyncEnums::ErrorType& error_type) {
317 csync::SyncProtocolError error; 317 syncer::SyncProtocolError error;
318 error.error_type = ConvertSyncProtocolErrorTypePBToLocalType(error_type); 318 error.error_type = ConvertSyncProtocolErrorTypePBToLocalType(error_type);
319 if (error_type == sync_pb::SyncEnums::CLEAR_PENDING || 319 if (error_type == sync_pb::SyncEnums::CLEAR_PENDING ||
320 error_type == sync_pb::SyncEnums::NOT_MY_BIRTHDAY) { 320 error_type == sync_pb::SyncEnums::NOT_MY_BIRTHDAY) {
321 error.action = csync::DISABLE_SYNC_ON_CLIENT; 321 error.action = syncer::DISABLE_SYNC_ON_CLIENT;
322 } // There is no other action we can compute for legacy server. 322 } // There is no other action we can compute for legacy server.
323 return error; 323 return error;
324 } 324 }
325 325
326 } // namespace 326 } // namespace
327 327
328 // static 328 // static
329 SyncerError SyncerProtoUtil::PostClientToServerMessage( 329 SyncerError SyncerProtoUtil::PostClientToServerMessage(
330 const ClientToServerMessage& msg, 330 const ClientToServerMessage& msg,
331 ClientToServerResponse* response, 331 ClientToServerResponse* response,
332 SyncSession* session) { 332 SyncSession* session) {
333 333
334 CHECK(response); 334 CHECK(response);
335 DCHECK(!msg.get_updates().has_from_timestamp()); // Deprecated. 335 DCHECK(!msg.get_updates().has_from_timestamp()); // Deprecated.
336 DCHECK(!msg.get_updates().has_requested_types()); // Deprecated. 336 DCHECK(!msg.get_updates().has_requested_types()); // Deprecated.
337 DCHECK(msg.has_store_birthday() || IsVeryFirstGetUpdates(msg)) 337 DCHECK(msg.has_store_birthday() || IsVeryFirstGetUpdates(msg))
338 << "Must call AddRequestBirthday to set birthday."; 338 << "Must call AddRequestBirthday to set birthday.";
339 339
340 syncable::Directory* dir = session->context()->directory(); 340 syncable::Directory* dir = session->context()->directory();
341 341
342 LogClientToServerMessage(msg); 342 LogClientToServerMessage(msg);
343 session->context()->traffic_recorder()->RecordClientToServerMessage(msg); 343 session->context()->traffic_recorder()->RecordClientToServerMessage(msg);
344 if (!PostAndProcessHeaders(session->context()->connection_manager(), session, 344 if (!PostAndProcessHeaders(session->context()->connection_manager(), session,
345 msg, response)) { 345 msg, response)) {
346 // There was an error establishing communication with the server. 346 // There was an error establishing communication with the server.
347 // We can not proceed beyond this point. 347 // We can not proceed beyond this point.
348 const csync::HttpResponse::ServerConnectionCode server_status = 348 const syncer::HttpResponse::ServerConnectionCode server_status =
349 session->context()->connection_manager()->server_status(); 349 session->context()->connection_manager()->server_status();
350 350
351 DCHECK_NE(server_status, csync::HttpResponse::NONE); 351 DCHECK_NE(server_status, syncer::HttpResponse::NONE);
352 DCHECK_NE(server_status, csync::HttpResponse::SERVER_CONNECTION_OK); 352 DCHECK_NE(server_status, syncer::HttpResponse::SERVER_CONNECTION_OK);
353 353
354 return ServerConnectionErrorAsSyncerError(server_status); 354 return ServerConnectionErrorAsSyncerError(server_status);
355 } 355 }
356 356
357 LogClientToServerResponse(*response); 357 LogClientToServerResponse(*response);
358 session->context()->traffic_recorder()->RecordClientToServerResponse( 358 session->context()->traffic_recorder()->RecordClientToServerResponse(
359 *response); 359 *response);
360 360
361 csync::SyncProtocolError sync_protocol_error; 361 syncer::SyncProtocolError sync_protocol_error;
362 362
363 // Birthday mismatch overrides any error that is sent by the server. 363 // Birthday mismatch overrides any error that is sent by the server.
364 if (!VerifyResponseBirthday(dir, response)) { 364 if (!VerifyResponseBirthday(dir, response)) {
365 sync_protocol_error.error_type = csync::NOT_MY_BIRTHDAY; 365 sync_protocol_error.error_type = syncer::NOT_MY_BIRTHDAY;
366 sync_protocol_error.action = 366 sync_protocol_error.action =
367 csync::DISABLE_SYNC_ON_CLIENT; 367 syncer::DISABLE_SYNC_ON_CLIENT;
368 } else if (response->has_error()) { 368 } else if (response->has_error()) {
369 // This is a new server. Just get the error from the protocol. 369 // This is a new server. Just get the error from the protocol.
370 sync_protocol_error = ConvertErrorPBToLocalType(response->error()); 370 sync_protocol_error = ConvertErrorPBToLocalType(response->error());
371 } else { 371 } else {
372 // Legacy server implementation. Compute the error based on |error_code|. 372 // Legacy server implementation. Compute the error based on |error_code|.
373 sync_protocol_error = ConvertLegacyErrorCodeToNewError( 373 sync_protocol_error = ConvertLegacyErrorCodeToNewError(
374 response->error_code()); 374 response->error_code());
375 } 375 }
376 376
377 // Now set the error into the status so the layers above us could read it. 377 // Now set the error into the status so the layers above us could read it.
378 sessions::StatusController* status = session->mutable_status_controller(); 378 sessions::StatusController* status = session->mutable_status_controller();
379 status->set_sync_protocol_error(sync_protocol_error); 379 status->set_sync_protocol_error(sync_protocol_error);
380 380
381 // Inform the delegate of the error we got. 381 // Inform the delegate of the error we got.
382 session->delegate()->OnSyncProtocolError(session->TakeSnapshot()); 382 session->delegate()->OnSyncProtocolError(session->TakeSnapshot());
383 383
384 // Now do any special handling for the error type and decide on the return 384 // Now do any special handling for the error type and decide on the return
385 // value. 385 // value.
386 switch (sync_protocol_error.error_type) { 386 switch (sync_protocol_error.error_type) {
387 case csync::UNKNOWN_ERROR: 387 case syncer::UNKNOWN_ERROR:
388 LOG(WARNING) << "Sync protocol out-of-date. The server is using a more " 388 LOG(WARNING) << "Sync protocol out-of-date. The server is using a more "
389 << "recent version."; 389 << "recent version.";
390 return SERVER_RETURN_UNKNOWN_ERROR; 390 return SERVER_RETURN_UNKNOWN_ERROR;
391 case csync::SYNC_SUCCESS: 391 case syncer::SYNC_SUCCESS:
392 LogResponseProfilingData(*response); 392 LogResponseProfilingData(*response);
393 return SYNCER_OK; 393 return SYNCER_OK;
394 case csync::THROTTLED: 394 case syncer::THROTTLED:
395 LOG(WARNING) << "Client silenced by server."; 395 LOG(WARNING) << "Client silenced by server.";
396 HandleThrottleError(sync_protocol_error, 396 HandleThrottleError(sync_protocol_error,
397 base::TimeTicks::Now() + GetThrottleDelay(*response), 397 base::TimeTicks::Now() + GetThrottleDelay(*response),
398 session->context()->throttled_data_type_tracker(), 398 session->context()->throttled_data_type_tracker(),
399 session->delegate()); 399 session->delegate());
400 return SERVER_RETURN_THROTTLED; 400 return SERVER_RETURN_THROTTLED;
401 case csync::TRANSIENT_ERROR: 401 case syncer::TRANSIENT_ERROR:
402 return SERVER_RETURN_TRANSIENT_ERROR; 402 return SERVER_RETURN_TRANSIENT_ERROR;
403 case csync::MIGRATION_DONE: 403 case syncer::MIGRATION_DONE:
404 HandleMigrationDoneResponse(response, session); 404 HandleMigrationDoneResponse(response, session);
405 return SERVER_RETURN_MIGRATION_DONE; 405 return SERVER_RETURN_MIGRATION_DONE;
406 case csync::CLEAR_PENDING: 406 case syncer::CLEAR_PENDING:
407 return SERVER_RETURN_CLEAR_PENDING; 407 return SERVER_RETURN_CLEAR_PENDING;
408 case csync::NOT_MY_BIRTHDAY: 408 case syncer::NOT_MY_BIRTHDAY:
409 return SERVER_RETURN_NOT_MY_BIRTHDAY; 409 return SERVER_RETURN_NOT_MY_BIRTHDAY;
410 default: 410 default:
411 NOTREACHED(); 411 NOTREACHED();
412 return UNSET; 412 return UNSET;
413 } 413 }
414 } 414 }
415 415
416 // static 416 // static
417 bool SyncerProtoUtil::Compare(const syncable::Entry& local_entry, 417 bool SyncerProtoUtil::Compare(const syncable::Entry& local_entry,
418 const SyncEntity& server_entry) { 418 const SyncEntity& server_entry) {
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 535
536 std::string SyncerProtoUtil::ClientToServerResponseDebugString( 536 std::string SyncerProtoUtil::ClientToServerResponseDebugString(
537 const sync_pb::ClientToServerResponse& response) { 537 const sync_pb::ClientToServerResponse& response) {
538 // Add more handlers as needed. 538 // Add more handlers as needed.
539 std::string output; 539 std::string output;
540 if (response.has_get_updates()) 540 if (response.has_get_updates())
541 output.append(GetUpdatesResponseString(response.get_updates())); 541 output.append(GetUpdatesResponseString(response.get_updates()));
542 return output; 542 return output;
543 } 543 }
544 544
545 } // namespace csync 545 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/engine/syncer_proto_util.h ('k') | sync/engine/syncer_proto_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698