diff options
author | Sudheer Shanka <sudheersai@google.com> | 2020-06-19 02:23:13 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-06-19 02:23:13 +0000 |
commit | 14849cfbd4df62a0b305f72d008e4a847f47a5bb (patch) | |
tree | 26c836af4d64896bc634f1087ec1e5911c8cbb34 /apex | |
parent | 333f7c957ca8fb77096e14d9e49efa17703f78e7 (diff) | |
parent | d6f4794eed41f1891ff37b810671bc183a0606e0 (diff) |
Merge "Make usage of revocable fds for reads configurable." into rvc-dev
Diffstat (limited to 'apex')
3 files changed, 34 insertions, 2 deletions
diff --git a/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java b/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java index 1193ae9cf990..4d29045fa631 100644 --- a/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java +++ b/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java @@ -358,7 +358,11 @@ class BlobMetadata { throw e.rethrowAsIOException(); } try { - return createRevocableFd(fd, callingPackage); + if (BlobStoreConfig.shouldUseRevocableFdForReads()) { + return createRevocableFd(fd, callingPackage); + } else { + return new ParcelFileDescriptor(fd); + } } catch (IOException e) { IoUtils.closeQuietly(fd); throw e; diff --git a/apex/blobstore/service/java/com/android/server/blob/BlobStoreConfig.java b/apex/blobstore/service/java/com/android/server/blob/BlobStoreConfig.java index 08ee24460722..d780d5dab14d 100644 --- a/apex/blobstore/service/java/com/android/server/blob/BlobStoreConfig.java +++ b/apex/blobstore/service/java/com/android/server/blob/BlobStoreConfig.java @@ -122,6 +122,15 @@ class BlobStoreConfig { public static long COMMIT_COOL_OFF_DURATION_MS = DEFAULT_COMMIT_COOL_OFF_DURATION_MS; + /** + * Denotes whether to use RevocableFileDescriptor when apps try to read session/blob data. + */ + public static final String KEY_USE_REVOCABLE_FD_FOR_READS = + "use_revocable_fd_for_reads"; + public static final boolean DEFAULT_USE_REVOCABLE_FD_FOR_READS = true; + public static boolean USE_REVOCABLE_FD_FOR_READS = + DEFAULT_USE_REVOCABLE_FD_FOR_READS; + static void refresh(Properties properties) { if (!NAMESPACE_BLOBSTORE.equals(properties.getNamespace())) { return; @@ -151,6 +160,10 @@ class BlobStoreConfig { COMMIT_COOL_OFF_DURATION_MS = properties.getLong(key, DEFAULT_COMMIT_COOL_OFF_DURATION_MS); break; + case KEY_USE_REVOCABLE_FD_FOR_READS: + USE_REVOCABLE_FD_FOR_READS = properties.getBoolean(key, + DEFAULT_USE_REVOCABLE_FD_FOR_READS); + break; default: Slog.wtf(TAG, "Unknown key in device config properties: " + key); } @@ -178,6 +191,8 @@ class BlobStoreConfig { fout.println(String.format(dumpFormat, KEY_COMMIT_COOL_OFF_DURATION_MS, TimeUtils.formatDuration(COMMIT_COOL_OFF_DURATION_MS), TimeUtils.formatDuration(DEFAULT_COMMIT_COOL_OFF_DURATION_MS))); + fout.println(String.format(dumpFormat, KEY_USE_REVOCABLE_FD_FOR_READS, + USE_REVOCABLE_FD_FOR_READS, DEFAULT_USE_REVOCABLE_FD_FOR_READS)); } } @@ -242,6 +257,13 @@ class BlobStoreConfig { < System.currentTimeMillis(); } + /** + * Return whether to use RevocableFileDescriptor when apps try to read session/blob data. + */ + public static boolean shouldUseRevocableFdForReads() { + return DeviceConfigProperties.USE_REVOCABLE_FD_FOR_READS; + } + @Nullable public static File prepareBlobFile(long sessionId) { final File blobsDir = prepareBlobsDir(); diff --git a/apex/blobstore/service/java/com/android/server/blob/BlobStoreSession.java b/apex/blobstore/service/java/com/android/server/blob/BlobStoreSession.java index 00983058841c..baafff53d072 100644 --- a/apex/blobstore/service/java/com/android/server/blob/BlobStoreSession.java +++ b/apex/blobstore/service/java/com/android/server/blob/BlobStoreSession.java @@ -268,6 +268,13 @@ class BlobStoreSession extends IBlobStoreSession.Stub { throw new IllegalStateException("Not allowed to read in state: " + stateToString(mState)); } + if (!BlobStoreConfig.shouldUseRevocableFdForReads()) { + try { + return new ParcelFileDescriptor(openReadInternal()); + } catch (IOException e) { + throw ExceptionUtils.wrap(e); + } + } } FileDescriptor fd = null; @@ -283,7 +290,6 @@ class BlobStoreSession extends IBlobStoreSession.Stub { trackRevocableFdLocked(revocableFd); return revocableFd.getRevocableFileDescriptor(); } - } catch (IOException e) { IoUtils.closeQuietly(fd); throw ExceptionUtils.wrap(e); |