Merge "Make usage of revocable fds for reads configurable." into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
14849cfbd4
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user