Loading services/incremental/IncrementalService.cpp +47 −26 Original line number Diff line number Diff line Loading @@ -323,6 +323,14 @@ void IncrementalService::IncFsMount::setReadLogsEnabled(bool value) { } } void IncrementalService::IncFsMount::setReadLogsRequested(bool value) { if (value) { flags |= StorageFlags::ReadLogsRequested; } else { flags &= ~StorageFlags::ReadLogsRequested; } } IncrementalService::IncrementalService(ServiceManagerWrapper&& sm, std::string_view rootDir) : mVold(sm.getVoldService()), mDataLoaderManager(sm.getDataLoaderManager()), Loading Loading @@ -804,6 +812,9 @@ int IncrementalService::setStorageParams(StorageId storageId, bool enableReadLog return -EINVAL; } std::string packageName; { std::unique_lock l(ifs->lock); if (!enableReadLogs) { return disableReadLogsLocked(*ifs); Loading @@ -824,12 +835,15 @@ int IncrementalService::setStorageParams(StorageId storageId, bool enableReadLog const auto now = mClock->now(); const auto startLoadingTs = ifs->startLoadingTs; if (startLoadingTs <= now && now - startLoadingTs > getReadLogsMaxInterval()) { LOG(ERROR) << "enableReadLogs failed, readlogs can't be enabled at this time, storageId: " LOG(ERROR) << "enableReadLogs failed, readlogs can't be enabled at this time, storageId: " << storageId; return -EPERM; } const auto& packageName = ifs->dataLoaderStub->params().packageName; packageName = ifs->dataLoaderStub->params().packageName; ifs->setReadLogsRequested(true); } // Check loader usage stats permission and apop. if (auto status = Loading @@ -849,9 +863,15 @@ int IncrementalService::setStorageParams(StorageId storageId, bool enableReadLog return fromBinderStatus(status); } { std::unique_lock l(ifs->lock); if (!ifs->readLogsRequested()) { return 0; } if (auto status = applyStorageParamsLocked(*ifs, /*enableReadLogs=*/true); status != 0) { return status; } } registerAppOpsCallback(packageName); Loading @@ -859,6 +879,7 @@ int IncrementalService::setStorageParams(StorageId storageId, bool enableReadLog } int IncrementalService::disableReadLogsLocked(IncFsMount& ifs) { ifs.setReadLogsRequested(false); return applyStorageParamsLocked(ifs, /*enableReadLogs=*/false); } Loading Loading @@ -2214,7 +2235,6 @@ void IncrementalService::onAppOpChanged(const std::string& packageName) { affected.reserve(mMounts.size()); for (auto&& [id, ifs] : mMounts) { std::unique_lock ll(ifs->lock); if (ifs->mountId == id && ifs->dataLoaderStub && ifs->dataLoaderStub->params().packageName == packageName) { affected.push_back(ifs); Loading @@ -2222,7 +2242,8 @@ void IncrementalService::onAppOpChanged(const std::string& packageName) { } } for (auto&& ifs : affected) { applyStorageParamsLocked(*ifs, /*enableReadLogs=*/false); std::unique_lock ll(ifs->lock); disableReadLogsLocked(*ifs); } } Loading services/incremental/IncrementalService.h +4 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,7 @@ public: enum StorageFlags { ReadLogsAllowed = 1 << 0, ReadLogsEnabled = 1 << 1, ReadLogsRequested = 1 << 2, }; struct LoadingProgress { Loading Loading @@ -365,6 +366,9 @@ private: void setReadLogsEnabled(bool value); int32_t readLogsEnabled() const { return (flags & StorageFlags::ReadLogsEnabled); } void setReadLogsRequested(bool value); int32_t readLogsRequested() const { return (flags & StorageFlags::ReadLogsRequested); } static void cleanupFilesystem(std::string_view root); }; Loading Loading
services/incremental/IncrementalService.cpp +47 −26 Original line number Diff line number Diff line Loading @@ -323,6 +323,14 @@ void IncrementalService::IncFsMount::setReadLogsEnabled(bool value) { } } void IncrementalService::IncFsMount::setReadLogsRequested(bool value) { if (value) { flags |= StorageFlags::ReadLogsRequested; } else { flags &= ~StorageFlags::ReadLogsRequested; } } IncrementalService::IncrementalService(ServiceManagerWrapper&& sm, std::string_view rootDir) : mVold(sm.getVoldService()), mDataLoaderManager(sm.getDataLoaderManager()), Loading Loading @@ -804,6 +812,9 @@ int IncrementalService::setStorageParams(StorageId storageId, bool enableReadLog return -EINVAL; } std::string packageName; { std::unique_lock l(ifs->lock); if (!enableReadLogs) { return disableReadLogsLocked(*ifs); Loading @@ -824,12 +835,15 @@ int IncrementalService::setStorageParams(StorageId storageId, bool enableReadLog const auto now = mClock->now(); const auto startLoadingTs = ifs->startLoadingTs; if (startLoadingTs <= now && now - startLoadingTs > getReadLogsMaxInterval()) { LOG(ERROR) << "enableReadLogs failed, readlogs can't be enabled at this time, storageId: " LOG(ERROR) << "enableReadLogs failed, readlogs can't be enabled at this time, storageId: " << storageId; return -EPERM; } const auto& packageName = ifs->dataLoaderStub->params().packageName; packageName = ifs->dataLoaderStub->params().packageName; ifs->setReadLogsRequested(true); } // Check loader usage stats permission and apop. if (auto status = Loading @@ -849,9 +863,15 @@ int IncrementalService::setStorageParams(StorageId storageId, bool enableReadLog return fromBinderStatus(status); } { std::unique_lock l(ifs->lock); if (!ifs->readLogsRequested()) { return 0; } if (auto status = applyStorageParamsLocked(*ifs, /*enableReadLogs=*/true); status != 0) { return status; } } registerAppOpsCallback(packageName); Loading @@ -859,6 +879,7 @@ int IncrementalService::setStorageParams(StorageId storageId, bool enableReadLog } int IncrementalService::disableReadLogsLocked(IncFsMount& ifs) { ifs.setReadLogsRequested(false); return applyStorageParamsLocked(ifs, /*enableReadLogs=*/false); } Loading Loading @@ -2214,7 +2235,6 @@ void IncrementalService::onAppOpChanged(const std::string& packageName) { affected.reserve(mMounts.size()); for (auto&& [id, ifs] : mMounts) { std::unique_lock ll(ifs->lock); if (ifs->mountId == id && ifs->dataLoaderStub && ifs->dataLoaderStub->params().packageName == packageName) { affected.push_back(ifs); Loading @@ -2222,7 +2242,8 @@ void IncrementalService::onAppOpChanged(const std::string& packageName) { } } for (auto&& ifs : affected) { applyStorageParamsLocked(*ifs, /*enableReadLogs=*/false); std::unique_lock ll(ifs->lock); disableReadLogsLocked(*ifs); } } Loading
services/incremental/IncrementalService.h +4 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,7 @@ public: enum StorageFlags { ReadLogsAllowed = 1 << 0, ReadLogsEnabled = 1 << 1, ReadLogsRequested = 1 << 2, }; struct LoadingProgress { Loading Loading @@ -365,6 +366,9 @@ private: void setReadLogsEnabled(bool value); int32_t readLogsEnabled() const { return (flags & StorageFlags::ReadLogsEnabled); } void setReadLogsRequested(bool value); int32_t readLogsRequested() const { return (flags & StorageFlags::ReadLogsRequested); } static void cleanupFilesystem(std::string_view root); }; Loading