diff options
author | Sudheer Shanka <sudheersai@google.com> | 2020-03-22 07:21:17 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-03-22 07:21:17 +0000 |
commit | add060f917e605c205e928c42a0882471390929c (patch) | |
tree | c4d00b439cac9785dbddf27817a091d2c0ffca00 /apex/blobstore/service/java | |
parent | c78a7e4971c36f3163d07655835fd0fe3a3ee1e8 (diff) | |
parent | a80a997a3badadf629f06fd63ee0d4bae4e581a4 (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.java | 26 |
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"); |