Cassandra 提示切换消息错误
Cassandra hinted handoff message error
这是关于一个 7 节点的 Cassandra 2.1.15 集群。我每 10 分钟在一个节点上收到此错误消息:
ERROR [HintedHandoff:83] 2016-12-20 09:49:25,906 CassandraDaemon.java:231 - Exception in thread Thread[HintedHandoff:83,1,main]
java.lang.AssertionError: null
at org.apache.cassandra.net.WriteCallbackInfo.<init>(WriteCallbackInfo.java:49) ~[apache-cassandra-2.1.15.jar:2.1.15]
at org.apache.cassandra.net.MessagingService.addCallback(MessagingService.java:608) ~[apache-cassandra-2.1.15.jar:2.1.15]
at org.apache.cassandra.net.MessagingService.sendRR(MessagingService.java:668) ~[apache-cassandra-2.1.15.jar:2.1.15]
at org.apache.cassandra.db.HintedHandOffManager.doDeliverHintsToEndpoint(HintedHandOffManager.java:474) ~[apache-cassandra-2.1.15.jar:2.1.15]
at org.apache.cassandra.db.HintedHandOffManager.deliverHintsToEndpoint(HintedHandOffManager.java:354) ~[apache-cassandra-2.1.15.jar:2.1.15]
at org.apache.cassandra.db.HintedHandOffManager.access0(HintedHandOffManager.java:93) ~[apache-cassandra-2.1.15.jar:2.1.15]
at org.apache.cassandra.db.HintedHandOffManager.run(HintedHandOffManager.java:565) ~[apache-cassandra-2.1.15.jar:2.1.15]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_73]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_73]
at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_73]
我尝试重启 de node,消息仍然出现。
我还尝试暂时禁用提示切换,但消息仍然出现(即使已禁用)。
失败的断言似乎是关于试图向自己发送消息:
https://github.com/apache/cassandra/blob/cassandra-2.1.15/src/java/org/apache/cassandra/net/WriteCallbackInfo.java
是什么原因导致的,我该如何解决?
编辑:我只看到节点上的 table system.hints
内有行有问题,而 target_id
是节点本身。
我想删除这些行可以解决这个问题。现在的问题是:我可以安全地这样做吗?
我找到了解决方案。事实上,有一个 nodetool
命令可以删除挂起的提示:truncatehints
.
https://docs.datastax.com/en/cassandra/2.1/cassandra/tools/toolsTruncateHints.html
问题已解决。然而,我不知道这些提示是如何保存下来的。
这是关于一个 7 节点的 Cassandra 2.1.15 集群。我每 10 分钟在一个节点上收到此错误消息:
ERROR [HintedHandoff:83] 2016-12-20 09:49:25,906 CassandraDaemon.java:231 - Exception in thread Thread[HintedHandoff:83,1,main]
java.lang.AssertionError: null
at org.apache.cassandra.net.WriteCallbackInfo.<init>(WriteCallbackInfo.java:49) ~[apache-cassandra-2.1.15.jar:2.1.15]
at org.apache.cassandra.net.MessagingService.addCallback(MessagingService.java:608) ~[apache-cassandra-2.1.15.jar:2.1.15]
at org.apache.cassandra.net.MessagingService.sendRR(MessagingService.java:668) ~[apache-cassandra-2.1.15.jar:2.1.15]
at org.apache.cassandra.db.HintedHandOffManager.doDeliverHintsToEndpoint(HintedHandOffManager.java:474) ~[apache-cassandra-2.1.15.jar:2.1.15]
at org.apache.cassandra.db.HintedHandOffManager.deliverHintsToEndpoint(HintedHandOffManager.java:354) ~[apache-cassandra-2.1.15.jar:2.1.15]
at org.apache.cassandra.db.HintedHandOffManager.access0(HintedHandOffManager.java:93) ~[apache-cassandra-2.1.15.jar:2.1.15]
at org.apache.cassandra.db.HintedHandOffManager.run(HintedHandOffManager.java:565) ~[apache-cassandra-2.1.15.jar:2.1.15]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_73]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_73]
at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_73]
我尝试重启 de node,消息仍然出现。 我还尝试暂时禁用提示切换,但消息仍然出现(即使已禁用)。
失败的断言似乎是关于试图向自己发送消息: https://github.com/apache/cassandra/blob/cassandra-2.1.15/src/java/org/apache/cassandra/net/WriteCallbackInfo.java
是什么原因导致的,我该如何解决?
编辑:我只看到节点上的 table system.hints
内有行有问题,而 target_id
是节点本身。
我想删除这些行可以解决这个问题。现在的问题是:我可以安全地这样做吗?
我找到了解决方案。事实上,有一个 nodetool
命令可以删除挂起的提示:truncatehints
.
https://docs.datastax.com/en/cassandra/2.1/cassandra/tools/toolsTruncateHints.html
问题已解决。然而,我不知道这些提示是如何保存下来的。