Sean Busbey created ACCUMULO-2966:
-------------------------------------

             Summary: ZooReaderWriter.getInstance ignores changes in params
                 Key: ACCUMULO-2966
                 URL: https://issues.apache.org/jira/browse/ACCUMULO-2966
             Project: Accumulo
          Issue Type: Bug
          Components: fate
    Affects Versions: 1.6.0, 1.5.1, 1.5.0
            Reporter: Sean Busbey
            Priority: Minor
             Fix For: 1.5.2, 1.6.1, 1.7.0


the factory methods on ZooReaderWriter take parameters for servers, timeout, 
and authentication, but ignores if those parameters are different from the 
first invocation.

{code}

  public static synchronized ZooReaderWriter getInstance(String zookeepers, int 
timeInMillis, String scheme, byte[] auth) {
    if (instance == null)
      instance = new ZooReaderWriter(zookeepers, timeInMillis, scheme, auth);
    return instance;
  }

  /**
   * get an instance that retries when zookeeper connection errors occur
   * 
   * @return an instance that retries when Zookeeper connection errors occur.
   */
  public static synchronized IZooReaderWriter getRetryingInstance(String 
zookeepers, int timeInMillis, String scheme, byte[] auth) {

    if (retryingInstance == null) {
      IZooReaderWriter inst = getInstance(zookeepers, timeInMillis, scheme, 
auth);
      InvocationHandler ih = new RetryingInvocationHandler(inst);
      retryingInstance = (IZooReaderWriter) 
Proxy.newProxyInstance(ZooReaderWriter.class.getClassLoader(), new Class[] 
{IZooReaderWriter.class}, ih);
    }

    return retryingInstance;
  }
{code}

It should either keep a cache keyed on the parameter values or it should throw 
an exception when they differ from the existing instance.

Which one depends on wether the intent is to reuse objects or to have 
ZooReaderWriter be a proper singleton. I'm not sure from context, but I think 
the cache is the way to go.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to