summaryrefslogtreecommitdiff
path: root/apex/blobstore/service/java
diff options
context:
space:
mode:
authorSudheer Shanka <sudheersai@google.com>2020-03-22 07:21:17 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-03-22 07:21:17 +0000
commitadd060f917e605c205e928c42a0882471390929c (patch)
treec4d00b439cac9785dbddf27817a091d2c0ffca00 /apex/blobstore/service/java
parentc78a7e4971c36f3163d07655835fd0fe3a3ee1e8 (diff)
parenta80a997a3badadf629f06fd63ee0d4bae4e581a4 (diff)
Merge "Add BlobStoreManager.getRemainingLeaseQuotaBytes." into rvc-dev
Diffstat (limited to 'apex/blobstore/service/java')
-rw-r--r--apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java26
1 files changed, 23 insertions, 3 deletions
diff --git a/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java b/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java
index 15c069fbd007..65ccb997343b 100644
--- a/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java
+++ b/apex/blobstore/service/java/com/android/server/blob/BlobStoreManagerService.java
@@ -62,7 +62,9 @@ import android.content.res.Resources;
import android.os.Binder;
import android.os.Handler;
import android.os.HandlerThread;
+import android.os.LimitExceededException;
import android.os.ParcelFileDescriptor;
+import android.os.ParcelableException;
import android.os.Process;
import android.os.RemoteCallback;
import android.os.SystemClock;
@@ -394,9 +396,9 @@ public class BlobStoreManagerService extends SystemService {
throw new IllegalArgumentException(
"Lease expiry cannot be later than blobs expiry time");
}
- if (getTotalUsageBytesLocked(callingUid, callingPackage)
- + blobMetadata.getSize() > BlobStoreConfig.getAppDataBytesLimit()) {
- throw new IllegalStateException("Total amount of data with an active lease"
+ if (blobMetadata.getSize()
+ > getRemainingLeaseQuotaBytesInternal(callingUid, callingPackage)) {
+ throw new LimitExceededException("Total amount of data with an active lease"
+ " is exceeding the max limit");
}
blobMetadata.addLeasee(callingPackage, callingUid,
@@ -445,6 +447,14 @@ public class BlobStoreManagerService extends SystemService {
}
}
+ private long getRemainingLeaseQuotaBytesInternal(int callingUid, String callingPackage) {
+ synchronized (mBlobsLock) {
+ final long remainingQuota = BlobStoreConfig.getAppDataBytesLimit()
+ - getTotalUsageBytesLocked(callingUid, callingPackage);
+ return remainingQuota > 0 ? remainingQuota : 0;
+ }
+ }
+
private List<BlobInfo> queryBlobsForUserInternal(int userId) {
final ArrayList<BlobInfo> blobInfos = new ArrayList<>();
synchronized (mBlobsLock) {
@@ -1302,6 +1312,8 @@ public class BlobStoreManagerService extends SystemService {
leaseExpiryTimeMillis, callingUid, packageName);
} catch (Resources.NotFoundException e) {
throw new IllegalArgumentException(e);
+ } catch (LimitExceededException e) {
+ throw new ParcelableException(e);
}
}
@@ -1324,6 +1336,14 @@ public class BlobStoreManagerService extends SystemService {
}
@Override
+ public long getRemainingLeaseQuotaBytes(@NonNull String packageName) {
+ final int callingUid = Binder.getCallingUid();
+ verifyCallingPackage(callingUid, packageName);
+
+ return getRemainingLeaseQuotaBytesInternal(callingUid, packageName);
+ }
+
+ @Override
public void waitForIdle(@NonNull RemoteCallback remoteCallback) {
Objects.requireNonNull(remoteCallback, "remoteCallback must not be null");