gpt4 book ai didi

java - cassandra ThriftServer 停止时出现 NullPointerException

转载 作者:行者123 更新时间:2023-11-30 02:41:03 25 4
gpt4 key购买 nike

我正在使用 cassandra 在我的应用程序上存储数据。一切都很顺利,直到我试图阻止它。停止时,有时我会收到 NullPointerException,如下所示:

15:58:56.869 ERROR [Thread-2] [CassandraDaemon.java:185] Exception in thread Thread[Thread-2,5,main]
java.lang.NullPointerException: null
at org.apache.cassandra.thrift.ThriftServer.stop(ThriftServer.java:70) [cassandra-all-2.2.6-E001.jar:2.2.6-E001]
at org.apache.cassandra.service.CassandraDaemon.stop(CassandraDaemon.java:452) [cassandra-all-2.2.6-E001.jar:2.2.6-E001]
at org.apache.cassandra.service.CassandraDaemon.deactivate(CassandraDaemon.java:564) [cassandra-all-2.2.6-E001.jar:2.2.6-E001]
at mypackage.CassandraDaemonForTest$1.run(CassandraDaemonForTest.java:96) [testutils-6.3.0.jar:na]

根据类源码,这是问题发生的地方:

public void stop()
{
if (server != null)
{
server.stopServer();
try
{
server.join();
}
catch (InterruptedException e)
{
logger.error("Interrupted while waiting thrift server to stop", e);
}
server = null;
}
}

显然,同一个 ThriftServer 的多个实例正在运行,当我尝试停用时,某些实例通过了空检查,并在调用实例上的下一个方法时导致问题。我的调试器显示在同一实例上至少有三次对此方法的调用:

method callstack

有什么建议可以解决这个问题吗?

最佳答案

此问题已在 CASSANDRA-12105 中报告并修复。 ,适用于版本 2.2.8、3.0.9、3.8 及更高版本。如果多个线程同时调用 stop,则可以在另一个线程检查完

后将 server 设置为 null
server != null

然后在以下调用中抛出 NullPointerException

server.stopServer(); 
// or
server.join();

method was made synchronized用于隔离检查和调用。

考虑升级。

关于java - cassandra ThriftServer 停止时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41682495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com