[
https://issues.apache.org/jira/browse/ZOOKEEPER-1091?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13064277#comment-13064277
]
Daniel Lord commented on ZOOKEEPER-1091:
----------------------------------------
I am running in to this issue now as well. It appears to me as though this is
only a problem when running more than one zookeeper client per application
instance where they have a chroot path that is multiple znodes deep. Normally
that is not a problem since I share the zookeeper client across many
threads/services in the application. However, I do have one use case where
there is an administrative task that needs to span multiple zookeeper
"clusters" that are partitioned by chroot.
For example I have two clusters of application nodes running under different
zookeeper chroots -- say "/blah/version1" and "/blah/version2". There are many
application nodes in the "version1" cluster and many in the "version2" cluster.
These each use chroot to logically partition themselves and it works great.
Each application node holds a single zookeeper client.
I also have an administrative node that is responsible for monitoring both of
these clusters. This node has two zookeeper clients one for each chroot'd
cluster. This works perfectly so long as I am not disconnected from the
ensemble. As soon as I get disconnected I start getting a flood of this
StringIndexOutOfBoundsException.
I can easily cause this to happen by having more than one zookeeper client in a
single process where both zookeeper clients are using a chroot path that is
multiple levels deep. If I connect to a locally running standalone zookeeper
server as soon as I stop and restart the zookeeper server I get this exception.
I have no problems with this test if I run only a single zookeeper client or I
run with chroot paths that are only a single znode.
> when the chrootPath of ClientCnxn is not null and the Watches of zooKeeper is
> not null and the method primeConnection(SelectionKey k) of ClientCnxn
> Occurred again for some reason ,then the wrong watcher clientPath is sended
> to server
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: ZOOKEEPER-1091
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1091
> Project: ZooKeeper
> Issue Type: Bug
> Components: java client
> Affects Versions: 3.3.3
> Environment: Linux version 2.6.18-194.el5
> ([email protected]) (gcc version 4.1.2 20080704 (Red Hat
> 4.1.2-48)) #1 SMP Fri Apr 2 14:58:14 EDT 2010
> Reporter: zhangyouming
> Priority: Critical
> Fix For: 3.3.3
>
> Original Estimate: 1h
> Remaining Estimate: 1h
>
> if the chrootPath of ClientCnxn is not null and the Watches of zooKeeper is
> not null; and then for some reason(like zookeeper server stop and start), the
> zookeeper client will primeConnection to server again and tell server the
> watcher path,but the path is wrong,it show be serverpath but not
> clientpath;if the wrong watcher clientPath is sended to server,
> the exception will occurr, the exceptions:
> 2011-06-10 04:33:16,935 [pool-2-thread-30-SendThread(DB1-6:2181)] WARN
> org.apache.zookeeper.ClientCnxn - Session 0x5302c4403a30232 for server
> DB1-6/192.168.1.6:2181, unexpected error, closing socket connection and
> attempting reconnect
> java.lang.StringIndexOutOfBoundsException: String index out of range: -6
> at java.lang.String.substring(String.java:1937)
> at java.lang.String.substring(String.java:1904)
> at
> org.apache.zookeeper.ClientCnxn$SendThread.readResponse(ClientCnxn.java:794)
> at org.apache.zookeeper.ClientCnxn$SendThread.doIO(ClientCnxn.java:881)
> at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1130)
>
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira