summaryrefslogtreecommitdiff
path: root/services/incremental/IncrementalService.h
diff options
context:
space:
mode:
author Alex Buynytskyy <alexbuy@google.com> 2020-12-14 21:50:04 -0800
committer Alex Buynytskyy <alexbuy@google.com> 2021-01-12 05:19:38 +0000
commitaa8e95ea33275756b59b61e867c18a881a634729 (patch)
treef94dc0f624ba71d0d8dc1419d133ff66c5255bc6 /services/incremental/IncrementalService.h
parent55b6a818e0cbddb7152601a3a2c666d025b7b2f0 (diff)
Per package read timeouts.
Bug: 162345970 Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest PackageManagerServiceTest Change-Id: I2599db1ed8827fff16387c11254a5d607f27ea46
Diffstat (limited to 'services/incremental/IncrementalService.h')
-rw-r--r--services/incremental/IncrementalService.h49
1 files changed, 41 insertions, 8 deletions
diff --git a/services/incremental/IncrementalService.h b/services/incremental/IncrementalService.h
index eb69470c97a7..306612159412 100644
--- a/services/incremental/IncrementalService.h
+++ b/services/incremental/IncrementalService.h
@@ -23,6 +23,7 @@
#include <android/os/incremental/BnIncrementalServiceConnector.h>
#include <android/os/incremental/BnStorageHealthListener.h>
#include <android/os/incremental/BnStorageLoadingProgressListener.h>
+#include <android/os/incremental/PerUidReadTimeouts.h>
#include <android/os/incremental/StorageHealthCheckParams.h>
#include <binder/IAppOpsCallback.h>
#include <utils/String16.h>
@@ -69,6 +70,8 @@ using StorageHealthListener = ::android::sp<IStorageHealthListener>;
using IStorageLoadingProgressListener = ::android::os::incremental::IStorageLoadingProgressListener;
using StorageLoadingProgressListener = ::android::sp<IStorageLoadingProgressListener>;
+using PerUidReadTimeouts = ::android::os::incremental::PerUidReadTimeouts;
+
class IncrementalService final {
public:
explicit IncrementalService(ServiceManagerWrapper&& sm, std::string_view rootDir);
@@ -98,7 +101,23 @@ public:
};
enum StorageFlags {
- ReadLogsEnabled = 1,
+ ReadLogsAllowed = 1 << 0,
+ ReadLogsEnabled = 1 << 1,
+ };
+
+ struct LoadingProgress {
+ ssize_t filledBlocks;
+ ssize_t totalBlocks;
+
+ bool isError() const { return totalBlocks < 0; }
+ bool started() const { return totalBlocks > 0; }
+ bool fullyLoaded() const { return !isError() && (totalBlocks == filledBlocks); }
+
+ float getProgress() const {
+ return totalBlocks < 0
+ ? totalBlocks
+ : totalBlocks > 0 ? double(filledBlocks) / double(totalBlocks) : 1.f;
+ }
};
static FileId idFromMetadata(std::span<const uint8_t> metadata);
@@ -114,7 +133,8 @@ public:
content::pm::DataLoaderParamsParcel&& dataLoaderParams,
CreateOptions options, const DataLoaderStatusListener& statusListener,
StorageHealthCheckParams&& healthCheckParams,
- const StorageHealthListener& healthListener);
+ const StorageHealthListener& healthListener,
+ const std::vector<PerUidReadTimeouts>& perUidReadTimeouts);
StorageId createLinkedStorage(std::string_view mountPoint, StorageId linkedStorage,
CreateOptions options = CreateOptions::Default);
StorageId openStorage(std::string_view path);
@@ -123,7 +143,7 @@ public:
int unbind(StorageId storage, std::string_view target);
void deleteStorage(StorageId storage);
- void disableReadLogs(StorageId storage);
+ void disallowReadLogs(StorageId storage);
int setStorageParams(StorageId storage, bool enableReadLogs);
int makeFile(StorageId storage, std::string_view path, int mode, FileId id,
@@ -135,8 +155,8 @@ public:
std::string_view newPath);
int unlink(StorageId storage, std::string_view path);
- int isFileFullyLoaded(StorageId storage, const std::string& path) const;
- float getLoadingProgress(StorageId storage) const;
+ int isFileFullyLoaded(StorageId storage, std::string_view filePath) const;
+ LoadingProgress getLoadingProgress(StorageId storage) const;
bool registerLoadingProgressListener(StorageId storage,
const StorageLoadingProgressListener& progressListener);
bool unregisterLoadingProgressListener(StorageId storage);
@@ -282,7 +302,7 @@ private:
const std::string root;
Control control;
/*const*/ MountId mountId;
- int32_t flags = StorageFlags::ReadLogsEnabled;
+ int32_t flags = StorageFlags::ReadLogsAllowed;
StorageMap storages;
BindMap bindPoints;
DataLoaderStubPtr dataLoaderStub;
@@ -301,7 +321,15 @@ private:
StorageMap::iterator makeStorage(StorageId id);
- void disableReadLogs() { flags &= ~StorageFlags::ReadLogsEnabled; }
+ void disallowReadLogs() { flags &= ~StorageFlags::ReadLogsAllowed; }
+ int32_t readLogsAllowed() const { return (flags & StorageFlags::ReadLogsAllowed); }
+
+ void setReadLogsEnabled(bool value) {
+ if (value)
+ flags |= StorageFlags::ReadLogsEnabled;
+ else
+ flags &= ~StorageFlags::ReadLogsEnabled;
+ }
int32_t readLogsEnabled() const { return (flags & StorageFlags::ReadLogsEnabled); }
static void cleanupFilesystem(std::string_view root);
@@ -313,6 +341,11 @@ private:
static bool perfLoggingEnabled();
+ void setUidReadTimeouts(StorageId storage,
+ const std::vector<PerUidReadTimeouts>& perUidReadTimeouts);
+ void clearUidReadTimeouts(StorageId storage);
+ void updateUidReadTimeouts(StorageId storage, Clock::time_point timeLimit);
+
std::unordered_set<std::string_view> adoptMountedInstances();
void mountExistingImages(const std::unordered_set<std::string_view>& mountedRootNames);
bool mountExistingImage(std::string_view root);
@@ -355,7 +388,7 @@ private:
binder::Status applyStorageParams(IncFsMount& ifs, bool enableReadLogs);
int isFileFullyLoadedFromPath(const IncFsMount& ifs, std::string_view filePath) const;
- float getLoadingProgressFromPath(const IncFsMount& ifs, std::string_view path) const;
+ LoadingProgress getLoadingProgressFromPath(const IncFsMount& ifs, std::string_view path) const;
int setFileContent(const IfsMountPtr& ifs, const incfs::FileId& fileId,
std::string_view debugFilePath, std::span<const uint8_t> data) const;