This is an automated email from the ASF dual-hosted git repository. ckj pushed a commit to branch ozone-1.3 in repository https://gitbox.apache.org/repos/asf/ozone.git
commit 5c24d3f04ed9bd964da02e7db7d657acc63fa6df Author: Sumit Agrawal <[email protected]> AuthorDate: Fri Nov 18 14:07:21 2022 +0530 HDDS-7470. [Quota] bucket is created crossing quota makes OM crash and unable to start (#3960) --- .../om/request/bucket/OMBucketCreateRequest.java | 4 +- .../tenant/OMTenantAssignUserAccessIdRequest.java | 3 +- .../request/bucket/TestOMBucketCreateRequest.java | 46 ++++++++++++++++++++++ 3 files changed, 50 insertions(+), 3 deletions(-) diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketCreateRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketCreateRequest.java index c2e0a1bca3..2581787f0a 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketCreateRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketCreateRequest.java @@ -394,10 +394,10 @@ public class OMBucketCreateRequest extends OMClientRequest { } if (volumeQuotaInBytes < totalBucketQuota && volumeQuotaInBytes != OzoneConsts.QUOTA_RESET) { - throw new IllegalArgumentException("Total buckets quota in this volume " + + throw new OMException("Total buckets quota in this volume " + "should not be greater than volume quota : the total space quota is" + " set to:" + totalBucketQuota + ". But the volume space quota is:" + - volumeQuotaInBytes); + volumeQuotaInBytes, OMException.ResultCodes.QUOTA_EXCEEDED); } return true; diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignUserAccessIdRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignUserAccessIdRequest.java index 8eb5919faa..2b3708bfd5 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignUserAccessIdRequest.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/tenant/OMTenantAssignUserAccessIdRequest.java @@ -261,7 +261,8 @@ public class OMTenantAssignUserAccessIdRequest extends OMClientRequest { if (accessIdInfo == null) { LOG.error("Metadata error: accessIdInfo is null for accessId '{}'. " + "Ignoring.", existingAccId); - throw new NullPointerException("accessIdInfo is null"); + throw new OMException("accessIdInfo is null", + ResultCodes.INVALID_ACCESS_ID); } if (tenantId.equals(accessIdInfo.getTenantId())) { throw new OMException("The same user is not allowed to be assigned " diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketCreateRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketCreateRequest.java index f57da71bd2..7a7aafcfe4 100644 --- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketCreateRequest.java +++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketCreateRequest.java @@ -140,6 +140,52 @@ public class TestOMBucketCreateRequest extends TestBucketRequest { omMetadataManager.getBucketTable().get(bucketKey).getBucketLayout()); } + @Test + public void testValidateAndUpdateCacheCrossSpaceQuota() throws Exception { + String volumeName = UUID.randomUUID().toString(); + String bucketName = UUID.randomUUID().toString(); + + // create a volume with less quota + OmVolumeArgs omVolumeArgs = + OmVolumeArgs.newBuilder().setCreationTime(Time.now()) + .setQuotaInBytes(100) + .setVolume(volumeName).setAdminName(UUID.randomUUID().toString()) + .setOwnerName(UUID.randomUUID().toString()).build(); + OMRequestTestUtils.addVolumeToOM(omMetadataManager, omVolumeArgs); + + // create a bucket require higher bucket quota + OzoneManagerProtocolProtos.BucketInfo bucketInfo = + OzoneManagerProtocolProtos.BucketInfo.newBuilder() + .setBucketName(bucketName) + .setVolumeName(volumeName) + .setIsVersionEnabled(false) + .setQuotaInBytes(99999L) + .setStorageType(StorageTypeProto.SSD) + .addAllMetadata(OMRequestTestUtils.getMetadataList()).build(); + OzoneManagerProtocolProtos.CreateBucketRequest.Builder req = + OzoneManagerProtocolProtos.CreateBucketRequest.newBuilder(); + req.setBucketInfo(bucketInfo); + OMRequest originalRequest = OzoneManagerProtocolProtos.OMRequest + .newBuilder() + .setCreateBucketRequest(req) + .setCmdType(OzoneManagerProtocolProtos.Type.CreateBucket) + .setClientId(UUID.randomUUID().toString()).build(); + + OMBucketCreateRequest omBucketCreateRequest = + new OMBucketCreateRequest(originalRequest); + + OMRequest modifiedRequest = omBucketCreateRequest.preExecute(ozoneManager); + verifyRequest(modifiedRequest, originalRequest); + + OMBucketCreateRequest testRequest = + new OMBucketCreateRequest(modifiedRequest); + OMClientResponse resp = testRequest.validateAndUpdateCache( + ozoneManager, 1, ozoneManagerDoubleBufferHelper); + + Assert.assertEquals(resp.getOMResponse().getStatus().toString(), + OMException.ResultCodes.QUOTA_EXCEEDED.toString()); + } + private OMBucketCreateRequest doPreExecute(String volumeName, String bucketName) throws Exception { addCreateVolumeToTable(volumeName, omMetadataManager); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
