2017-01-16 10 views
1

私はアプリケーションにデータを格納するためにcassandraを使用しています。私はそれを停止しようとするまですべてがうまく行く。NandPointerException on cassandra ThriftServer stop

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; 
    } 
} 

をApparrentlyは、同じThriftServerの複数のインスタンスが存在する停止時次のように、時々私はNullPointerExceptionがreveice私が非アクティブ化しようとすると、ヌルチェックに合格し、インスタンス上の次のメソッドを呼び出すときに問題が発生します。私のデバッガショー同じインスタンス上でこのメソッドに、少なくとも3つの呼び出し:どれがこの問題を解決する方法を提案し

method callstack

答えて

2

これは、バージョン2.2.8,3.0.9,3.8、およびそれ以上について、CASSANDRA-12105で報告され、修正されました。複数のスレッドが同時にstopを呼び出した場合、他のスレッドが

server != null 

をチェックして、次の呼び出し

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

method was made synchronizedためにNullPointerExceptionを投げた後、その後1はnullserverを設定することができます孤立した点検と呼び出し。

アップグレードを検討してください。