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

Side by Side Diff: chrome/browser/sync_file_system/drive_file_sync_service.cc

Issue 15023022: Add to be fetched files instead of DriveMetadataStore.batch_sync_origins_ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: tzik review #2 Created 7 years, 7 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_file_system/drive_file_sync_service.h" 5 #include "chrome/browser/sync_file_system/drive_file_sync_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 callback.Run(status); 428 callback.Run(status);
429 return; 429 return;
430 } 430 }
431 431
432 DCHECK(pending_batch_sync_origins_.empty()); 432 DCHECK(pending_batch_sync_origins_.empty());
433 433
434 UpdateRegisteredOrigins(); 434 UpdateRegisteredOrigins();
435 435
436 largest_fetched_changestamp_ = metadata_store_->GetLargestChangeStamp(); 436 largest_fetched_changestamp_ = metadata_store_->GetLargestChangeStamp();
437 437
438 // Mark all the batch sync origins as 'pending' so that we can start
439 // batch sync when we're ready.
440 for (std::map<GURL, std::string>::const_iterator itr =
441 metadata_store_->batch_sync_origins().begin();
442 itr != metadata_store_->batch_sync_origins().end();
443 ++itr) {
444 pending_batch_sync_origins_.insert(itr->first);
445 }
446
447 DriveMetadataStore::URLAndDriveMetadataList to_be_fetched_files; 438 DriveMetadataStore::URLAndDriveMetadataList to_be_fetched_files;
448 status = metadata_store_->GetToBeFetchedFiles(&to_be_fetched_files); 439 status = metadata_store_->GetToBeFetchedFiles(&to_be_fetched_files);
449 DCHECK_EQ(SYNC_STATUS_OK, status); 440 DCHECK_EQ(SYNC_STATUS_OK, status);
450 typedef DriveMetadataStore::URLAndDriveMetadataList::const_iterator iterator; 441 typedef DriveMetadataStore::URLAndDriveMetadataList::const_iterator iterator;
451 for (iterator itr = to_be_fetched_files.begin(); 442 for (iterator itr = to_be_fetched_files.begin();
452 itr != to_be_fetched_files.end(); ++itr) { 443 itr != to_be_fetched_files.end(); ++itr) {
453 const FileSystemURL& url = itr->first; 444 const FileSystemURL& url = itr->first;
454 const DriveMetadata& metadata = itr->second; 445 const DriveMetadata& metadata = itr->second;
455 const std::string& resource_id = metadata.resource_id(); 446 const std::string& resource_id = metadata.resource_id();
456 447
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 543
553 void DriveFileSyncService::DoEnableOriginForTrackingChanges( 544 void DriveFileSyncService::DoEnableOriginForTrackingChanges(
554 const GURL& origin, 545 const GURL& origin,
555 const SyncStatusCallback& callback) { 546 const SyncStatusCallback& callback) {
556 if (!metadata_store_->IsOriginDisabled(origin)) { 547 if (!metadata_store_->IsOriginDisabled(origin)) {
557 callback.Run(SYNC_STATUS_OK); 548 callback.Run(SYNC_STATUS_OK);
558 return; 549 return;
559 } 550 }
560 551
561 metadata_store_->EnableOrigin(origin, callback); 552 metadata_store_->EnableOrigin(origin, callback);
562 pending_batch_sync_origins_.insert(origin); 553 pending_batch_sync_origins_.insert(std::make_pair(
554 origin, metadata_store_->disabled_origins().find(origin)->second));
tzik 2013/05/17 09:36:56 can this be disabled_origins()[origin] for better
calvinlo 2013/05/17 10:02:36 Done. Sorry, I forgot that the map types match so
563 } 555 }
564 556
565 void DriveFileSyncService::DoDisableOriginForTrackingChanges( 557 void DriveFileSyncService::DoDisableOriginForTrackingChanges(
566 const GURL& origin, 558 const GURL& origin,
567 const SyncStatusCallback& callback) { 559 const SyncStatusCallback& callback) {
568 if (!metadata_store_->IsBatchSyncOrigin(origin) && 560 if (!metadata_store_->IsBatchSyncOrigin(origin) &&
569 !metadata_store_->IsIncrementalSyncOrigin(origin)) { 561 !metadata_store_->IsIncrementalSyncOrigin(origin)) {
570 callback.Run(SYNC_STATUS_OK); 562 callback.Run(SYNC_STATUS_OK);
571 return; 563 return;
572 } 564 }
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 // Extension has been uninstalled. 687 // Extension has been uninstalled.
696 UninstallOrigin(origin, base::Bind(&EmptyStatusCallback)); 688 UninstallOrigin(origin, base::Bind(&EmptyStatusCallback));
697 } else if ((metadata_store_->IsBatchSyncOrigin(origin) || 689 } else if ((metadata_store_->IsBatchSyncOrigin(origin) ||
698 metadata_store_->IsIncrementalSyncOrigin(origin)) && 690 metadata_store_->IsIncrementalSyncOrigin(origin)) &&
699 !extension_service->IsExtensionEnabled(extension_id)) { 691 !extension_service->IsExtensionEnabled(extension_id)) {
700 // Extension has been disabled. 692 // Extension has been disabled.
701 metadata_store_->DisableOrigin(origin, base::Bind(&EmptyStatusCallback)); 693 metadata_store_->DisableOrigin(origin, base::Bind(&EmptyStatusCallback));
702 } else if (metadata_store_->IsOriginDisabled(origin) && 694 } else if (metadata_store_->IsOriginDisabled(origin) &&
703 extension_service->IsExtensionEnabled(extension_id)) { 695 extension_service->IsExtensionEnabled(extension_id)) {
704 // Extension has been re-enabled. 696 // Extension has been re-enabled.
697 std::string resource_id = metadata_store_->disabled_origins().find(
698 origin)->second;
705 metadata_store_->EnableOrigin(origin, base::Bind(&EmptyStatusCallback)); 699 metadata_store_->EnableOrigin(origin, base::Bind(&EmptyStatusCallback));
706 pending_batch_sync_origins_.insert(origin); 700 pending_batch_sync_origins_.insert(std::make_pair(origin, resource_id));
tzik 2013/05/17 09:36:56 ditto
calvinlo 2013/05/17 10:02:36 Done.
707 } 701 }
708 } 702 }
709 } 703 }
710 704
711 void DriveFileSyncService::StartBatchSync( 705 void DriveFileSyncService::StartBatchSync(
712 const SyncStatusCallback& callback) { 706 const SyncStatusCallback& callback) {
713 DCHECK(GetCurrentState() == REMOTE_SERVICE_OK || may_have_unfetched_changes_); 707 DCHECK(GetCurrentState() == REMOTE_SERVICE_OK || may_have_unfetched_changes_);
708 DCHECK(!pending_batch_sync_origins_.empty());
714 709
715 if (pending_batch_sync_origins_.empty()) { 710 GURL origin = pending_batch_sync_origins_.begin()->first;
716 callback.Run(SYNC_STATUS_OK); 711 std::string resource_id = pending_batch_sync_origins_.find(origin)->second;
tzik 2013/05/17 09:36:56 can be pending_batch_sync_origins_.begin()->second
calvinlo 2013/05/17 10:02:36 Done.
717 return; 712 DCHECK(!resource_id.empty());
718 }
719
720 GURL origin = *pending_batch_sync_origins_.begin();
721 pending_batch_sync_origins_.erase(pending_batch_sync_origins_.begin()); 713 pending_batch_sync_origins_.erase(pending_batch_sync_origins_.begin());
722 std::string resource_id = metadata_store_->GetResourceIdForOrigin(origin);
723 DCHECK(!resource_id.empty());
724 714
725 DCHECK(!metadata_store_->IsOriginDisabled(origin)); 715 DCHECK(!metadata_store_->IsOriginDisabled(origin));
726 716
727 DVLOG(1) << "Start batch sync for:" << origin.spec(); 717 DVLOG(1) << "Start batch sync for:" << origin.spec();
728 718
729 api_util_->GetLargestChangeStamp( 719 api_util_->GetLargestChangeStamp(
730 base::Bind(&DriveFileSyncService::DidGetLargestChangeStampForBatchSync, 720 base::Bind(&DriveFileSyncService::DidGetLargestChangeStampForBatchSync,
731 AsWeakPtr(), 721 AsWeakPtr(),
732 callback, 722 callback,
733 origin, 723 origin,
(...skipping 17 matching lines...) Expand all
751 AsWeakPtr(), origin, callback)); 741 AsWeakPtr(), origin, callback));
752 return; 742 return;
753 } 743 }
754 744
755 if (status != SYNC_STATUS_OK) { 745 if (status != SYNC_STATUS_OK) {
756 callback.Run(status); 746 callback.Run(status);
757 return; 747 return;
758 } 748 }
759 749
760 // Add this origin to batch sync origin if it hasn't been already. 750 // Add this origin to batch sync origin if it hasn't been already.
751 // TODO(calvinlo): Added files to file metadata mapping, this can be removed
752 // next when batch_sync_origins is removed from DriveMetadataStore.
761 if (!metadata_store_->IsKnownOrigin(origin)) { 753 if (!metadata_store_->IsKnownOrigin(origin)) {
762 metadata_store_->AddBatchSyncOrigin(origin, resource_id); 754 pending_batch_sync_origins_.insert(std::make_pair(origin, resource_id));
763 pending_batch_sync_origins_.insert(origin);
764 } 755 }
765 756
766 callback.Run(SYNC_STATUS_OK); 757 callback.Run(SYNC_STATUS_OK);
767 } 758 }
768 759
769 void DriveFileSyncService::DidUninstallOrigin( 760 void DriveFileSyncService::DidUninstallOrigin(
770 const GURL& origin, 761 const GURL& origin,
771 const SyncStatusCallback& callback, 762 const SyncStatusCallback& callback,
772 google_apis::GDataErrorCode error) { 763 google_apis::GDataErrorCode error) {
773 SyncStatusCode status = GDataErrorCodeToSyncStatusCodeWrapper(error); 764 SyncStatusCode status = GDataErrorCodeToSyncStatusCodeWrapper(error);
774 if (status != SYNC_STATUS_OK) { 765 if (status != SYNC_STATUS_OK) {
775 callback.Run(status); 766 callback.Run(status);
776 return; 767 return;
777 } 768 }
778 769
779 // Origin directory has been removed so it's now safe to remove the origin 770 // Origin directory has been removed so it's now safe to remove the origin
780 // from the metadata store. 771 // from the metadata store.
781 DoUnregisterOriginForTrackingChanges(origin, callback); 772 DoUnregisterOriginForTrackingChanges(origin, callback);
782 } 773 }
783 774
784 void DriveFileSyncService::DidGetLargestChangeStampForBatchSync( 775 void DriveFileSyncService::DidGetLargestChangeStampForBatchSync(
785 const SyncStatusCallback& callback, 776 const SyncStatusCallback& callback,
786 const GURL& origin, 777 const GURL& origin,
787 const std::string& resource_id, 778 const std::string& resource_id,
788 google_apis::GDataErrorCode error, 779 google_apis::GDataErrorCode error,
789 int64 largest_changestamp) { 780 int64 largest_changestamp) {
790 if (error != google_apis::HTTP_SUCCESS) { 781 if (error != google_apis::HTTP_SUCCESS) {
791 pending_batch_sync_origins_.insert(origin); 782 pending_batch_sync_origins_.insert(std::make_pair(origin, resource_id));
792 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error)); 783 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error));
793 return; 784 return;
794 } 785 }
795 786
796 if (metadata_store_->incremental_sync_origins().empty()) { 787 if (metadata_store_->incremental_sync_origins().empty()) {
797 largest_fetched_changestamp_ = largest_changestamp; 788 largest_fetched_changestamp_ = largest_changestamp;
798 metadata_store_->SetLargestChangeStamp( 789 metadata_store_->SetLargestChangeStamp(
799 largest_changestamp, 790 largest_changestamp,
800 base::Bind(&EmptyStatusCallback)); 791 base::Bind(&EmptyStatusCallback));
801 } 792 }
802 793
803 api_util_->ListFiles( 794 api_util_->ListFiles(
804 resource_id, 795 resource_id,
805 base::Bind(&DriveFileSyncService::DidGetDirectoryContentForBatchSync, 796 base::Bind(&DriveFileSyncService::DidGetDirectoryContentForBatchSync,
806 AsWeakPtr(), 797 AsWeakPtr(),
807 callback, 798 callback,
808 origin, 799 origin,
800 resource_id,
809 largest_changestamp)); 801 largest_changestamp));
810 } 802 }
811 803
812 void DriveFileSyncService::DidGetDirectoryContentForBatchSync( 804 void DriveFileSyncService::DidGetDirectoryContentForBatchSync(
813 const SyncStatusCallback& callback, 805 const SyncStatusCallback& callback,
814 const GURL& origin, 806 const GURL& origin,
807 const std::string& resource_id,
815 int64 largest_changestamp, 808 int64 largest_changestamp,
816 google_apis::GDataErrorCode error, 809 google_apis::GDataErrorCode error,
817 scoped_ptr<google_apis::ResourceList> feed) { 810 scoped_ptr<google_apis::ResourceList> feed) {
818 if (error != google_apis::HTTP_SUCCESS) { 811 if (error != google_apis::HTTP_SUCCESS) {
819 pending_batch_sync_origins_.insert(origin); 812 pending_batch_sync_origins_.insert(std::make_pair(origin, resource_id));
820 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error)); 813 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error));
821 return; 814 return;
822 } 815 }
823 816
824 typedef ScopedVector<google_apis::ResourceEntry>::const_iterator iterator; 817 typedef ScopedVector<google_apis::ResourceEntry>::const_iterator iterator;
825 for (iterator itr = feed->entries().begin(); 818 for (iterator itr = feed->entries().begin();
826 itr != feed->entries().end(); ++itr) { 819 itr != feed->entries().end(); ++itr) {
827 AppendRemoteChange(origin, **itr, largest_changestamp, 820 const google_apis::ResourceEntry& entry = **itr;
821 AppendRemoteChange(origin, entry, largest_changestamp,
828 RemoteChangeHandler::REMOTE_SYNC_TYPE_BATCH); 822 RemoteChangeHandler::REMOTE_SYNC_TYPE_BATCH);
823
824 // Save to be fetched file to DB for restore in case of crash.
825 DriveMetadata metadata;
826 metadata.set_resource_id(entry.resource_id());
827 metadata.set_md5_checksum(entry.file_md5());
828 metadata.set_conflicted(false);
829 metadata.set_to_be_fetched(true);
830
831 base::FilePath path = TitleToPath(entry.title());
832 fileapi::FileSystemURL url(CreateSyncableFileSystemURL(
833 origin, kServiceName, path));
834 metadata_store_->UpdateEntry(url, metadata,
835 base::Bind(&EmptyStatusCallback));
829 } 836 }
830 837
831 GURL next_feed_url; 838 GURL next_feed_url;
832 if (feed->GetNextFeedURL(&next_feed_url)) { 839 if (feed->GetNextFeedURL(&next_feed_url)) {
833 api_util_->ContinueListing( 840 api_util_->ContinueListing(
834 next_feed_url, 841 next_feed_url,
835 base::Bind(&DriveFileSyncService::DidGetDirectoryContentForBatchSync, 842 base::Bind(&DriveFileSyncService::DidGetDirectoryContentForBatchSync,
836 AsWeakPtr(), 843 AsWeakPtr(),
837 callback, 844 callback,
838 origin, 845 origin,
846 resource_id,
839 largest_changestamp)); 847 largest_changestamp));
840 return; 848 return;
841 } 849 }
842 850
843 // Move |origin| to the incremental sync origin set if the origin has no file. 851 // TODO(calvinlo): Eliminate batch_sync_origins so
844 if (metadata_store_->IsBatchSyncOrigin(origin) && 852 // MoveBatchSyncOriginToIncremental() happens directly.
845 !remote_change_handler_.HasChangesForOrigin(origin)) { 853 metadata_store_->AddBatchSyncOrigin(origin, resource_id);
846 metadata_store_->MoveBatchSyncOriginToIncremental(origin); 854 metadata_store_->MoveBatchSyncOriginToIncremental(origin);
847 }
848
849 may_have_unfetched_changes_ = true; 855 may_have_unfetched_changes_ = true;
850 callback.Run(SYNC_STATUS_OK); 856 callback.Run(SYNC_STATUS_OK);
851 } 857 }
852 858
853 void DriveFileSyncService::ApplyLocalChangeInternal( 859 void DriveFileSyncService::ApplyLocalChangeInternal(
854 scoped_ptr<ApplyLocalChangeParam> param, 860 scoped_ptr<ApplyLocalChangeParam> param,
855 SyncStatusCode status, 861 SyncStatusCode status,
856 const std::string& origin_resource_id) { 862 const std::string& origin_resource_id) {
857 if (status != SYNC_STATUS_OK) { 863 if (status != SYNC_STATUS_OK) {
858 param->callback.Run(status); 864 param->callback.Run(status);
(...skipping 1320 matching lines...) Expand 10 before | Expand all | Expand 10 after
2179 void DriveFileSyncService::DidEnsureOriginRoot( 2185 void DriveFileSyncService::DidEnsureOriginRoot(
2180 const GURL& origin, 2186 const GURL& origin,
2181 const ResourceIdCallback& callback, 2187 const ResourceIdCallback& callback,
2182 google_apis::GDataErrorCode error, 2188 google_apis::GDataErrorCode error,
2183 const std::string& resource_id) { 2189 const std::string& resource_id) {
2184 SyncStatusCode status = GDataErrorCodeToSyncStatusCodeWrapper(error); 2190 SyncStatusCode status = GDataErrorCodeToSyncStatusCodeWrapper(error);
2185 if (status == SYNC_STATUS_OK && 2191 if (status == SYNC_STATUS_OK &&
2186 metadata_store_->IsKnownOrigin(origin)) { 2192 metadata_store_->IsKnownOrigin(origin)) {
2187 metadata_store_->SetOriginRootDirectory(origin, resource_id); 2193 metadata_store_->SetOriginRootDirectory(origin, resource_id);
2188 if (metadata_store_->IsBatchSyncOrigin(origin)) 2194 if (metadata_store_->IsBatchSyncOrigin(origin))
2189 pending_batch_sync_origins_.insert(origin); 2195 pending_batch_sync_origins_.insert(std::make_pair(origin, resource_id));
2190 } 2196 }
2191 callback.Run(status, resource_id); 2197 callback.Run(status, resource_id);
2192 } 2198 }
2193 2199
2194 std::string DriveFileSyncService::sync_root_resource_id() { 2200 std::string DriveFileSyncService::sync_root_resource_id() {
2195 return metadata_store_->sync_root_directory(); 2201 return metadata_store_->sync_root_directory();
2196 } 2202 }
2197 2203
2198 } // namespace sync_file_system 2204 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698