OLD | NEW |
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/sync_scheduler_impl.h" | 5 #include "sync/engine/sync_scheduler_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cstring> | 8 #include <cstring> |
9 | 9 |
10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "sync/util/data_type_histogram.h" | 21 #include "sync/util/data_type_histogram.h" |
22 #include "sync/util/logging.h" | 22 #include "sync/util/logging.h" |
23 | 23 |
24 using base::TimeDelta; | 24 using base::TimeDelta; |
25 using base::TimeTicks; | 25 using base::TimeTicks; |
26 | 26 |
27 namespace syncer { | 27 namespace syncer { |
28 | 28 |
29 using sessions::SyncSession; | 29 using sessions::SyncSession; |
30 using sessions::SyncSessionSnapshot; | 30 using sessions::SyncSessionSnapshot; |
31 using sessions::SyncSourceInfo; | |
32 using sync_pb::GetUpdatesCallerInfo; | 31 using sync_pb::GetUpdatesCallerInfo; |
33 | 32 |
34 namespace { | 33 namespace { |
35 | 34 |
36 bool ShouldRequestEarlyExit(const SyncProtocolError& error) { | 35 bool ShouldRequestEarlyExit(const SyncProtocolError& error) { |
37 switch (error.error_type) { | 36 switch (error.error_type) { |
38 case SYNC_SUCCESS: | 37 case SYNC_SUCCESS: |
39 case MIGRATION_DONE: | 38 case MIGRATION_DONE: |
40 case THROTTLED: | 39 case THROTTLED: |
41 case TRANSIENT_ERROR: | 40 case TRANSIENT_ERROR: |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
241 ModelTypeSet SyncSchedulerImpl::GetEnabledAndUnthrottledTypes() { | 240 ModelTypeSet SyncSchedulerImpl::GetEnabledAndUnthrottledTypes() { |
242 ModelTypeSet enabled_types = | 241 ModelTypeSet enabled_types = |
243 GetRoutingInfoTypes(session_context_->routing_info()); | 242 GetRoutingInfoTypes(session_context_->routing_info()); |
244 ModelTypeSet throttled_types = | 243 ModelTypeSet throttled_types = |
245 nudge_tracker_.GetThrottledTypes(); | 244 nudge_tracker_.GetThrottledTypes(); |
246 return Difference(enabled_types, throttled_types); | 245 return Difference(enabled_types, throttled_types); |
247 } | 246 } |
248 | 247 |
249 void SyncSchedulerImpl::SendInitialSnapshot() { | 248 void SyncSchedulerImpl::SendInitialSnapshot() { |
250 DCHECK(CalledOnValidThread()); | 249 DCHECK(CalledOnValidThread()); |
251 scoped_ptr<SyncSession> dummy( | 250 scoped_ptr<SyncSession> dummy(SyncSession::Build(session_context_, this)); |
252 SyncSession::Build(session_context_, this, SyncSourceInfo())); | |
253 SyncEngineEvent event(SyncEngineEvent::STATUS_CHANGED); | 251 SyncEngineEvent event(SyncEngineEvent::STATUS_CHANGED); |
254 event.snapshot = dummy->TakeSnapshot(); | 252 event.snapshot = dummy->TakeSnapshot(); |
255 session_context_->NotifyListeners(event); | 253 session_context_->NotifyListeners(event); |
256 } | 254 } |
257 | 255 |
258 namespace { | 256 namespace { |
259 | 257 |
260 // Helper to extract the routing info corresponding to types in | 258 // Helper to extract the routing info corresponding to types in |
261 // |types_to_download| from |current_routes|. | 259 // |types_to_download| from |current_routes|. |
262 void BuildModelSafeParams( | 260 void BuildModelSafeParams( |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 } | 460 } |
463 return ""; | 461 return ""; |
464 } | 462 } |
465 | 463 |
466 void SyncSchedulerImpl::DoNudgeSyncSessionJob(JobPriority priority) { | 464 void SyncSchedulerImpl::DoNudgeSyncSessionJob(JobPriority priority) { |
467 DCHECK(CalledOnValidThread()); | 465 DCHECK(CalledOnValidThread()); |
468 DCHECK(CanRunNudgeJobNow(priority)); | 466 DCHECK(CanRunNudgeJobNow(priority)); |
469 | 467 |
470 DVLOG(2) << "Will run normal mode sync cycle with routing info " | 468 DVLOG(2) << "Will run normal mode sync cycle with routing info " |
471 << ModelSafeRoutingInfoToString(session_context_->routing_info()); | 469 << ModelSafeRoutingInfoToString(session_context_->routing_info()); |
472 scoped_ptr<SyncSession> session( | 470 scoped_ptr<SyncSession> session(SyncSession::Build(session_context_, this)); |
473 SyncSession::Build( | |
474 session_context_, | |
475 this, | |
476 nudge_tracker_.GetSourceInfo())); | |
477 bool premature_exit = !syncer_->NormalSyncShare( | 471 bool premature_exit = !syncer_->NormalSyncShare( |
478 GetEnabledAndUnthrottledTypes(), | 472 GetEnabledAndUnthrottledTypes(), |
479 nudge_tracker_, | 473 nudge_tracker_, |
480 session.get()); | 474 session.get()); |
481 AdjustPolling(FORCE_RESET); | 475 AdjustPolling(FORCE_RESET); |
482 // Don't run poll job till the next time poll timer fires. | 476 // Don't run poll job till the next time poll timer fires. |
483 do_poll_after_credentials_updated_ = false; | 477 do_poll_after_credentials_updated_ = false; |
484 | 478 |
485 bool success = !premature_exit | 479 bool success = !premature_exit |
486 && !sessions::HasSyncerError( | 480 && !sessions::HasSyncerError( |
(...skipping 18 matching lines...) Expand all Loading... |
505 DCHECK(CalledOnValidThread()); | 499 DCHECK(CalledOnValidThread()); |
506 DCHECK_EQ(mode_, CONFIGURATION_MODE); | 500 DCHECK_EQ(mode_, CONFIGURATION_MODE); |
507 | 501 |
508 if (!CanRunJobNow(priority)) { | 502 if (!CanRunJobNow(priority)) { |
509 SDVLOG(2) << "Unable to run configure job right now."; | 503 SDVLOG(2) << "Unable to run configure job right now."; |
510 return false; | 504 return false; |
511 } | 505 } |
512 | 506 |
513 SDVLOG(2) << "Will run configure SyncShare with routes " | 507 SDVLOG(2) << "Will run configure SyncShare with routes " |
514 << ModelSafeRoutingInfoToString(session_context_->routing_info()); | 508 << ModelSafeRoutingInfoToString(session_context_->routing_info()); |
515 SyncSourceInfo source_info(pending_configure_params_->source, | 509 scoped_ptr<SyncSession> session(SyncSession::Build(session_context_, this)); |
516 ModelSafeRoutingInfoToInvalidationMap( | |
517 session_context_->routing_info(), | |
518 std::string())); | |
519 scoped_ptr<SyncSession> session( | |
520 SyncSession::Build(session_context_, this, source_info)); | |
521 bool premature_exit = !syncer_->ConfigureSyncShare( | 510 bool premature_exit = !syncer_->ConfigureSyncShare( |
522 GetRoutingInfoTypes(session_context_->routing_info()), | 511 GetRoutingInfoTypes(session_context_->routing_info()), |
| 512 pending_configure_params_->source, |
523 session.get()); | 513 session.get()); |
524 AdjustPolling(FORCE_RESET); | 514 AdjustPolling(FORCE_RESET); |
525 // Don't run poll job till the next time poll timer fires. | 515 // Don't run poll job till the next time poll timer fires. |
526 do_poll_after_credentials_updated_ = false; | 516 do_poll_after_credentials_updated_ = false; |
527 | 517 |
528 bool success = !premature_exit | 518 bool success = !premature_exit |
529 && !sessions::HasSyncerError( | 519 && !sessions::HasSyncerError( |
530 session->status_controller().model_neutral_state()); | 520 session->status_controller().model_neutral_state()); |
531 | 521 |
532 if (success) { | 522 if (success) { |
(...skipping 25 matching lines...) Expand all Loading... |
558 SDVLOG(2) << "Sync cycle failed. Will back off for " | 548 SDVLOG(2) << "Sync cycle failed. Will back off for " |
559 << wait_interval_->length.InMilliseconds() << "ms."; | 549 << wait_interval_->length.InMilliseconds() << "ms."; |
560 RestartWaiting(); | 550 RestartWaiting(); |
561 } | 551 } |
562 } | 552 } |
563 | 553 |
564 void SyncSchedulerImpl::DoPollSyncSessionJob() { | 554 void SyncSchedulerImpl::DoPollSyncSessionJob() { |
565 ModelSafeRoutingInfo r; | 555 ModelSafeRoutingInfo r; |
566 ModelTypeInvalidationMap invalidation_map = | 556 ModelTypeInvalidationMap invalidation_map = |
567 ModelSafeRoutingInfoToInvalidationMap(r, std::string()); | 557 ModelSafeRoutingInfoToInvalidationMap(r, std::string()); |
568 SyncSourceInfo info(GetUpdatesCallerInfo::PERIODIC, invalidation_map); | |
569 base::AutoReset<bool> protector(&no_scheduling_allowed_, true); | 558 base::AutoReset<bool> protector(&no_scheduling_allowed_, true); |
570 | 559 |
571 if (!CanRunJobNow(NORMAL_PRIORITY)) { | 560 if (!CanRunJobNow(NORMAL_PRIORITY)) { |
572 SDVLOG(2) << "Unable to run a poll job right now."; | 561 SDVLOG(2) << "Unable to run a poll job right now."; |
573 return; | 562 return; |
574 } | 563 } |
575 | 564 |
576 if (mode_ != NORMAL_MODE) { | 565 if (mode_ != NORMAL_MODE) { |
577 SDVLOG(2) << "Not running poll job in configure mode."; | 566 SDVLOG(2) << "Not running poll job in configure mode."; |
578 return; | 567 return; |
579 } | 568 } |
580 | 569 |
581 SDVLOG(2) << "Polling with routes " | 570 SDVLOG(2) << "Polling with routes " |
582 << ModelSafeRoutingInfoToString(session_context_->routing_info()); | 571 << ModelSafeRoutingInfoToString(session_context_->routing_info()); |
583 scoped_ptr<SyncSession> session( | 572 scoped_ptr<SyncSession> session(SyncSession::Build(session_context_, this)); |
584 SyncSession::Build(session_context_, this, info)); | |
585 syncer_->PollSyncShare( | 573 syncer_->PollSyncShare( |
586 GetEnabledAndUnthrottledTypes(), | 574 GetEnabledAndUnthrottledTypes(), |
587 session.get()); | 575 session.get()); |
588 | 576 |
589 AdjustPolling(UPDATE_INTERVAL); | 577 AdjustPolling(UPDATE_INTERVAL); |
590 | 578 |
591 if (IsCurrentlyThrottled()) { | 579 if (IsCurrentlyThrottled()) { |
592 SDVLOG(2) << "Poll request got us throttled."; | 580 SDVLOG(2) << "Poll request got us throttled."; |
593 // The OnSilencedUntil() call set up the WaitInterval for us. All we need | 581 // The OnSilencedUntil() call set up the WaitInterval for us. All we need |
594 // to do is start the timer. | 582 // to do is start the timer. |
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
918 | 906 |
919 #undef SDVLOG_LOC | 907 #undef SDVLOG_LOC |
920 | 908 |
921 #undef SDVLOG | 909 #undef SDVLOG |
922 | 910 |
923 #undef SLOG | 911 #undef SLOG |
924 | 912 |
925 #undef ENUM_CASE | 913 #undef ENUM_CASE |
926 | 914 |
927 } // namespace syncer | 915 } // namespace syncer |
OLD | NEW |