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

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer.cc

Issue 446793002: [SyncFS] Unconditionally demote remote file trackers on remote-to-local sync (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_file_system/drive_backend/remote_to_local_syncer.h " 5 #include "chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer.h "
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/format_macros.h" 10 #include "base/format_macros.h"
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 NOTREACHED(); 122 NOTREACHED();
123 SyncTaskManager::NotifyTaskDone(token.Pass(), SYNC_STATUS_FAILED); 123 SyncTaskManager::NotifyTaskDone(token.Pass(), SYNC_STATUS_FAILED);
124 return; 124 return;
125 } 125 }
126 126
127 dirty_tracker_ = make_scoped_ptr(new FileTracker); 127 dirty_tracker_ = make_scoped_ptr(new FileTracker);
128 if (metadata_database()->GetNormalPriorityDirtyTracker( 128 if (metadata_database()->GetNormalPriorityDirtyTracker(
129 dirty_tracker_.get())) { 129 dirty_tracker_.get())) {
130 token->RecordLog(base::StringPrintf( 130 token->RecordLog(base::StringPrintf(
131 "Start: tracker_id=%" PRId64, dirty_tracker_->tracker_id())); 131 "Start: tracker_id=%" PRId64, dirty_tracker_->tracker_id()));
132 metadata_database()->LowerTrackerPriority(dirty_tracker_->tracker_id());
132 ResolveRemoteChange(token.Pass()); 133 ResolveRemoteChange(token.Pass());
133 return; 134 return;
134 } 135 }
135 136
136 token->RecordLog("Nothing to do."); 137 token->RecordLog("Nothing to do.");
137 SyncTaskManager::NotifyTaskDone(token.Pass(), SYNC_STATUS_NO_CHANGE_TO_SYNC); 138 SyncTaskManager::NotifyTaskDone(token.Pass(), SYNC_STATUS_NO_CHANGE_TO_SYNC);
138 } 139 }
139 140
140 void RemoteToLocalSyncer::ResolveRemoteChange(scoped_ptr<SyncTaskToken> token) { 141 void RemoteToLocalSyncer::ResolveRemoteChange(scoped_ptr<SyncTaskToken> token) {
141 DCHECK(dirty_tracker_); 142 DCHECK(dirty_tracker_);
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 } 338 }
338 339
339 void RemoteToLocalSyncer::DidUpdateDatabaseForRemoteMetadata( 340 void RemoteToLocalSyncer::DidUpdateDatabaseForRemoteMetadata(
340 scoped_ptr<SyncTaskToken> token, 341 scoped_ptr<SyncTaskToken> token,
341 SyncStatusCode status) { 342 SyncStatusCode status) {
342 if (status != SYNC_STATUS_OK) { 343 if (status != SYNC_STATUS_OK) {
343 SyncCompleted(token.Pass(), status); 344 SyncCompleted(token.Pass(), status);
344 return; 345 return;
345 } 346 }
346 347
348 metadata_database()->PromoteDemotedTracker(dirty_tracker_->tracker_id());
349
347 // Do not update |dirty_tracker_|. 350 // Do not update |dirty_tracker_|.
348 SyncCompleted(token.Pass(), SYNC_STATUS_RETRY); 351 SyncCompleted(token.Pass(), SYNC_STATUS_RETRY);
349 } 352 }
350 353
351 void RemoteToLocalSyncer::DidPrepareForAddOrUpdateFile( 354 void RemoteToLocalSyncer::DidPrepareForAddOrUpdateFile(
352 scoped_ptr<SyncTaskToken> token, 355 scoped_ptr<SyncTaskToken> token,
353 SyncStatusCode status) { 356 SyncStatusCode status) {
354 if (status != SYNC_STATUS_OK) { 357 if (status != SYNC_STATUS_OK) {
355 SyncCompleted(token.Pass(), status); 358 SyncCompleted(token.Pass(), status);
356 return; 359 return;
(...skipping 19 matching lines...) Expand all
376 sync_action_ = SYNC_ACTION_UPDATED; 379 sync_action_ = SYNC_ACTION_UPDATED;
377 // Download the file and overwrite the existing local file. 380 // Download the file and overwrite the existing local file.
378 DownloadFile(token.Pass()); 381 DownloadFile(token.Pass());
379 return; 382 return;
380 } 383 }
381 384
382 DCHECK_EQ(SYNC_FILE_TYPE_DIRECTORY, local_metadata_->file_type); 385 DCHECK_EQ(SYNC_FILE_TYPE_DIRECTORY, local_metadata_->file_type);
383 386
384 // Got a remote regular file modification for existing local folder. 387 // Got a remote regular file modification for existing local folder.
385 // Our policy prioritize folders in this case. 388 // Our policy prioritize folders in this case.
386 // Lower the priority of the tracker to prevent repeated remote sync to the 389 // Let local-to-remote sync phase process this change.
387 // same tracker, and let local-to-remote sync phase process this change.
388 metadata_database()->LowerTrackerPriority(dirty_tracker_->tracker_id());
389 remote_change_processor()->RecordFakeLocalChange( 390 remote_change_processor()->RecordFakeLocalChange(
390 url_, 391 url_,
391 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, 392 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE,
392 local_metadata_->file_type), 393 local_metadata_->file_type),
393 SyncCompletedCallback(token.Pass())); 394 SyncCompletedCallback(token.Pass()));
394 return; 395 return;
395 } 396 }
396 397
397 DCHECK(local_changes_->back().IsAddOrUpdate()); 398 DCHECK(local_changes_->back().IsAddOrUpdate());
398 // Conflict case. 399 // Conflict case.
399 // Do nothing for the change now, and handle this in LocalToRemoteSync phase. 400 // Do nothing for the change now, and handle this in LocalToRemoteSync phase.
400
401 // Lower the priority of the tracker to prevent repeated remote sync to the
402 // same tracker.
403 metadata_database()->LowerTrackerPriority(dirty_tracker_->tracker_id());
404 SyncCompleted(token.Pass(), SYNC_STATUS_RETRY); 401 SyncCompleted(token.Pass(), SYNC_STATUS_RETRY);
405 } 402 }
406 403
407 void RemoteToLocalSyncer::HandleFolderUpdate( 404 void RemoteToLocalSyncer::HandleFolderUpdate(
408 scoped_ptr<SyncTaskToken> token) { 405 scoped_ptr<SyncTaskToken> token) {
409 DCHECK(dirty_tracker_); 406 DCHECK(dirty_tracker_);
410 DCHECK(dirty_tracker_->active()); 407 DCHECK(dirty_tracker_->active());
411 DCHECK(!HasDisabledAppRoot(metadata_database(), *dirty_tracker_)); 408 DCHECK(!HasDisabledAppRoot(metadata_database(), *dirty_tracker_));
412 409
413 DCHECK(remote_metadata_); 410 DCHECK(remote_metadata_);
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 718
722 base::FilePath path = file.path(); 719 base::FilePath path = file.path();
723 const std::string md5 = drive::util::GetMd5Digest(path); 720 const std::string md5 = drive::util::GetMd5Digest(path);
724 if (md5.empty()) { 721 if (md5.empty()) {
725 SyncCompleted(token.Pass(), SYNC_FILE_ERROR_NOT_FOUND); 722 SyncCompleted(token.Pass(), SYNC_FILE_ERROR_NOT_FOUND);
726 return; 723 return;
727 } 724 }
728 725
729 if (md5 != remote_metadata_->details().md5()) { 726 if (md5 != remote_metadata_->details().md5()) {
730 // File has been modified since last metadata retrieval. 727 // File has been modified since last metadata retrieval.
731
732 // Lower the priority of the tracker to prevent repeated remote sync to the
733 // same tracker.
734 metadata_database()->LowerTrackerPriority(dirty_tracker_->tracker_id());
735 SyncCompleted(token.Pass(), SYNC_STATUS_RETRY); 728 SyncCompleted(token.Pass(), SYNC_STATUS_RETRY);
736 return; 729 return;
737 } 730 }
738 731
739 remote_change_processor()->ApplyRemoteChange( 732 remote_change_processor()->ApplyRemoteChange(
740 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, SYNC_FILE_TYPE_FILE), 733 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, SYNC_FILE_TYPE_FILE),
741 path, url_, 734 path, url_,
742 base::Bind(&RemoteToLocalSyncer::DidApplyDownload, 735 base::Bind(&RemoteToLocalSyncer::DidApplyDownload,
743 weak_ptr_factory_.GetWeakPtr(), 736 weak_ptr_factory_.GetWeakPtr(),
744 base::Passed(&token), base::Passed(&file))); 737 base::Passed(&token), base::Passed(&file)));
745 } 738 }
746 739
747 void RemoteToLocalSyncer::DidApplyDownload(scoped_ptr<SyncTaskToken> token, 740 void RemoteToLocalSyncer::DidApplyDownload(scoped_ptr<SyncTaskToken> token,
748 webkit_blob::ScopedFile, 741 webkit_blob::ScopedFile,
749 SyncStatusCode status) { 742 SyncStatusCode status) {
750 if (status != SYNC_STATUS_OK)
751 metadata_database()->LowerTrackerPriority(dirty_tracker_->tracker_id());
752 SyncCompleted(token.Pass(), status); 743 SyncCompleted(token.Pass(), status);
753 } 744 }
754 745
755 void RemoteToLocalSyncer::CreateFolder(scoped_ptr<SyncTaskToken> token) { 746 void RemoteToLocalSyncer::CreateFolder(scoped_ptr<SyncTaskToken> token) {
756 remote_change_processor()->ApplyRemoteChange( 747 remote_change_processor()->ApplyRemoteChange(
757 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE, 748 FileChange(FileChange::FILE_CHANGE_ADD_OR_UPDATE,
758 SYNC_FILE_TYPE_DIRECTORY), 749 SYNC_FILE_TYPE_DIRECTORY),
759 base::FilePath(), url_, 750 base::FilePath(), url_,
760 SyncCompletedCallback(token.Pass())); 751 SyncCompletedCallback(token.Pass()));
761 } 752 }
(...skipping 13 matching lines...) Expand all
775 766
776 SyncStatusCallback RemoteToLocalSyncer::SyncCompletedCallback( 767 SyncStatusCallback RemoteToLocalSyncer::SyncCompletedCallback(
777 scoped_ptr<SyncTaskToken> token) { 768 scoped_ptr<SyncTaskToken> token) {
778 return base::Bind(&RemoteToLocalSyncer::SyncCompleted, 769 return base::Bind(&RemoteToLocalSyncer::SyncCompleted,
779 weak_ptr_factory_.GetWeakPtr(), 770 weak_ptr_factory_.GetWeakPtr(),
780 base::Passed(&token)); 771 base::Passed(&token));
781 } 772 }
782 773
783 } // namespace drive_backend 774 } // namespace drive_backend
784 } // namespace sync_file_system 775 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698