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 ba192b1  HDDS-6132: EC: HandleStripeFailure should not release the 
cachebuffers. (#2940)
ba192b1 is described below

commit ba192b1de119791b196a38f9715b067816dfdbf9
Author: Uma Maheswara Rao G <[email protected]>
AuthorDate: Tue Jan 4 17:55:42 2022 -0800

    HDDS-6132: EC: HandleStripeFailure should not release the cachebuffers. 
(#2940)
    
    Co-authored-by: Uma Maheswara Rao G <[email protected]>
---
 .../ozone/client/io/ECBlockOutputStreamEntry.java  |  3 +-
 .../hadoop/ozone/client/io/ECKeyOutputStream.java  |  1 -
 .../hadoop/ozone/client/TestOzoneECClient.java     | 32 ++++++++++++----------
 3 files changed, 19 insertions(+), 17 deletions(-)

diff --git 
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECBlockOutputStreamEntry.java
 
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECBlockOutputStreamEntry.java
index 3670231..69c3735 100644
--- 
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECBlockOutputStreamEntry.java
+++ 
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECBlockOutputStreamEntry.java
@@ -130,7 +130,8 @@ public class ECBlockOutputStreamEntry extends 
BlockOutputStreamEntry{
   }
 
   public void useNextBlockStream() {
-    currentStreamIdx++;
+    currentStreamIdx =
+        (currentStreamIdx + 1) % replicationConfig.getRequiredNodes();
   }
 
   public void markFailed(Exception e) {
diff --git 
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECKeyOutputStream.java
 
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECKeyOutputStream.java
index fd333e2..4e4886a 100644
--- 
a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECKeyOutputStream.java
+++ 
b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/io/ECKeyOutputStream.java
@@ -260,7 +260,6 @@ public class ECKeyOutputStream extends KeyOutputStream {
     newBlockGroupStreamEntry
         .updateBlockGroupToAckedPosition(failedStripeDataSize);
     ecChunkBufferCache.clear(chunkSize);
-    ecChunkBufferCache.release();
 
     if (newBlockGroupStreamEntry.getRemaining() <= 0) {
       // In most cases this should not happen except in the case stripe size 
and
diff --git 
a/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/TestOzoneECClient.java
 
b/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/TestOzoneECClient.java
index c3c8c6d..ee19210 100644
--- 
a/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/TestOzoneECClient.java
+++ 
b/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/TestOzoneECClient.java
@@ -426,25 +426,24 @@ public class TestOzoneECClient {
   @Test
   public void testWriteShouldFailIfMoreThanParityNodesFail()
       throws IOException {
-    testNodeFailuresWhileWriting(3, 3);
+    testNodeFailuresWhileWriting(3, 3, 2);
   }
 
   @Test
   public void testWriteShouldSuccessIfLessThanParityNodesFail()
       throws IOException {
-    testNodeFailuresWhileWriting(1, 2);
+    testNodeFailuresWhileWriting(1, 2, 2);
   }
 
   @Test
-  public void testWriteShouldSuccessIf4NodesFailed()
-      throws IOException {
-    testNodeFailuresWhileWriting(4, 1);
+  public void testWriteShouldSuccessIf4NodesFailed() throws IOException {
+    testNodeFailuresWhileWriting(4, 1, 2);
   }
 
   @Test
-  public void testWriteShouldSuccessIfAllNodesFailed()
+  public void testWriteShouldSuccessWithAdditional1BlockGroupAfterFailure()
       throws IOException {
-    testNodeFailuresWhileWriting(4, 1);
+    testNodeFailuresWhileWriting(4, 10, 3);
   }
 
   @Test
@@ -602,7 +601,8 @@ public class TestOzoneECClient {
   }
 
   public void testNodeFailuresWhileWriting(int numFailureToInject,
-      int numChunksToWriteAfterFailure) throws IOException {
+      int numChunksToWriteAfterFailure, int numExpectedBlockGrps)
+      throws IOException {
     store.createVolume(volumeName);
     OzoneVolume volume = store.getVolume(volumeName);
     volume.createBucket(bucketName);
@@ -628,15 +628,16 @@ public class TestOzoneECClient {
       ((MockXceiverClientFactory) factoryStub).setFailedStorages(failedDNs);
 
       for (int i = 0; i < numChunksToWriteAfterFailure; i++) {
-        out.write(inputChunks[i]);
+        out.write(inputChunks[i % dataBlocks]);
       }
     }
     final OzoneKeyDetails key = bucket.getKey(keyName);
     // Data supposed to store in single block group. Since we introduced the
     // failures after first stripe, the second stripe data should have been
-    // written into new blockgroup. So, we should have 2 block groups. That
-    // means two keyLocations.
-    Assert.assertEquals(2, key.getOzoneKeyLocations().size());
+    // written into new block group. So, we should have numExpectedBlockGrps.
+    // That means two keyLocations.
+    Assert
+        .assertEquals(numExpectedBlockGrps, key.getOzoneKeyLocations().size());
     try (OzoneInputStream is = bucket.readKey(keyName)) {
       byte[] fileContent = new byte[chunkSize];
       for (int i = 0; i < dataBlocks; i++) {
@@ -646,10 +647,11 @@ public class TestOzoneECClient {
             Arrays.equals(inputChunks[i], fileContent));
       }
       for (int i = 0; i < numChunksToWriteAfterFailure; i++) {
-        Assert.assertEquals(inputChunks[i].length, is.read(fileContent));
-        Assert.assertTrue("Expected: " + new String(inputChunks[i],
+        Assert.assertEquals(inputChunks[i % dataBlocks].length,
+            is.read(fileContent));
+        Assert.assertTrue("Expected: " + new String(inputChunks[i % 
dataBlocks],
                 UTF_8) + " \n " + "Actual: " + new String(fileContent, UTF_8),
-            Arrays.equals(inputChunks[i], fileContent));
+            Arrays.equals(inputChunks[i % dataBlocks], fileContent));
       }
     }
   }

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

Reply via email to