Use the Version tab in Jira to rename the versions. Much easier. 

====================
Jordan Zimmerman

Begin forwarded message:

> From: "Cameron McKenzie (JIRA)" <[email protected]>
> Date: May 24, 2016 at 8:21:12 PM EST
> To: [email protected]
> Subject: [jira] [Updated] (CURATOR-326) createContainers fails silently if 
> client is not connected
> Reply-To: [email protected]
> 
> 
>     [ 
> https://issues.apache.org/jira/browse/CURATOR-326?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
>  ]
> 
> Cameron McKenzie updated CURATOR-326:
> -------------------------------------
>    Fix Version/s:     (was: 3.1.1)
>                       (was: 2.10.1)
>                   3.2.0
>                   2.11.0
> 
>> createContainers fails silently if client is not connected
>> ----------------------------------------------------------
>> 
>>                Key: CURATOR-326
>>                URL: https://issues.apache.org/jira/browse/CURATOR-326
>>            Project: Apache Curator
>>         Issue Type: Bug
>>         Components: Framework
>>   Affects Versions: 3.1.0, 2.10.0
>>           Reporter: Gerd Behrmann
>>           Assignee: Jordan Zimmerman
>>            Fix For: 2.11.0, 3.2.0
>> 
>> 
>> Calling CuratorFramework#createContainers on a non-existing path while the 
>> client is not yet connected to the server (e.g. server is down while client 
>> is starting) fails silently if enough time goes by before the server is 
>> started. 
>> The following unit test demonstrates the issue:
>> {code:java}
>> package dmg.cells.zookeeper;
>> import org.apache.curator.framework.CuratorFramework;
>> import org.apache.curator.framework.CuratorFrameworkFactory;
>> import org.apache.curator.retry.RetryForever;
>> import org.apache.curator.test.TestingServer;
>> import org.apache.curator.test.Timing;
>> import org.junit.Test;
>> import static junit.framework.TestCase.assertNotNull;
>> public class CuratorTest
>> {
>>    @Test
>>    public void createContainersTest() throws Exception
>>    {
>>        TestingServer server = new TestingServer(false);
>>        Timing timing = new Timing();
>>        CuratorFramework client = 
>> CuratorFrameworkFactory.newClient(server.getConnectString(), 
>> timing.session(), timing.connection(), new RetryForever(100));
>>        try {
>>            new Thread() {
>>                @Override
>>                public void run()
>>                {
>>                    try {
>>                        Thread.sleep(30000);
>>                        server.start();
>>                    } catch (Exception e) {
>>                        e.printStackTrace();
>>                    }
>>                }
>>            }.start();
>>            client.start();
>>            client.createContainers("/this/does/not/exist");
>>            
>> assertNotNull(client.checkExists().forPath("/this/does/not/exist"));
>>        } finally {
>>            client.close();
>>            server.stop();
>>        }
>>    }
>> }
>> {code}
>> The delay before starting the server is significant. If only sleeping for 10 
>> seconds, the unit test passes. Sleeping for 30 seconds triggers a code path 
>> in Curator that will cause CuratorFramework#createContainers to wait until 
>> the server is started, yet it returns without exception and without creating 
>> the path. The assertion fails.
>> I tracked down the issue to ExistingBuilderImpl#pathInForeground in which 
>> the call to ZKPath#mkdirs is wrapped with a try-catch that ignores the 
>> exception. Thus the failed operation is neither retried nor propagated.
>> Specifically this causes silent problems with PathAndChildren cache as it 
>> uses EnsureContainer#ensure during startup to ensure that the path exists. 
>> This internally calls the above createContainers. When it fails silently, 
>> the recipe fails to register a watcher on the non-existing path and 
>> consequently the cache stays empty even when the server finally is started 
>> and the path is populated by another client.
> 
> 
> 
> --
> This message was sent by Atlassian JIRA
> (v6.3.4#6332)

Reply via email to