You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@zookeeper.apache.org by "Kezhu Wang (Jira)" <ji...@apache.org> on 2023/02/28 03:58:00 UTC
[jira] [Resolved] (ZOOKEEPER-4525) Thread leaks occur when resolve address failed.
[ https://issues.apache.org/jira/browse/ZOOKEEPER-4525?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kezhu Wang resolved ZOOKEEPER-4525.
-----------------------------------
Resolution: Duplicate
> Thread leaks occur when resolve address failed.
> -----------------------------------------------
>
> Key: ZOOKEEPER-4525
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-4525
> Project: ZooKeeper
> Issue Type: Bug
> Components: java client
> Affects Versions: 3.6.3
> Environment: {code:java}
> import org.apache.zookeeper.ClientCnxn;
> import org.apache.zookeeper.ZooKeeper;
> import org.apache.zookeeper.server.ZooKeeperThread;
> import java.lang.reflect.Field;
> public class Main extends Thread {
> public static void main(String[] args) {
> new Main().start();
> }
> @Override
> public void run() {
> System.setProperty("zookeeper.serverCnxnFactory", "org.apache.zookeeper.server.NettyServerCnxnFactory");
> System.setProperty("zookeeper.clientCnxnSocket", "org.apache.zookeeper.ClientCnxnSocketNetty");
> ZooKeeperThread eventThread = null;
> try {
> ZooKeeper zooKeeper = new ZooKeeper("a.local:4096", 50000, watchedEvent -> {
> });
> Field cnxnField = zooKeeper.getClass().getDeclaredField("cnxn");
> cnxnField.setAccessible(true);
> ClientCnxn clientCnxn = (ClientCnxn) cnxnField.get(zooKeeper);
> Field eventThreadField = clientCnxn.getClass().getDeclaredField("eventThread");
> eventThreadField.setAccessible(true);
> eventThread = (ZooKeeperThread) eventThreadField.get(clientCnxn);
> zooKeeper.close();
> } catch (Exception ignore) {
> ignore.printStackTrace();
> }
> System.out.println(eventThread.getState());
> }
> }
> {code}
> Reporter: houshuai
> Priority: Major
> Attachments: stacktrace.txt
>
>
> In version 3.6. When connecting zookeeper using domain name with Netty. If the domain name failed to resolve, calling Zookeeper::close cannot close the EventThread. It will cause thread leaks.
>
> When resolve address failed, the connect thread in ClientCnxn throws an UnknownHostException. ClientCnxnSocketNetty.firstConnect has not been initialized.
>
> When the close method is called, it calls firstConnect.countDown().It will throw a NullPointerException and the thread cannot be closed properly.
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)