Error occurs when call CuratorCache.start: Unable to read additional data from server sessionid

532 views Asked by At

As the title says, something goes wrong when calling CuratorCache.start. The problem occurs in my project, so I create a small test project to reproduce it.

Env

  • jdk17(or jdk11)
  • spring-cloud-starter-zookeeper-all 3.1.0 (with curator-recipes 5.1.0) or curator-recipes 5.2.0
  • zookeeper 3.6.X or 3.7.0
  • MacOS Monterey or CentOS7.4

pom.xml


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>curator-test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-all</artifactId>
            <version>3.1.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>curator-recipes</artifactId>
                    <groupId>org.apache.curator</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>5.2.0</version>
        </dependency>
    </dependencies>
    
</project>

Preparing data

add some String to zookeeper path: /test/1

Test code


var curator = CuratorFrameworkFactory.builder()
                .connectString("localhost:2181")
                .retryPolicy(new ExponentialBackoffRetry(1000, 3))
                .build();
        curator.start();
        var bytes = curator.getData().forPath("/test/1");
        System.out.println("value for path /test/1 is " + new String(bytes));

        var curatorCache = CuratorCache.builder(curator, "/test").build();
        curatorCache.listenable().addListener(
                CuratorCacheListener.builder()
                        .forCreates(node -> System.out.println(String.format("Node created: [%s]", node)))
                        .forChanges((oldNode, node) -> System.out.println(String.format("Node changed. Old: [%s] New: [%s]", oldNode, node)))
                        .forDeletes(oldNode -> System.out.println(String.format("Node deleted. Old value: [%s]", oldNode)))
                        .forInitialized(() -> System.out.println("Cache initialized"))
                        .build()
        );
        curatorCache.start();

The test codes mostly comes from CuratorCache Example from official, as the test code shows, I can read data from the zookeeper path, but when I call CuratorCache.start the exception is thrown:


2022-01-23 16:07:53.578  INFO 55099 --- [           main] org.apache.zookeeper.ClientCnxnSocket    : jute.maxbuffer value is 1048575 Bytes
2022-01-23 16:07:53.579  INFO 55099 --- [           main] org.apache.zookeeper.ClientCnxn          : zookeeper.request.timeout value is 0. feature enabled=false
2022-01-23 16:07:53.580  INFO 55099 --- [           main] o.a.c.f.imps.CuratorFrameworkImpl        : Default schema
2022-01-23 16:07:53.586  INFO 55099 --- [16.153.68:2181)] org.apache.zookeeper.ClientCnxn          : Opening socket connection to server 172.16.153.68/172.16.153.68:2181.
2022-01-23 16:07:53.586  INFO 55099 --- [16.153.68:2181)] org.apache.zookeeper.ClientCnxn          : SASL config status: Will not attempt to authenticate using SASL (unknown error)
2022-01-23 16:07:53.588  INFO 55099 --- [16.153.68:2181)] org.apache.zookeeper.ClientCnxn          : Socket connection established, initiating session, client: /192.168.195.34:49599, server: 172.16.153.68/172.16.153.68:2181
2022-01-23 16:07:53.639  INFO 55099 --- [16.153.68:2181)] org.apache.zookeeper.ClientCnxn          : Session establishment complete on server 172.16.153.68/172.16.153.68:2181, session id = 0x1007127ce8c071d, negotiated timeout = 40000
2022-01-23 16:07:53.640  INFO 55099 --- [ain-EventThread] o.a.c.f.state.ConnectionStateManager     : State change: CONNECTED
2022-01-23 16:07:53.644  INFO 55099 --- [ain-EventThread] o.a.c.framework.imps.EnsembleTracker     : New config event received: {}
2022-01-23 16:07:53.644  INFO 55099 --- [ain-EventThread] o.a.c.framework.imps.EnsembleTracker     : New config event received: {}
2022-01-23 16:07:53.829  WARN 55099 --- [           main] iguration$LoadBalancerCaffeineWarnLogger : Spring Cloud LoadBalancer is currently working with the default cache. You can switch to using Caffeine cache, by adding it and org.springframework.cache.caffeine.CaffeineCacheManager to the classpath.
2022-01-23 16:07:53.909  INFO 55099 --- [           main] org.test.Application                     : Started Application in 1.966 seconds (JVM running for 3.09)
2022-01-23 16:07:53.917  INFO 55099 --- [tor-Framework-0] o.a.c.f.imps.CuratorFrameworkImpl        : backgroundOperationsLoop exiting
2022-01-23 16:07:53.929  WARN 55099 --- [16.153.68:2181)] org.apache.zookeeper.ClientCnxn          : An exception was thrown while closing send thread for session 0x1007127ce8c071d.

org.apache.zookeeper.ClientCnxn$EndOfStreamException: Unable to read additional data from server sessionid 0x1007127ce8c071d, likely server has closed socket
    at org.apache.zookeeper.ClientCnxnSocketNIO.doIO(ClientCnxnSocketNIO.java:77) ~[zookeeper-3.6.3.jar:3.6.3]
    at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350) ~[zookeeper-3.6.3.jar:3.6.3]
    at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1290) ~[zookeeper-3.6.3.jar:3.6.3]

2022-01-23 16:07:54.036  INFO 55099 --- [ain-EventThread] org.apache.zookeeper.ClientCnxn          : EventThread shut down for session: 0x1007127ce8c071d
2022-01-23 16:07:54.036  INFO 55099 --- [ionShutdownHook] org.apache.zookeeper.ZooKeeper           : Session: 0x1007127ce8c071d closed

So is there anybody has some idea, thanks for your comments.

0

There are 0 answers