This is an automated email from the ASF dual-hosted git repository.
bharat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new c68468c HDDS-5761. should not shutdown om when setting a bigger
bucket quota than volume quota (#2659)
c68468c is described below
commit c68468c59839bbf84db0de344eb8ce9301bd4f5b
Author: Jackson Yao <[email protected]>
AuthorDate: Tue Sep 21 02:34:46 2021 +0800
HDDS-5761. should not shutdown om when setting a bigger bucket quota than
volume quota (#2659)
---
.../request/bucket/OMBucketSetPropertyRequest.java | 9 +++----
.../om/request/volume/OMVolumeSetQuotaRequest.java | 5 ++--
.../bucket/TestOMBucketSetPropertyRequest.java | 30 ++++++++++++++--------
.../volume/TestOMVolumeSetQuotaRequest.java | 28 ++++++++++++--------
4 files changed, 43 insertions(+), 29 deletions(-)
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetPropertyRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetPropertyRequest.java
index 8987902..44c3756 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetPropertyRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketSetPropertyRequest.java
@@ -169,8 +169,7 @@ public class OMBucketSetPropertyRequest extends
OMClientRequest {
String volumeKey = omMetadataManager.getVolumeKey(volumeName);
OmVolumeArgs omVolumeArgs = omMetadataManager.getVolumeTable()
.get(volumeKey);
- if (checkQuotaBytesValid(omMetadataManager, omVolumeArgs, omBucketArgs,
- volumeKey)) {
+ if (checkQuotaBytesValid(omMetadataManager, omVolumeArgs, omBucketArgs))
{
bucketInfoBuilder.setQuotaInBytes(omBucketArgs.getQuotaInBytes());
} else {
bucketInfoBuilder.setQuotaInBytes(dbBucketInfo.getQuotaInBytes());
@@ -245,7 +244,7 @@ public class OMBucketSetPropertyRequest extends
OMClientRequest {
}
public boolean checkQuotaBytesValid(OMMetadataManager metadataManager,
- OmVolumeArgs omVolumeArgs, OmBucketArgs omBucketArgs, String volumeKey)
+ OmVolumeArgs omVolumeArgs, OmBucketArgs omBucketArgs)
throws IOException {
long quotaInBytes = omBucketArgs.getQuotaInBytes();
@@ -278,10 +277,10 @@ public class OMBucketSetPropertyRequest 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/volume/OMVolumeSetQuotaRequest.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetQuotaRequest.java
index 5353c0d..26d9627 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetQuotaRequest.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeSetQuotaRequest.java
@@ -24,6 +24,7 @@ import java.util.Map;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
+import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.OmBucketInfo;
import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
import org.apache.hadoop.ozone.om.request.util.OmResponseUtil;
@@ -204,10 +205,10 @@ public class OMVolumeSetQuotaRequest extends
OMVolumeRequest {
}
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"
+
":" + totalBucketQuota + ". But the volume space quota is:" +
- volumeQuotaInBytes);
+ volumeQuotaInBytes, OMException.ResultCodes.QUOTA_EXCEEDED);
}
return true;
}
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketSetPropertyRequest.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketSetPropertyRequest.java
index ebfa33d..c2a18ac 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketSetPropertyRequest.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketSetPropertyRequest.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.ozone.om.request.bucket;
import java.util.UUID;
+import org.apache.commons.logging.LogFactory;
import org.apache.ozone.test.GenericTestUtils;
import org.junit.Assert;
import org.junit.Test;
@@ -150,16 +151,23 @@ public class TestOMBucketSetPropertyRequest extends
TestBucketRequest {
OMBucketSetPropertyRequest omBucketSetPropertyRequest =
new OMBucketSetPropertyRequest(omRequest);
- int countException = 0;
- try {
- omBucketSetPropertyRequest.validateAndUpdateCache(ozoneManager, 1,
- ozoneManagerDoubleBufferHelper);
- } catch (IllegalArgumentException ex) {
- countException++;
- GenericTestUtils.assertExceptionContains(
- "Total buckets quota in this volume should not be " +
- "greater than volume quota", ex);
- }
- Assert.assertEquals(1, countException);
+
+ GenericTestUtils.LogCapturer logs = GenericTestUtils.LogCapturer
+ .captureLogs(LogFactory.getLog(OMBucketSetPropertyRequest.class));
+
+ OMClientResponse omClientResponse = omBucketSetPropertyRequest
+ .validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
+
+ //capture the error log
+ Assert.assertTrue(logs.getOutput().contains(
+ "Setting bucket property failed for bucket"));
+
+ Assert.assertFalse(omClientResponse.getOMResponse().getSuccess());
+ Assert.assertEquals(omClientResponse.getOMResponse().getStatus(),
+ OzoneManagerProtocolProtos.Status.QUOTA_EXCEEDED);
+ Assert.assertTrue(omClientResponse.getOMResponse().getMessage().
+ contains("Total buckets quota in this volume " +
+ "should not be greater than volume quota"));
}
}
diff --git
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeSetQuotaRequest.java
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeSetQuotaRequest.java
index b1e15d4..3d63ae5 100644
---
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeSetQuotaRequest.java
+++
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeSetQuotaRequest.java
@@ -20,6 +20,7 @@ package org.apache.hadoop.ozone.om.request.volume;
import java.util.UUID;
+import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.ozone.om.helpers.OmVolumeArgs;
import org.apache.hadoop.ozone.om.request.TestOMRequestUtils;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
@@ -179,16 +180,21 @@ public class TestOMVolumeSetQuotaRequest extends
TestOMVolumeRequest {
OMVolumeSetQuotaRequest omVolumeSetQuotaRequest =
new OMVolumeSetQuotaRequest(originalRequest);
- int countException = 0;
- try {
- omVolumeSetQuotaRequest.validateAndUpdateCache(ozoneManager, 1,
- ozoneManagerDoubleBufferHelper);
- } catch (IllegalArgumentException ex) {
- countException++;
- GenericTestUtils.assertExceptionContains(
- "Total buckets quota in this volume should not be " +
- "greater than volume quota", ex);
- }
- Assert.assertEquals(1, countException);
+ GenericTestUtils.LogCapturer logs = GenericTestUtils.LogCapturer
+ .captureLogs(LogFactory.getLog(OMVolumeSetQuotaRequest.class));
+
+ OMClientResponse omClientResponse = omVolumeSetQuotaRequest
+ .validateAndUpdateCache(ozoneManager, 1,
+ ozoneManagerDoubleBufferHelper);
+ //capture the error log
+ Assert.assertTrue(logs.getOutput().contains(
+ "Changing volume quota failed for volume"));
+
+ Assert.assertFalse(omClientResponse.getOMResponse().getSuccess());
+ Assert.assertEquals(omClientResponse.getOMResponse().getStatus(),
+ OzoneManagerProtocolProtos.Status.QUOTA_EXCEEDED);
+ Assert.assertTrue(omClientResponse.getOMResponse().getMessage().
+ contains("Total buckets quota in this volume " +
+ "should not be greater than volume quota"));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]