Glen Wallace created CURATOR-271:
------------------------------------

             Summary: Curator does not run sync callback on supplied Executor
                 Key: CURATOR-271
                 URL: https://issues.apache.org/jira/browse/CURATOR-271
             Project: Apache Curator
          Issue Type: Bug
          Components: Framework
            Reporter: Glen Wallace


It appears that Apache Curator does not execute the sync callback on the 
supplied Executor in at least one case.

This issue described is currently (2015-10-14) present in master

Sample code outline:
{code:java}
BackgroundCallback myCallback = ...;
Executor myExecutor = ...;
String myZkPath = ...;
CuratorFramework myCurator = ...;
curator.sync()
  .inBackground(myCallback, myExecutor)
  .forPath(myZkPath);
{code}

This should execute {{myCallback}} on the {{myExecutor}} executor, it does not 
and instead executes {{myCallback}} on what is presumeably a ZooKeeper thread.


Looking at the {{org.apache.curator.framework.imps.SyncBuilderImpl}} code we 
have
{code:java}
public Pathable inBackground(BackgroundCallback callback, Executor executor) {
  backgrounding = new Backgrounding(callback, executor);
  return this;
}
{code}
However the only matching constructor in 
{{org.apache.curator.framework.imps.Backgrounding}} is 
{{Backgrounding(BackgroundCallback callback, Object context)}}

It seems that {{SyncBuilderImpl#inBackground(BackgroundCallback,Executor)}} 
should be using the following Backgrounding constructor 
{{Backgrounding(CuratorFrameworkImpl, BackgroundCallback, Executor)}}


A workaround looks to be using the following method and passing a null context 
object:
{code:java}
  public Pathable inBackground(BackgroundCallback callback, Object context, 
Executor executor)
{code}

A very quick skim suggests that it is only {{SyncBuilderImpl}} that has the 
issue the other {{org.apache.curator.framework.imps.*BuilderImpl}} classes seem 
to be fine.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to