This is an automated email from the ASF dual-hosted git repository.

umamahesh pushed a commit to branch HDDS-3816-ec
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/HDDS-3816-ec by this push:
     new d9529b32ea HDDS-6434: EC: Overwriting an EC key with a Ratis key fails 
(#3274)
d9529b32ea is described below

commit d9529b32ea516a486818a09eee5557402dc74e81
Author: Uma Maheswara Rao G <[email protected]>
AuthorDate: Thu Apr 7 22:52:39 2022 -0700

    HDDS-6434: EC: Overwriting an EC key with a Ratis key fails (#3274)
---
 .../apache/hadoop/ozone/om/helpers/OmKeyInfo.java  |  4 ++
 .../ozone/client/rpc/TestECKeyOutputStream.java    | 50 ++++++++++++++++++++++
 .../hadoop/ozone/om/request/key/OMKeyRequest.java  |  1 +
 3 files changed, 55 insertions(+)

diff --git 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmKeyInfo.java
 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmKeyInfo.java
index 86076921df..4b2727642a 100644
--- 
a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmKeyInfo.java
+++ 
b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmKeyInfo.java
@@ -351,6 +351,10 @@ public final class OmKeyInfo extends WithParentObjectId {
     this.parentObjectID = parentObjectID;
   }
 
+  public void setReplicationConfig(ReplicationConfig repConfig) {
+    this.replicationConfig = repConfig;
+  }
+
   /**
    * Builder of OmKeyInfo.
    */
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestECKeyOutputStream.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestECKeyOutputStream.java
index 4f7881f45b..948c481435 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestECKeyOutputStream.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestECKeyOutputStream.java
@@ -21,6 +21,7 @@ import org.apache.hadoop.hdds.HddsConfigKeys;
 import org.apache.hadoop.hdds.client.DefaultReplicationConfig;
 import org.apache.hadoop.hdds.client.ECReplicationConfig;
 import org.apache.hadoop.hdds.client.RatisReplicationConfig;
+import org.apache.hadoop.hdds.client.ReplicationConfig;
 import org.apache.hadoop.hdds.client.ReplicationType;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.protocol.DatanodeDetails;
@@ -193,6 +194,55 @@ public class TestECKeyOutputStream {
     }
   }
 
+  @Test
+  public void testOverwriteECKeyWithRatisKey() throws Exception {
+    String myBucket = UUID.randomUUID().toString();
+    OzoneVolume volume = objectStore.getVolume(volumeName);
+    final BucketArgs.Builder bucketArgs = BucketArgs.newBuilder();
+    volume.createBucket(myBucket, bucketArgs.build());
+    OzoneBucket bucket = volume.getBucket(myBucket);
+    createKeyAndCheckReplicationConfig(keyString, bucket,
+        new ECReplicationConfig(3, 2, ECReplicationConfig.EcCodec.RS,
+            chunkSize));
+
+    //Overwrite with RATIS/THREE
+    createKeyAndCheckReplicationConfig(keyString, bucket,
+        
RatisReplicationConfig.getInstance(HddsProtos.ReplicationFactor.THREE));
+
+    //Overwrite with RATIS/ONE
+    createKeyAndCheckReplicationConfig(keyString, bucket,
+        RatisReplicationConfig.getInstance(HddsProtos.ReplicationFactor.ONE));
+  }
+
+  @Test
+  public void testOverwriteRatisKeyWithECKey() throws Exception {
+    String myBucket = UUID.randomUUID().toString();
+    OzoneVolume volume = objectStore.getVolume(volumeName);
+    final BucketArgs.Builder bucketArgs = BucketArgs.newBuilder();
+    volume.createBucket(myBucket, bucketArgs.build());
+    OzoneBucket bucket = volume.getBucket(myBucket);
+
+    createKeyAndCheckReplicationConfig(keyString, bucket,
+        
RatisReplicationConfig.getInstance(HddsProtos.ReplicationFactor.THREE));
+    // Overwrite with EC key
+    createKeyAndCheckReplicationConfig(keyString, bucket,
+        new ECReplicationConfig(3, 2, ECReplicationConfig.EcCodec.RS,
+            chunkSize));
+  }
+
+  private void createKeyAndCheckReplicationConfig(String keyName,
+      OzoneBucket bucket, ReplicationConfig replicationConfig)
+      throws IOException {
+    try (OzoneOutputStream out = bucket
+        .createKey(keyName, inputSize, replicationConfig, new HashMap<>())) {
+      for (int i = 0; i < inputChunks.length; i++) {
+        out.write(inputChunks[i]);
+      }
+    }
+    OzoneKeyDetails key = bucket.getKey(keyName);
+    Assert.assertEquals(replicationConfig, key.getReplicationConfig());
+  }
+
   @Test
   public void testCreateRatisKeyAndWithECBucketDefaults() throws Exception {
     OzoneBucket bucket = getOzoneBucket();
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java
index 48bcf46847..52dff6294a 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java
@@ -655,6 +655,7 @@ public abstract class OMKeyRequest extends OMClientRequest {
       // modification time.
       dbKeyInfo.setModificationTime(keyArgs.getModificationTime());
       dbKeyInfo.setUpdateID(transactionLogIndex, isRatisEnabled);
+      dbKeyInfo.setReplicationConfig(replicationConfig);
       return dbKeyInfo;
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to