You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by sa...@apache.org on 2021/01/12 06:22:39 UTC
[ozone] branch master updated: HDDS-4665. Fix when update quota the
usedBytes and namespace will become to 0 (#1772)
This is an automated email from the ASF dual-hosted git repository.
sammichen 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 ea33e2f HDDS-4665. Fix when update quota the usedBytes and namespace will become to 0 (#1772)
ea33e2f is described below
commit ea33e2f1c711ad7a971054905e98c6302f0b03f0
Author: micah zhao <mi...@tencent.com>
AuthorDate: Tue Jan 12 14:22:19 2021 +0800
HDDS-4665. Fix when update quota the usedBytes and namespace will become to 0 (#1772)
---
.../client/rpc/TestOzoneRpcClientAbstract.java | 33 ++++++++++++++++++++++
.../request/bucket/OMBucketSetPropertyRequest.java | 4 +++
2 files changed, 37 insertions(+)
diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneRpcClientAbstract.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneRpcClientAbstract.java
index 770a693..2dbb73a 100644
--- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneRpcClientAbstract.java
+++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneRpcClientAbstract.java
@@ -283,6 +283,8 @@ public abstract class TestOzoneRpcClientAbstract {
public void testSetAndClrQuota() throws Exception {
String volumeName = UUID.randomUUID().toString();
String bucketName = UUID.randomUUID().toString();
+ String value = "sample value";
+ int valueLength = value.getBytes().length;
OzoneVolume volume = null;
store.createVolume(volumeName);
@@ -318,6 +320,14 @@ public abstract class TestOzoneRpcClientAbstract {
" spaceQuota because volume spaceQuota is not cleared.",
() -> ozoneBucket.clearSpaceQuota());
+ writeKey(bucket, UUID.randomUUID().toString(), ONE, value, valueLength);
+ Assert.assertEquals(1L,
+ store.getVolume(volumeName).getBucket(bucketName).getUsedNamespace());
+ Assert.assertEquals(valueLength,
+ store.getVolume(volumeName).getBucket(bucketName).getUsedBytes());
+ Assert.assertEquals(1L,
+ store.getVolume(volumeName).getUsedNamespace());
+
store.getVolume(volumeName).clearSpaceQuota();
store.getVolume(volumeName).clearNamespaceQuota();
OzoneVolume clrVolume = store.getVolume(volumeName);
@@ -331,6 +341,12 @@ public abstract class TestOzoneRpcClientAbstract {
Assert.assertEquals(OzoneConsts.QUOTA_RESET, clrBucket.getQuotaInBytes());
Assert.assertEquals(OzoneConsts.QUOTA_RESET,
clrBucket.getQuotaInNamespace());
+ Assert.assertEquals(1L,
+ store.getVolume(volumeName).getBucket(bucketName).getUsedNamespace());
+ Assert.assertEquals(valueLength,
+ store.getVolume(volumeName).getBucket(bucketName).getUsedBytes());
+ Assert.assertEquals(1L,
+ store.getVolume(volumeName).getUsedNamespace());
}
@Test
@@ -891,6 +907,12 @@ public abstract class TestOzoneRpcClientAbstract {
Assert.assertEquals(4 * blockSize,
store.getVolume(volumeName).getBucket(bucketName).getUsedBytes());
+ // Reset bucket quota, the original usedBytes needs to remain the same
+ bucket.setQuota(OzoneQuota.parseQuota(
+ 100 + " GB", 100));
+ Assert.assertEquals(4 * blockSize,
+ store.getVolume(volumeName).getBucket(bucketName).getUsedBytes());
+
Assert.assertEquals(3, countException);
}
@@ -933,6 +955,12 @@ public abstract class TestOzoneRpcClientAbstract {
// namespace quota
Assert.assertEquals(0L, volumeWithLinkedBucket.getUsedNamespace());
+ // Reset volume quota, the original usedNamespace needs to remain the same
+ store.getVolume(volumeName).setQuota(OzoneQuota.parseQuota(
+ 100 + " GB", 100));
+ Assert.assertEquals(1L,
+ store.getVolume(volumeName).getUsedNamespace());
+
volume.deleteBucket(bucketName);
// Used namespace should be 0
volume = store.getVolume(volumeName);
@@ -976,6 +1004,11 @@ public abstract class TestOzoneRpcClientAbstract {
Assert.assertEquals(2L,
store.getVolume(volumeName).getBucket(bucketName).getUsedNamespace());
+ // Reset bucket quota, the original usedNamespace needs to remain the same
+ bucket.setQuota(OzoneQuota.parseQuota(Long.MAX_VALUE + " Bytes", 100));
+ Assert.assertEquals(2L,
+ store.getVolume(volumeName).getBucket(bucketName).getUsedNamespace());
+
bucket.deleteKeys(Arrays.asList(key1, key2));
Assert.assertEquals(0L,
store.getVolume(volumeName).getBucket(bucketName).getUsedNamespace());
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 21416d3..35ebf6d 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
@@ -70,6 +70,7 @@ public class OMBucketSetPropertyRequest extends OMClientRequest {
}
@Override
+ @SuppressWarnings("methodlength")
public OMClientResponse validateAndUpdateCache(OzoneManager ozoneManager,
long transactionLogIndex,
OzoneManagerDoubleBufferHelper ozoneManagerDoubleBufferHelper) {
@@ -180,6 +181,9 @@ public class OMBucketSetPropertyRequest extends OMClientRequest {
// Set the updateID to current transaction log index
bucketInfoBuilder.setUpdateID(transactionLogIndex);
+ // Quota used remains unchanged
+ bucketInfoBuilder.setUsedBytes(dbBucketInfo.getUsedBytes());
+ bucketInfoBuilder.setUsedNamespace(dbBucketInfo.getUsedNamespace());
omBucketInfo = bucketInfoBuilder.build();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org