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

Side by Side Diff: chrome/browser/sync_file_system/local/local_file_sync_context.cc

Issue 390283002: [SyncFS] Demote local file changes before local-to-remote sync (3/3) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: debug printfs 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
« no previous file with comments | « chrome/browser/sync_file_system/local/local_file_sync_context.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/local/local_file_sync_context.h" 5 #include "chrome/browser/sync_file_system/local/local_file_sync_context.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/single_thread_task_runner.h" 10 #include "base/single_thread_task_runner.h"
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 DCHECK(backend); 166 DCHECK(backend);
167 DCHECK(backend->change_tracker()); 167 DCHECK(backend->change_tracker());
168 168
169 if (sync_finish_status == SYNC_STATUS_OK || 169 if (sync_finish_status == SYNC_STATUS_OK ||
170 sync_finish_status == SYNC_STATUS_HAS_CONFLICT) { 170 sync_finish_status == SYNC_STATUS_HAS_CONFLICT) {
171 // Commit the in-memory mirror change. 171 // Commit the in-memory mirror change.
172 backend->change_tracker()->ResetToMirrorAndCommitChangesForURL(url); 172 backend->change_tracker()->ResetToMirrorAndCommitChangesForURL(url);
173 } else { 173 } else {
174 // Abort in-memory mirror change. 174 // Abort in-memory mirror change.
175 backend->change_tracker()->RemoveMirrorAndCommitChangesForURL(url); 175 backend->change_tracker()->RemoveMirrorAndCommitChangesForURL(url);
176 if (sync_finish_status == SYNC_STATUS_FILE_BUSY)
177 backend->change_tracker()->DemoteChangesForURL(url);
178 } 176 }
179 177
180 // We've been keeping it in writing mode, so clear the writing counter 178 // We've been keeping it in writing mode, so clear the writing counter
181 // to unblock sync activities. 179 // to unblock sync activities.
182 io_task_runner_->PostTask( 180 io_task_runner_->PostTask(
183 FROM_HERE, base::Bind( 181 FROM_HERE, base::Bind(
184 &LocalFileSyncContext::FinalizeSnapshotSyncOnIOThread, this, url)); 182 &LocalFileSyncContext::FinalizeSnapshotSyncOnIOThread, this, url));
185 183
186 // Call the completion callback on UI thread. 184 // Call the completion callback on UI thread.
187 ui_task_runner_->PostTask(FROM_HERE, done_callback); 185 ui_task_runner_->PostTask(FROM_HERE, done_callback);
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 DCHECK(origins_with_changes); 688 DCHECK(origins_with_changes);
691 tracker_ptr->reset(new LocalFileChangeTracker( 689 tracker_ptr->reset(new LocalFileChangeTracker(
692 file_system_context->partition_path(), 690 file_system_context->partition_path(),
693 env_override_, 691 env_override_,
694 file_system_context->default_file_task_runner())); 692 file_system_context->default_file_task_runner()));
695 const SyncStatusCode status = (*tracker_ptr)->Initialize(file_system_context); 693 const SyncStatusCode status = (*tracker_ptr)->Initialize(file_system_context);
696 if (status != SYNC_STATUS_OK) 694 if (status != SYNC_STATUS_OK)
697 return status; 695 return status;
698 696
699 // Get all origins that have pending changes. 697 // Get all origins that have pending changes.
700 std::deque<FileSystemURL> urls; 698 FileSystemURLQueue urls;
701 (*tracker_ptr)->GetNextChangedURLs(&urls, 0); 699 (*tracker_ptr)->GetNextChangedURLs(&urls, 0);
702 for (std::deque<FileSystemURL>::iterator iter = urls.begin(); 700 for (FileSystemURLQueue::iterator iter = urls.begin();
703 iter != urls.end(); ++iter) { 701 iter != urls.end(); ++iter) {
704 origins_with_changes->insert(iter->origin()); 702 origins_with_changes->insert(iter->origin());
705 } 703 }
706 704
707 // Creates snapshot directory. 705 // Creates snapshot directory.
708 base::CreateDirectory(local_base_path_.Append(kSnapshotDir)); 706 base::CreateDirectory(local_base_path_.Append(kSnapshotDir));
709 707
710 return status; 708 return status;
711 } 709 }
712 710
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
778 DCHECK(file_system_context); 776 DCHECK(file_system_context);
779 DCHECK(file_system_context->default_file_task_runner()-> 777 DCHECK(file_system_context->default_file_task_runner()->
780 RunsTasksOnCurrentThread()); 778 RunsTasksOnCurrentThread());
781 SyncFileSystemBackend* backend = 779 SyncFileSystemBackend* backend =
782 SyncFileSystemBackend::GetBackend(file_system_context); 780 SyncFileSystemBackend::GetBackend(file_system_context);
783 DCHECK(backend); 781 DCHECK(backend);
784 DCHECK(backend->change_tracker()); 782 DCHECK(backend->change_tracker());
785 scoped_ptr<FileSystemURLQueue> urls(new FileSystemURLQueue); 783 scoped_ptr<FileSystemURLQueue> urls(new FileSystemURLQueue);
786 backend->change_tracker()->GetNextChangedURLs( 784 backend->change_tracker()->GetNextChangedURLs(
787 urls.get(), kMaxURLsToFetchForLocalSync); 785 urls.get(), kMaxURLsToFetchForLocalSync);
786 for (FileSystemURLQueue::iterator iter = urls->begin();
787 iter != urls->end(); ++iter)
788 backend->change_tracker()->DemoteChangesForURL(*iter);
789
788 return urls.Pass(); 790 return urls.Pass();
789 } 791 }
790 792
791 void LocalFileSyncContext::TryPrepareForLocalSync( 793 void LocalFileSyncContext::TryPrepareForLocalSync(
792 FileSystemContext* file_system_context, 794 FileSystemContext* file_system_context,
793 const LocalFileSyncInfoCallback& callback, 795 const LocalFileSyncInfoCallback& callback,
794 scoped_ptr<FileSystemURLQueue> urls) { 796 scoped_ptr<FileSystemURLQueue> urls) {
795 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 797 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
796 DCHECK(urls); 798 DCHECK(urls);
797 799
(...skipping 21 matching lines...) Expand all
819 821
820 void LocalFileSyncContext::DidTryPrepareForLocalSync( 822 void LocalFileSyncContext::DidTryPrepareForLocalSync(
821 FileSystemContext* file_system_context, 823 FileSystemContext* file_system_context,
822 scoped_ptr<FileSystemURLQueue> remaining_urls, 824 scoped_ptr<FileSystemURLQueue> remaining_urls,
823 const LocalFileSyncInfoCallback& callback, 825 const LocalFileSyncInfoCallback& callback,
824 SyncStatusCode status, 826 SyncStatusCode status,
825 const LocalFileSyncInfo& sync_file_info, 827 const LocalFileSyncInfo& sync_file_info,
826 webkit_blob::ScopedFile snapshot) { 828 webkit_blob::ScopedFile snapshot) {
827 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 829 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
828 if (status != SYNC_STATUS_FILE_BUSY) { 830 if (status != SYNC_STATUS_FILE_BUSY) {
831 PromoteDemotedChangesForURLs(file_system_context,
832 remaining_urls.Pass());
829 callback.Run(status, sync_file_info, snapshot.Pass()); 833 callback.Run(status, sync_file_info, snapshot.Pass());
830 return; 834 return;
831 } 835 }
836
837 PromoteDemotedChangesForURL(file_system_context, sync_file_info.url);
838
832 // Recursively call TryPrepareForLocalSync with remaining_urls. 839 // Recursively call TryPrepareForLocalSync with remaining_urls.
833 TryPrepareForLocalSync(file_system_context, callback, remaining_urls.Pass()); 840 TryPrepareForLocalSync(file_system_context, callback, remaining_urls.Pass());
834 } 841 }
835 842
843 void LocalFileSyncContext::PromoteDemotedChangesForURL(
844 FileSystemContext* file_system_context,
845 const FileSystemURL& url) {
846 DCHECK(file_system_context);
847 if (!file_system_context->default_file_task_runner()->
848 RunsTasksOnCurrentThread()) {
849 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
850 if (shutdown_on_ui_)
851 return;
852 file_system_context->default_file_task_runner()->PostTask(
853 FROM_HERE,
854 base::Bind(&LocalFileSyncContext::PromoteDemotedChangesForURL,
855 this, make_scoped_refptr(file_system_context), url));
856 return;
857 }
858
859 SyncFileSystemBackend* backend =
860 SyncFileSystemBackend::GetBackend(file_system_context);
861 DCHECK(backend);
862 DCHECK(backend->change_tracker());
863 backend->change_tracker()->PromoteDemotedChangesForURL(url);
864 }
865
866 void LocalFileSyncContext::PromoteDemotedChangesForURLs(
867 FileSystemContext* file_system_context,
868 scoped_ptr<FileSystemURLQueue> urls) {
869 DCHECK(file_system_context);
870 if (!file_system_context->default_file_task_runner()->
871 RunsTasksOnCurrentThread()) {
872 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
873 if (shutdown_on_ui_)
874 return;
875 file_system_context->default_file_task_runner()->PostTask(
876 FROM_HERE,
877 base::Bind(&LocalFileSyncContext::PromoteDemotedChangesForURLs,
878 this, make_scoped_refptr(file_system_context),
879 base::Passed(&urls)));
880 return;
881 }
882
883 for (FileSystemURLQueue::iterator iter = urls->begin();
884 iter != urls->end(); ++iter)
885 PromoteDemotedChangesForURL(file_system_context, *iter);
886 }
887
836 void LocalFileSyncContext::DidGetWritingStatusForSync( 888 void LocalFileSyncContext::DidGetWritingStatusForSync(
837 FileSystemContext* file_system_context, 889 FileSystemContext* file_system_context,
838 SyncStatusCode status, 890 SyncStatusCode status,
839 const FileSystemURL& url, 891 const FileSystemURL& url,
840 SyncMode sync_mode, 892 SyncMode sync_mode,
841 const LocalFileSyncInfoCallback& callback) { 893 const LocalFileSyncInfoCallback& callback) {
842 // This gets called on UI thread and relays the task on FILE thread. 894 // This gets called on UI thread and relays the task on FILE thread.
843 DCHECK(file_system_context); 895 DCHECK(file_system_context);
844 if (!file_system_context->default_file_task_runner()-> 896 if (!file_system_context->default_file_task_runner()->
845 RunsTasksOnCurrentThread()) { 897 RunsTasksOnCurrentThread()) {
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
1009 return; 1061 return;
1010 } 1062 }
1011 1063
1012 FileSystemURL url_for_sync = CreateSyncableFileSystemURLForSync( 1064 FileSystemURL url_for_sync = CreateSyncableFileSystemURLForSync(
1013 file_system_context, dest_url); 1065 file_system_context, dest_url);
1014 file_system_context->operation_runner()->CopyInForeignFile( 1066 file_system_context->operation_runner()->CopyInForeignFile(
1015 local_path, url_for_sync, callback); 1067 local_path, url_for_sync, callback);
1016 } 1068 }
1017 1069
1018 } // namespace sync_file_system 1070 } // namespace sync_file_system
OLDNEW
« no previous file with comments | « chrome/browser/sync_file_system/local/local_file_sync_context.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698