Loading services/incremental/IncrementalService.cpp +37 −27 Original line number Diff line number Diff line Loading @@ -917,19 +917,23 @@ std::vector<std::string> IncrementalService::listFiles(StorageId storage) const } bool IncrementalService::startLoading(StorageId storage) const { const auto ifs = getIfs(storage); { std::unique_lock l(mLock); const auto& ifs = getIfsLocked(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"; return false; 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; } Loading Loading @@ -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; } Loading Loading @@ -1226,6 +1224,8 @@ binder::Status IncrementalService::IncrementalDataLoaderListener::onStatusChange externalListener->onStatusChanged(mountId, newStatus); } bool startRequested = false; { std::unique_lock l(incrementalService.mLock); const auto& ifs = incrementalService.getIfsLocked(mountId); if (!ifs) { Loading @@ -1234,22 +1234,32 @@ binder::Status IncrementalService::IncrementalDataLoaderListener::onStatusChange 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; } 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: { Loading services/incremental/IncrementalService.h +3 −1 Original line number Diff line number Diff line Loading @@ -170,7 +170,7 @@ private: std::optional<DataLoaderParamsParcel> savedDataLoaderParams; std::atomic<int> nextStorageDirNo{0}; std::atomic<int> dataLoaderStatus = -1; std::condition_variable dataLoaderReady; bool dataLoaderStartRequested = false; TimePoint connectionLostTime = TimePoint(); const IncrementalService& incrementalService; Loading Loading @@ -208,6 +208,8 @@ private: bool prepareDataLoader(IncFsMount& ifs, DataLoaderParamsParcel* params = nullptr, const DataLoaderStatusListener* externalListener = nullptr); bool startDataLoader(MountId mountId) const; BindPathMap::const_iterator findStorageLocked(std::string_view path) const; StorageId findStorageId(std::string_view path) const; Loading Loading
services/incremental/IncrementalService.cpp +37 −27 Original line number Diff line number Diff line Loading @@ -917,19 +917,23 @@ std::vector<std::string> IncrementalService::listFiles(StorageId storage) const } bool IncrementalService::startLoading(StorageId storage) const { const auto ifs = getIfs(storage); { std::unique_lock l(mLock); const auto& ifs = getIfsLocked(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"; return false; 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; } Loading Loading @@ -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; } Loading Loading @@ -1226,6 +1224,8 @@ binder::Status IncrementalService::IncrementalDataLoaderListener::onStatusChange externalListener->onStatusChanged(mountId, newStatus); } bool startRequested = false; { std::unique_lock l(incrementalService.mLock); const auto& ifs = incrementalService.getIfsLocked(mountId); if (!ifs) { Loading @@ -1234,22 +1234,32 @@ binder::Status IncrementalService::IncrementalDataLoaderListener::onStatusChange 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; } 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: { Loading
services/incremental/IncrementalService.h +3 −1 Original line number Diff line number Diff line Loading @@ -170,7 +170,7 @@ private: std::optional<DataLoaderParamsParcel> savedDataLoaderParams; std::atomic<int> nextStorageDirNo{0}; std::atomic<int> dataLoaderStatus = -1; std::condition_variable dataLoaderReady; bool dataLoaderStartRequested = false; TimePoint connectionLostTime = TimePoint(); const IncrementalService& incrementalService; Loading Loading @@ -208,6 +208,8 @@ private: bool prepareDataLoader(IncFsMount& ifs, DataLoaderParamsParcel* params = nullptr, const DataLoaderStatusListener* externalListener = nullptr); bool startDataLoader(MountId mountId) const; BindPathMap::const_iterator findStorageLocked(std::string_view path) const; StorageId findStorageId(std::string_view path) const; Loading