diff options
author | 2020-03-10 15:49:29 -0700 | |
---|---|---|
committer | 2020-03-11 09:22:34 -0700 | |
commit | bf1c0634819a4f3b2cba9c9227d9af2ff027b4c2 (patch) | |
tree | 8e3572040f04d4d681ae72525f4f97f8b6177010 /services/incremental/IncrementalService.cpp | |
parent | 672e0e80ba0f33286d75f98fe4ffae45f5671a66 (diff) |
DataLoader lifecycle cleanup.
Remove 5 second delay in startLoading()
Remove sysprops: incremental.skip_loader
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest
Bug: b/151178179 b/136132412
Change-Id: Ibbe921c444b7e11fe5482662ca791bd8dfeb8324
Diffstat (limited to 'services/incremental/IncrementalService.cpp')
-rw-r--r-- | services/incremental/IncrementalService.cpp | 64 |
1 files changed, 37 insertions, 27 deletions
diff --git a/services/incremental/IncrementalService.cpp b/services/incremental/IncrementalService.cpp index 2426e8f29dca..9c9fe8c67de8 100644 --- a/services/incremental/IncrementalService.cpp +++ b/services/incremental/IncrementalService.cpp @@ -917,19 +917,23 @@ std::vector<std::string> IncrementalService::listFiles(StorageId storage) const } bool IncrementalService::startLoading(StorageId storage) const { - const auto ifs = getIfs(storage); - if (!ifs) { - return false; - } - std::unique_lock l(ifs->lock); - if (ifs->dataLoaderStatus != IDataLoaderStatusListener::DATA_LOADER_CREATED) { - if (ifs->dataLoaderReady.wait_for(l, Seconds(5)) == std::cv_status::timeout) { - LOG(ERROR) << "Timeout waiting for data loader to be ready"; + { + std::unique_lock l(mLock); + const auto& ifs = getIfsLocked(storage); + if (!ifs) { return false; } + if (ifs->dataLoaderStatus != IDataLoaderStatusListener::DATA_LOADER_CREATED) { + ifs->dataLoaderStartRequested = true; + return true; + } } + return startDataLoader(storage); +} + +bool IncrementalService::startDataLoader(MountId mountId) const { sp<IDataLoader> dataloader; - auto status = mDataLoaderManager->getDataLoader(ifs->mountId, &dataloader); + auto status = mDataLoaderManager->getDataLoader(mountId, &dataloader); if (!status.isOk()) { return false; } @@ -1065,15 +1069,9 @@ bool IncrementalService::prepareDataLoader(IncrementalService::IncFsMount& ifs, } return true; // eventually... } - if (base::GetBoolProperty("incremental.skip_loader", false)) { - LOG(INFO) << "Skipped data loader because of incremental.skip_loader property"; - std::unique_lock l(ifs.lock); - ifs.savedDataLoaderParams.reset(); - return true; - } std::unique_lock l(ifs.lock); - if (ifs.dataLoaderStatus == IDataLoaderStatusListener::DATA_LOADER_CREATED) { + if (ifs.dataLoaderStatus != -1) { LOG(INFO) << "Skipped data loader preparation because it already exists"; return true; } @@ -1226,30 +1224,42 @@ binder::Status IncrementalService::IncrementalDataLoaderListener::onStatusChange externalListener->onStatusChanged(mountId, newStatus); } - std::unique_lock l(incrementalService.mLock); - const auto& ifs = incrementalService.getIfsLocked(mountId); - if (!ifs) { - LOG(WARNING) << "Received data loader status " << int(newStatus) << " for unknown mount " - << mountId; - return binder::Status::ok(); + bool startRequested = false; + { + std::unique_lock l(incrementalService.mLock); + const auto& ifs = incrementalService.getIfsLocked(mountId); + if (!ifs) { + LOG(WARNING) << "Received data loader status " << int(newStatus) << " for unknown mount " + << mountId; + return binder::Status::ok(); + } + ifs->dataLoaderStatus = newStatus; + + if (newStatus == IDataLoaderStatusListener::DATA_LOADER_DESTROYED) { + ifs->dataLoaderStatus = IDataLoaderStatusListener::DATA_LOADER_STOPPED; + incrementalService.deleteStorageLocked(*ifs, std::move(l)); + return binder::Status::ok(); + } + + startRequested = ifs->dataLoaderStartRequested; } - ifs->dataLoaderStatus = newStatus; + switch (newStatus) { case IDataLoaderStatusListener::DATA_LOADER_NO_CONNECTION: { // TODO(b/150411019): handle data loader connection loss break; } case IDataLoaderStatusListener::DATA_LOADER_CONNECTION_OK: { - ifs->dataLoaderStatus = IDataLoaderStatusListener::DATA_LOADER_STARTED; + // TODO(b/150411019): handle data loader connection loss break; } case IDataLoaderStatusListener::DATA_LOADER_CREATED: { - ifs->dataLoaderReady.notify_one(); + if (startRequested) { + incrementalService.startDataLoader(mountId); + } break; } case IDataLoaderStatusListener::DATA_LOADER_DESTROYED: { - ifs->dataLoaderStatus = IDataLoaderStatusListener::DATA_LOADER_STOPPED; - incrementalService.deleteStorageLocked(*ifs, std::move(l)); break; } case IDataLoaderStatusListener::DATA_LOADER_STARTED: { |