You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by xy...@apache.org on 2023/08/02 16:46:36 UTC

[helix] branch metaclient updated: Lattice Puppy Stress Test Race Condition Fix and Code Cleanup (#2579)

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

xyuanlu pushed a commit to branch metaclient
in repository https://gitbox.apache.org/repos/asf/helix.git


The following commit(s) were added to refs/heads/metaclient by this push:
     new a9c8332a6 Lattice Puppy Stress Test Race Condition Fix and Code Cleanup (#2579)
a9c8332a6 is described below

commit a9c8332a6a965763f7cc7b0092a32e7cd195e236
Author: Marcos Rico Peng <55...@users.noreply.github.com>
AuthorDate: Wed Aug 2 18:46:26 2023 +0200

    Lattice Puppy Stress Test Race Condition Fix and Code Cleanup (#2579)
    
    
    ---------
    
    Co-authored-by: mapeng <ma...@linkedin.com>
---
 .../apache/helix/metaclient/MetaClientTestUtil.java |  2 +-
 .../zk/TestMultiThreadStressTest/CreatePuppy.java   |  3 +--
 .../zk/TestMultiThreadStressTest/DeletePuppy.java   |  2 +-
 .../impl/zk/TestMultiThreadStressTest/GetPuppy.java |  1 -
 .../impl/zk/TestMultiThreadStressTest/SetPuppy.java |  1 -
 .../TestMultiThreadStressZKClient.java              |  6 ++----
 .../zk/TestMultiThreadStressTest/UpdatePuppy.java   |  1 -
 .../helix/metaclient/puppy/AbstractPuppy.java       | 21 +++++++--------------
 8 files changed, 12 insertions(+), 25 deletions(-)

diff --git a/meta-client/src/test/java/org/apache/helix/metaclient/MetaClientTestUtil.java b/meta-client/src/test/java/org/apache/helix/metaclient/MetaClientTestUtil.java
index 2c7543e31..f0a14c4a4 100644
--- a/meta-client/src/test/java/org/apache/helix/metaclient/MetaClientTestUtil.java
+++ b/meta-client/src/test/java/org/apache/helix/metaclient/MetaClientTestUtil.java
@@ -4,7 +4,7 @@ import java.util.concurrent.TimeUnit;
 
 
 public class MetaClientTestUtil {
-  public static final long WAIT_DURATION =  TimeUnit.MINUTES.toMicros(1);
+  public static final long WAIT_DURATION =  TimeUnit.MINUTES.toMillis(1);
   public interface Verifier {
     boolean verify()
         throws Exception;
diff --git a/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/CreatePuppy.java b/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/CreatePuppy.java
index 3e28df06b..3940f79ab 100644
--- a/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/CreatePuppy.java
+++ b/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/CreatePuppy.java
@@ -64,8 +64,7 @@ public class CreatePuppy extends AbstractPuppy {
 
   @Override
   protected void cleanup() {
-    // Implement the recovery logic by deleting the created documents
-    _metaclient.recursiveDelete(_parentPath);
+    // Cleanup logic in test case
   }
 
   private boolean shouldIntroduceError() {
diff --git a/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/DeletePuppy.java b/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/DeletePuppy.java
index e0e1b7b5c..1aa9d4d72 100644
--- a/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/DeletePuppy.java
+++ b/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/DeletePuppy.java
@@ -58,7 +58,7 @@ public class DeletePuppy extends AbstractPuppy {
 
   @Override
   protected void cleanup() {
-    _metaclient.recursiveDelete(_parentPath);
+    // Do nothing
   }
 
   private boolean shouldIntroduceError() {
diff --git a/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/GetPuppy.java b/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/GetPuppy.java
index fe24b2bd3..4af1c4df3 100644
--- a/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/GetPuppy.java
+++ b/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/GetPuppy.java
@@ -59,7 +59,6 @@ public class GetPuppy extends AbstractPuppy {
 
   @Override
   protected void cleanup() {
-    _metaclient.recursiveDelete(_parentPath);
   }
 
   private boolean shouldIntroduceError() {
diff --git a/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/SetPuppy.java b/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/SetPuppy.java
index c0de4ece7..3385b8673 100644
--- a/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/SetPuppy.java
+++ b/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/SetPuppy.java
@@ -61,7 +61,6 @@ public class SetPuppy extends AbstractPuppy {
 
   @Override
   protected void cleanup() {
-    _metaclient.recursiveDelete(_parentPath);
   }
 
   private boolean shouldIntroduceError() {
diff --git a/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/TestMultiThreadStressZKClient.java b/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/TestMultiThreadStressZKClient.java
index 5ee026bc1..6a01fffa7 100644
--- a/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/TestMultiThreadStressZKClient.java
+++ b/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/TestMultiThreadStressZKClient.java
@@ -52,7 +52,7 @@ public class TestMultiThreadStressZKClient extends ZkMetaClientTestBase {
   public void testCreatePuppy() {
     _zkMetaClient.create(zkParentKey, "test");
 
-    PuppySpec puppySpec = new org.apache.helix.metaclient.puppy.PuppySpec(PuppyMode.REPEAT, 0.2f, new ExecDelay(5000, 0.1f), 5);
+    PuppySpec puppySpec = new PuppySpec(PuppyMode.REPEAT, 0.2f, new ExecDelay(5000, 0.1f), 5);
     CreatePuppy createPuppy = new CreatePuppy(_zkMetaClient, puppySpec);
     CreatePuppy createPuppy2 = new CreatePuppy(_zkMetaClient, puppySpec);
     CreatePuppy createPuppy3 = new CreatePuppy(_zkMetaClient, puppySpec);
@@ -189,7 +189,7 @@ public class TestMultiThreadStressZKClient extends ZkMetaClientTestBase {
     AtomicInteger globalChildChangeCounter = new AtomicInteger();
     ChildChangeListener childChangeListener = (changedPath, changeType) -> {
       globalChildChangeCounter.addAndGet(1);
-      System.out.println("-------------- Child change detected: " + changeType + " at path: " + changedPath + " number of changes: " + globalChildChangeCounter.get());
+      System.out.println("-------------- Child change detected: " + changeType + " at path: " + changedPath + ". Number of total changes: " + globalChildChangeCounter.get());
     };
 
     _zkMetaClient.subscribeChildChanges(zkParentKey, childChangeListener, false);
@@ -219,8 +219,6 @@ public class TestMultiThreadStressZKClient extends ZkMetaClientTestBase {
       globalChildChangeCounter.addAndGet(1);
       System.out.println("-------------- Child change detected: " + changeType + " at path: " + changedPath + " number of changes: " + globalChildChangeCounter.get());
     };
-
-
     _zkMetaClient.subscribeChildChanges(zkParentKey, childChangeListener, false);
 
     PuppySpec puppySpec = new PuppySpec(PuppyMode.REPEAT, 0.2f, new ExecDelay(5000, 0.1f), 5);
diff --git a/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/UpdatePuppy.java b/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/UpdatePuppy.java
index 721d507eb..5af055f74 100644
--- a/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/UpdatePuppy.java
+++ b/meta-client/src/test/java/org/apache/helix/metaclient/impl/zk/TestMultiThreadStressTest/UpdatePuppy.java
@@ -64,7 +64,6 @@ public class UpdatePuppy extends AbstractPuppy {
 
   @Override
   protected void cleanup() {
-    _metaclient.recursiveDelete(_parentPath);
   }
 
   private boolean shouldIntroduceError() {
diff --git a/meta-client/src/test/java/org/apache/helix/metaclient/puppy/AbstractPuppy.java b/meta-client/src/test/java/org/apache/helix/metaclient/puppy/AbstractPuppy.java
index bfbbb915d..9ce21fc15 100644
--- a/meta-client/src/test/java/org/apache/helix/metaclient/puppy/AbstractPuppy.java
+++ b/meta-client/src/test/java/org/apache/helix/metaclient/puppy/AbstractPuppy.java
@@ -55,30 +55,23 @@ public abstract class AbstractPuppy implements Runnable {
   @Override
   public void run() {
     try {
-      while (true) {
+      while (!Thread.currentThread().isInterrupted()) {
         try {
+          Thread.sleep(getPuppySpec().getExecDelay().getNextDelay());
           bark();
+        } catch (InterruptedException e) {
+          break;
         } catch (Exception e) {
           incrementUnhandledErrorCounter();
           e.printStackTrace();
         }
-
-        if (getPuppySpec().getMode() == PuppyMode.ONE_OFF) {
-          cleanup();
-          break;
-        } else {
-          try {
-            Thread.sleep(getPuppySpec().getExecDelay().getNextDelay());
-          } catch (InterruptedException e) {
-            cleanup();
-            break;
-            // Handle interruption if necessary
-          }
-        }
       }
     } catch (Exception e) {
       e.printStackTrace();
     }
+    finally {
+      cleanup();
+    }
   }
 
   public PuppySpec getPuppySpec() {