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

Side by Side Diff: chrome/browser/sync/engine/sync_scheduler.cc

Issue 9348036: Trim code from sync's ServerConnectionManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Back off some changes Created 8 years, 10 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
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 "chrome/browser/sync/engine/sync_scheduler.h" 5 #include "chrome/browser/sync/engine/sync_scheduler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cstring> 8 #include <cstring>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 started_(false), 187 started_(false),
188 syncer_short_poll_interval_seconds_( 188 syncer_short_poll_interval_seconds_(
189 TimeDelta::FromSeconds(kDefaultShortPollIntervalSeconds)), 189 TimeDelta::FromSeconds(kDefaultShortPollIntervalSeconds)),
190 syncer_long_poll_interval_seconds_( 190 syncer_long_poll_interval_seconds_(
191 TimeDelta::FromSeconds(kDefaultLongPollIntervalSeconds)), 191 TimeDelta::FromSeconds(kDefaultLongPollIntervalSeconds)),
192 sessions_commit_delay_( 192 sessions_commit_delay_(
193 TimeDelta::FromSeconds(kDefaultSessionsCommitDelaySeconds)), 193 TimeDelta::FromSeconds(kDefaultSessionsCommitDelaySeconds)),
194 mode_(NORMAL_MODE), 194 mode_(NORMAL_MODE),
195 // Start with assuming everything is fine with the connection. 195 // Start with assuming everything is fine with the connection.
196 // At the end of the sync cycle we would have the correct status. 196 // At the end of the sync cycle we would have the correct status.
197 server_connection_ok_(true),
198 connection_code_(HttpResponse::SERVER_CONNECTION_OK), 197 connection_code_(HttpResponse::SERVER_CONNECTION_OK),
199 delay_provider_(new DelayProvider()), 198 delay_provider_(new DelayProvider()),
200 syncer_(syncer), 199 syncer_(syncer),
201 session_context_(context) { 200 session_context_(context) {
202 DCHECK(sync_loop_); 201 DCHECK(sync_loop_);
203 } 202 }
204 203
205 SyncScheduler::~SyncScheduler() { 204 SyncScheduler::~SyncScheduler() {
206 DCHECK_EQ(MessageLoop::current(), sync_loop_); 205 DCHECK_EQ(MessageLoop::current(), sync_loop_);
207 StopImpl(base::Closure()); 206 StopImpl(base::Closure());
(...skipping 15 matching lines...) Expand all
223 222
224 void SyncScheduler::OnConnectionStatusChange() { 223 void SyncScheduler::OnConnectionStatusChange() {
225 if (HttpResponse::CONNECTION_UNAVAILABLE == connection_code_) { 224 if (HttpResponse::CONNECTION_UNAVAILABLE == connection_code_) {
226 // Optimistically assume that the connection is fixed and try 225 // Optimistically assume that the connection is fixed and try
227 // connecting. 226 // connecting.
228 OnServerConnectionErrorFixed(); 227 OnServerConnectionErrorFixed();
229 } 228 }
230 } 229 }
231 230
232 void SyncScheduler::OnServerConnectionErrorFixed() { 231 void SyncScheduler::OnServerConnectionErrorFixed() {
233 DCHECK(!server_connection_ok_);
234 connection_code_ = HttpResponse::SERVER_CONNECTION_OK; 232 connection_code_ = HttpResponse::SERVER_CONNECTION_OK;
235 server_connection_ok_ = true;
236 PostTask(FROM_HERE, "DoCanaryJob", 233 PostTask(FROM_HERE, "DoCanaryJob",
237 base::Bind(&SyncScheduler::DoCanaryJob, 234 base::Bind(&SyncScheduler::DoCanaryJob,
238 weak_ptr_factory_.GetWeakPtr())); 235 weak_ptr_factory_.GetWeakPtr()));
239 236
240 } 237 }
241 238
242 void SyncScheduler::UpdateServerConnectionManagerStatus( 239 void SyncScheduler::UpdateServerConnectionManagerStatus(
243 HttpResponse::ServerConnectionCode code) { 240 HttpResponse::ServerConnectionCode code) {
244 DCHECK_EQ(MessageLoop::current(), sync_loop_); 241 DCHECK_EQ(MessageLoop::current(), sync_loop_);
245 SDVLOG(2) << "New server connection code: " 242 SDVLOG(2) << "New server connection code: "
246 << HttpResponse::GetServerConnectionCodeString(code); 243 << HttpResponse::GetServerConnectionCodeString(code);
247 bool old_server_connection_ok = server_connection_ok_;
248 244
249 connection_code_ = code; 245 connection_code_ = code;
250 246
251 // Note, be careful when adding cases here because if the SyncScheduler 247 // Note, be careful when adding cases here because if the SyncScheduler
252 // thinks there is no valid connection as determined by this method, it 248 // thinks there is no valid connection as determined by this method, it
253 // will drop out of *all* forward progress sync loops (it won't poll and it 249 // will drop out of *all* forward progress sync loops (it won't poll and it
254 // will queue up Talk notifications but not actually call SyncShare) until 250 // will queue up Talk notifications but not actually call SyncShare) until
255 // some external action causes a ServerConnectionManager to broadcast that 251 // some external action causes a ServerConnectionManager to broadcast that
256 // a valid connection has been re-established 252 // a valid connection has been re-established
257 if (HttpResponse::CONNECTION_UNAVAILABLE == code || 253 if (HttpResponse::CONNECTION_UNAVAILABLE == code ||
258 HttpResponse::SYNC_AUTH_ERROR == code) { 254 HttpResponse::SYNC_AUTH_ERROR == code) {
259 server_connection_ok_ = false;
260 SDVLOG(2) << "Sync auth error or unavailable connection: " 255 SDVLOG(2) << "Sync auth error or unavailable connection: "
261 << "server connection is down"; 256 << "server connection is down";
262 } else if (HttpResponse::SERVER_CONNECTION_OK == code) { 257 } else if (HttpResponse::SERVER_CONNECTION_OK == code) {
263 server_connection_ok_ = true;
264 SDVLOG(2) << "Sync server connection is ok: " 258 SDVLOG(2) << "Sync server connection is ok: "
265 << "server connection is up, doing canary job"; 259 << "server connection is up, doing canary job";
266 } 260 }
267
268 if (old_server_connection_ok != server_connection_ok_) {
269 const char* transition =
270 server_connection_ok_ ? "down -> up" : "up -> down";
271 SDVLOG(2) << "Server connection changed: " << transition;
lipalani1 2012/02/11 00:12:10 There is some value to this log statement. You can
rlarocque 2012/02/11 01:31:36 This log statement exists specifically to tell us
272 }
273 } 261 }
274 262
275 void SyncScheduler::Start(Mode mode, const base::Closure& callback) { 263 void SyncScheduler::Start(Mode mode, const base::Closure& callback) {
276 DCHECK_EQ(MessageLoop::current(), sync_loop_); 264 DCHECK_EQ(MessageLoop::current(), sync_loop_);
277 std::string thread_name = MessageLoop::current()->thread_name(); 265 std::string thread_name = MessageLoop::current()->thread_name();
278 if (thread_name.empty()) 266 if (thread_name.empty())
279 thread_name = "<Main thread>"; 267 thread_name = "<Main thread>";
280 SDVLOG(2) << "Start called from thread " 268 SDVLOG(2) << "Start called from thread "
281 << thread_name << " with mode " << GetModeString(mode); 269 << thread_name << " with mode " << GetModeString(mode);
282 if (!started_) { 270 if (!started_) {
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 // We are in normal mode. 366 // We are in normal mode.
379 DCHECK_EQ(mode_, NORMAL_MODE); 367 DCHECK_EQ(mode_, NORMAL_MODE);
380 DCHECK_NE(job.purpose, SyncSessionJob::CONFIGURATION); 368 DCHECK_NE(job.purpose, SyncSessionJob::CONFIGURATION);
381 369
382 // Freshness condition 370 // Freshness condition
383 if (job.scheduled_start < last_sync_session_end_time_) { 371 if (job.scheduled_start < last_sync_session_end_time_) {
384 SDVLOG(2) << "Dropping job because of freshness"; 372 SDVLOG(2) << "Dropping job because of freshness";
385 return DROP; 373 return DROP;
386 } 374 }
387 375
388 if (server_connection_ok_) 376 if (!session_context_->connection_manager()->HasInvalidAuthToken())
rlarocque 2012/02/10 23:16:06 You might be thinking that this condition is not t
lipalani1 2012/02/11 00:12:10 Yep it was designed to capture cases where this va
389 return CONTINUE; 377 return CONTINUE;
390 378
391 SDVLOG(2) << "Bad server connection. Using that to decide on job."; 379 SDVLOG(2) << "No valid auth token. Using that to decide on job.";
392 return job.purpose == SyncSessionJob::NUDGE ? SAVE : DROP; 380 return job.purpose == SyncSessionJob::NUDGE ? SAVE : DROP;
393 } 381 }
394 382
395 void SyncScheduler::InitOrCoalescePendingJob(const SyncSessionJob& job) { 383 void SyncScheduler::InitOrCoalescePendingJob(const SyncSessionJob& job) {
396 DCHECK_EQ(MessageLoop::current(), sync_loop_); 384 DCHECK_EQ(MessageLoop::current(), sync_loop_);
397 DCHECK(job.purpose != SyncSessionJob::CONFIGURATION); 385 DCHECK(job.purpose != SyncSessionJob::CONFIGURATION);
398 if (pending_nudge_.get() == NULL) { 386 if (pending_nudge_.get() == NULL) {
399 SDVLOG(2) << "Creating a pending nudge job"; 387 SDVLOG(2) << "Creating a pending nudge job";
400 SyncSession* s = job.session.get(); 388 SyncSession* s = job.session.get();
401 scoped_ptr<SyncSession> session(new SyncSession(s->context(), 389 scoped_ptr<SyncSession> session(new SyncSession(s->context(),
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after
845 ModelTypePayloadMap::const_iterator iter; 833 ModelTypePayloadMap::const_iterator iter;
846 for (iter = job.session->source().types.begin(); 834 for (iter = job.session->source().types.begin();
847 iter != job.session->source().types.end(); 835 iter != job.session->source().types.end();
848 ++iter) { 836 ++iter) {
849 syncable::PostTimeToTypeHistogram(iter->first, 837 syncable::PostTimeToTypeHistogram(iter->first,
850 now - last_sync_session_end_time_); 838 now - last_sync_session_end_time_);
851 } 839 }
852 } 840 }
853 last_sync_session_end_time_ = now; 841 last_sync_session_end_time_ = now;
854 842
855 // Now update the status of the connection from SCM. We need this 843 // Now update the status of the connection from SCM. We need this to decide
856 // to decide whether we need to save/run future jobs. The notifications 844 // whether we need to save/run future jobs. The notifications from SCM are not
857 // from SCM are not reliable. 845 // reliable.
846 //
858 // TODO(rlarocque): crbug.com/110954 847 // TODO(rlarocque): crbug.com/110954
859 // We should get rid of the notifications and 848 // We should get rid of the notifications and it is probably not needed to
860 // it is probably not needed to maintain this status variable 849 // maintain this status variable in 2 places. We should query it directly from
861 // in 2 places. We should query it directly from SCM when needed. 850 // SCM when needed.
862 // But that would need little more refactoring(including a method to
863 // query if the auth token is invalid) from SCM side.
864 ServerConnectionManager* scm = session_context_->connection_manager(); 851 ServerConnectionManager* scm = session_context_->connection_manager();
865 UpdateServerConnectionManagerStatus(scm->server_status()); 852 UpdateServerConnectionManagerStatus(scm->server_status());
866 853
867 UpdateCarryoverSessionState(job); 854 UpdateCarryoverSessionState(job);
868 if (IsSyncingCurrentlySilenced()) { 855 if (IsSyncingCurrentlySilenced()) {
869 SDVLOG(2) << "We are currently throttled; not scheduling the next sync."; 856 SDVLOG(2) << "We are currently throttled; not scheduling the next sync.";
870 // TODO(sync): Investigate whether we need to check job.purpose 857 // TODO(sync): Investigate whether we need to check job.purpose
871 // here; see DCHECKs in SaveJob(). (See http://crbug.com/90868.) 858 // here; see DCHECKs in SaveJob(). (See http://crbug.com/90868.)
872 SaveJob(job); 859 SaveJob(job);
873 return; // Nothing to do. 860 return; // Nothing to do.
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
1200 1187
1201 #undef SDVLOG_LOC 1188 #undef SDVLOG_LOC
1202 1189
1203 #undef SDVLOG 1190 #undef SDVLOG
1204 1191
1205 #undef SLOG 1192 #undef SLOG
1206 1193
1207 #undef ENUM_CASE 1194 #undef ENUM_CASE
1208 1195
1209 } // browser_sync 1196 } // browser_sync
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698