You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@curator.apache.org by ra...@apache.org on 2017/05/28 15:40:32 UTC
[1/5] curator git commit: CURATOR-106: Ensure background operations
happen in the background thread to avoid stack overflows when retrying
guaranteed operations
Repository: curator
Updated Branches:
refs/heads/CURATOR-106 [created] ec4d74a78
CURATOR-106: Ensure background operations happen in the background thread to avoid stack overflows when retrying guaranteed operations
Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/757e45f6
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/757e45f6
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/757e45f6
Branch: refs/heads/CURATOR-106
Commit: 757e45f6d9ff6a471642616daf0668d8a64c4324
Parents: 302661a
Author: Stig Rohde Døssing <sd...@it-minds.dk>
Authored: Fri Apr 21 22:03:27 2017 +0200
Committer: Stig Rohde Døssing <sd...@it-minds.dk>
Committed: Fri Apr 21 23:18:58 2017 +0200
----------------------------------------------------------------------
curator-framework/pom.xml | 6 +++
.../framework/imps/CuratorFrameworkImpl.java | 2 +-
.../framework/imps/TestFrameworkBackground.java | 42 ++++++++++++++++++++
.../nodes/TestPersistentEphemeralNode.java | 4 ++
4 files changed, 53 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/curator/blob/757e45f6/curator-framework/pom.xml
----------------------------------------------------------------------
diff --git a/curator-framework/pom.xml b/curator-framework/pom.xml
index 9080308..2860658 100644
--- a/curator-framework/pom.xml
+++ b/curator-framework/pom.xml
@@ -67,6 +67,12 @@
<artifactId>slf4j-log4j12</artifactId>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
http://git-wip-us.apache.org/repos/asf/curator/blob/757e45f6/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java b/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java
index 6aa9f66..545b7a4 100644
--- a/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java
+++ b/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java
@@ -504,7 +504,7 @@ public class CuratorFrameworkImpl implements CuratorFramework
boolean isInitialExecution = (event == null);
if ( isInitialExecution )
{
- performBackgroundOperation(operationAndData);
+ queueOperation(operationAndData);
return;
}
http://git-wip-us.apache.org/repos/asf/curator/blob/757e45f6/curator-framework/src/test/java/org/apache/curator/framework/imps/TestFrameworkBackground.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestFrameworkBackground.java b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestFrameworkBackground.java
index 8e21929..50cb006 100644
--- a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestFrameworkBackground.java
+++ b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestFrameworkBackground.java
@@ -40,9 +40,13 @@ import org.testng.annotations.Test;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference;
+import org.mockito.Mockito;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
public class TestFrameworkBackground extends BaseClassForTests
{
@@ -328,6 +332,44 @@ public class TestFrameworkBackground extends BaseClassForTests
CloseableUtils.closeQuietly(client);
}
}
+
+ /**
+ * CURATOR-106: Background operations must always run in the background to avoid potential stack overflows when doing guaranteed operations
+ */
+ @Test
+ public void testBackgroundOperationsAreExecutedInTheBackground() throws Exception {
+ Timing timing = new Timing();
+ CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), timing.session(), timing.connection(), new RetryOneTime(1));
+ try
+ {
+ client.start();
+ client.blockUntilConnected(30, TimeUnit.SECONDS);
+
+ final CountDownLatch latch = new CountDownLatch(1);
+ final AtomicReference<Thread> backgroundThread = new AtomicReference<Thread>();
+
+ OperationAndData<Void> operation = (OperationAndData<Void>)Mockito.mock(OperationAndData.class);
+ Mockito.doAnswer(new Answer() {
+ @Override
+ public Void answer(InvocationOnMock invocation) throws Throwable {
+ backgroundThread.set(Thread.currentThread());
+ latch.countDown();
+ return null;
+ }
+ }).when(operation).callPerformBackgroundOperation();
+
+ ((CuratorFrameworkImpl)client).processBackgroundOperation(operation, null);
+
+ latch.await();
+
+ Assert.assertNotNull(backgroundThread.get());
+ Assert.assertNotEquals(Thread.currentThread(), backgroundThread.get());
+ }
+ finally
+ {
+ CloseableUtils.closeQuietly(client);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/curator/blob/757e45f6/curator-recipes/src/test/java/org/apache/curator/framework/recipes/nodes/TestPersistentEphemeralNode.java
----------------------------------------------------------------------
diff --git a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/nodes/TestPersistentEphemeralNode.java b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/nodes/TestPersistentEphemeralNode.java
index ef8a45a..4855876 100644
--- a/curator-recipes/src/test/java/org/apache/curator/framework/recipes/nodes/TestPersistentEphemeralNode.java
+++ b/curator-recipes/src/test/java/org/apache/curator/framework/recipes/nodes/TestPersistentEphemeralNode.java
@@ -633,7 +633,11 @@ public class TestPersistentEphemeralNode extends BaseClassForTests
node.waitForInitialCreate(timing.forWaiting().seconds(), TimeUnit.SECONDS);
assertTrue(Arrays.equals(curator.getData().forPath(node.getActualPath()), initialData));
+ Trigger dataChangedTrigger = Trigger.dataChanged();
+ curator.getData().usingWatcher(dataChangedTrigger).forPath(node.getActualPath());
+
node.setData(updatedData);
+ assertTrue(dataChangedTrigger.firedWithin(timing.forWaiting().seconds(), TimeUnit.SECONDS));
assertTrue(Arrays.equals(curator.getData().forPath(node.getActualPath()), updatedData));
server.restart();
[5/5] curator git commit: Closes #215
Posted by ra...@apache.org.
Closes #215
Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/ec4d74a7
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/ec4d74a7
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/ec4d74a7
Branch: refs/heads/CURATOR-106
Commit: ec4d74a78ab76b81bfb58c7ca77a583397b4609a
Parents: 7971a3d
Author: randgalt <ra...@apache.org>
Authored: Sun May 28 10:40:12 2017 -0500
Committer: randgalt <ra...@apache.org>
Committed: Sun May 28 10:40:12 2017 -0500
----------------------------------------------------------------------
----------------------------------------------------------------------
[2/5] curator git commit: CURATOR-106: Fix TestNamespaceFacade using
empty connect strings
Posted by ra...@apache.org.
CURATOR-106: Fix TestNamespaceFacade using empty connect strings
Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/de823f60
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/de823f60
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/de823f60
Branch: refs/heads/CURATOR-106
Commit: de823f600162cc27a23325ec97894b454b790b62
Parents: 757e45f
Author: Stig Rohde Døssing <sd...@it-minds.dk>
Authored: Fri Apr 21 22:03:58 2017 +0200
Committer: Stig Rohde Døssing <sd...@it-minds.dk>
Committed: Fri Apr 21 23:18:59 2017 +0200
----------------------------------------------------------------------
.../org/apache/curator/framework/imps/TestNamespaceFacade.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/curator/blob/de823f60/curator-framework/src/test/java/org/apache/curator/framework/imps/TestNamespaceFacade.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestNamespaceFacade.java b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestNamespaceFacade.java
index 9357d00..265b3ea 100644
--- a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestNamespaceFacade.java
+++ b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestNamespaceFacade.java
@@ -53,7 +53,7 @@ public class TestNamespaceFacade extends BaseClassForTests
public void testGetNamespace() throws Exception
{
CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), new RetryOneTime(1));
- CuratorFramework client2 = CuratorFrameworkFactory.builder().namespace("snafu").retryPolicy(new RetryOneTime(1)).connectString("").build();
+ CuratorFramework client2 = CuratorFrameworkFactory.builder().namespace("snafu").retryPolicy(new RetryOneTime(1)).connectString(server.getConnectString()).build();
try
{
client.start();
@@ -232,7 +232,7 @@ public class TestNamespaceFacade extends BaseClassForTests
@Test
public void testUnfixForEmptyNamespace() {
- CuratorFramework client = CuratorFrameworkFactory.builder().namespace("").retryPolicy(new RetryOneTime(1)).connectString("").build();
+ CuratorFramework client = CuratorFrameworkFactory.builder().namespace("").retryPolicy(new RetryOneTime(1)).connectString(server.getConnectString()).build();
CuratorFrameworkImpl clientImpl = (CuratorFrameworkImpl) client;
Assert.assertEquals(clientImpl.unfixForNamespace("/foo/bar"), "/foo/bar");
[4/5] curator git commit: Merge branch 'CURATOR-106' of
github.com:srdo/curator into CURATOR-106
Posted by ra...@apache.org.
Merge branch 'CURATOR-106' of github.com:srdo/curator into CURATOR-106
Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/7971a3da
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/7971a3da
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/7971a3da
Branch: refs/heads/CURATOR-106
Commit: 7971a3da4149cea1194bf33dda491241e53b9beb
Parents: ff02a7c 51d7396
Author: randgalt <ra...@apache.org>
Authored: Sun May 28 10:28:58 2017 -0500
Committer: randgalt <ra...@apache.org>
Committed: Sun May 28 10:28:58 2017 -0500
----------------------------------------------------------------------
curator-framework/pom.xml | 6 +++
.../framework/imps/CuratorFrameworkImpl.java | 35 +++++-----------
.../framework/imps/TestFrameworkBackground.java | 42 ++++++++++++++++++++
.../framework/imps/TestNamespaceFacade.java | 4 +-
.../nodes/TestPersistentEphemeralNode.java | 4 ++
5 files changed, 65 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
[3/5] curator git commit: CURATOR-106: Simplify
CuratorFrameworkImpl.processBackgroundOperation a bit
Posted by ra...@apache.org.
CURATOR-106: Simplify CuratorFrameworkImpl.processBackgroundOperation a bit
Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/51d73964
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/51d73964
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/51d73964
Branch: refs/heads/CURATOR-106
Commit: 51d73964ef9e41a200571beb4724741b8765913f
Parents: de823f6
Author: Stig Rohde Døssing <st...@gmail.com>
Authored: Sat Apr 22 16:00:06 2017 +0200
Committer: Stig Rohde Døssing <st...@gmail.com>
Committed: Sat Apr 22 16:00:06 2017 +0200
----------------------------------------------------------------------
.../framework/imps/CuratorFrameworkImpl.java | 33 ++++++--------------
1 file changed, 10 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/curator/blob/51d73964/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java b/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java
index 545b7a4..1ad974c 100644
--- a/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java
+++ b/curator-framework/src/main/java/org/apache/curator/framework/imps/CuratorFrameworkImpl.java
@@ -502,35 +502,22 @@ public class CuratorFrameworkImpl implements CuratorFramework
<DATA_TYPE> void processBackgroundOperation(OperationAndData<DATA_TYPE> operationAndData, CuratorEvent event)
{
boolean isInitialExecution = (event == null);
- if ( isInitialExecution )
- {
+ if (isInitialExecution) {
queueOperation(operationAndData);
return;
}
-
- boolean doQueueOperation = false;
- do
- {
- if ( RetryLoop.shouldRetry(event.getResultCode()) )
- {
- doQueueOperation = checkBackgroundRetry(operationAndData, event);
- break;
- }
-
- if ( operationAndData.getCallback() != null )
- {
- sendToBackgroundCallback(operationAndData, event);
- break;
- }
-
- processEvent(event);
+
+ if(RetryLoop.shouldRetry(event.getResultCode()) && checkBackgroundRetry(operationAndData, event)) {
+ queueOperation(operationAndData);
+ return;
}
- while ( false );
- if ( doQueueOperation )
- {
- queueOperation(operationAndData);
+ if (operationAndData.getCallback() != null) {
+ sendToBackgroundCallback(operationAndData, event);
+ return;
}
+
+ processEvent(event);
}
<DATA_TYPE> void queueOperation(OperationAndData<DATA_TYPE> operationAndData)