- OS:Ubuntu20.4
- JDK:JDK11
- Cassandra版本:apache-Cassandra-4.0-beta4
错误消息:
ERROR [main] 2021-03-25 14:16:15,561 CassandraDaemon.java:822 - Exception encountered during startup
org.apache.cassandra.exceptions.TruncateException: Error during truncate: java.lang.IllegalArgumentException: Requested permits (0) must be positive
at org.apache.cassandra.cql3.statements.TruncateStatement.executeLocally(TruncateStatement.java:96)
at org.apache.cassandra.cql3.QueryProcessor.executeInternal(QueryProcessor.java:323)
at org.apache.cassandra.db.SystemKeyspace.clearAllEstimates(SystemKeyspace.java:1337)
at org.apache.cassandra.service.StorageService.cleanupSizeEstimates(StorageService.java:3908)
at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:353)
at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:676)
at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:800)
Caused by: java.lang.RuntimeException: java.lang.IllegalArgumentException: Requested permits (0) must be positive
at org.apache.cassandra.db.ColumnFamilyStore.runWithCompactionsDisabled(ColumnFamilyStore.java:2329)
at org.apache.cassandra.db.ColumnFamilyStore.runWithCompactionsDisabled(ColumnFamilyStore.java:2276)
at org.apache.cassandra.db.ColumnFamilyStore.truncateBlocking(ColumnFamilyStore.java:2256)
at org.apache.cassandra.cql3.statements.TruncateStatement.executeLocally(TruncateStatement.java:92)
... 6 common frames omitted
Caused by: java.lang.IllegalArgumentException: Requested permits (0) must be positive
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:189)
at com.google.common.util.concurrent.RateLimiter.checkPermits(RateLimiter.java:430)
at com.google.common.util.concurrent.RateLimiter.reserve(RateLimiter.java:285)
at com.google.common.util.concurrent.RateLimiter.acquire(RateLimiter.java:273)
at org.apache.cassandra.db.ColumnFamilyStore.snapshotWithoutFlush(ColumnFamilyStore.java:1801)
at org.apache.cassandra.db.ColumnFamilyStore.snapshot(ColumnFamilyStore.java:1981)
at org.apache.cassandra.db.ColumnFamilyStore.snapshot(ColumnFamilyStore.java:1957)
at org.apache.cassandra.db.ColumnFamilyStore.snapshot(ColumnFamilyStore.java:1945)
at org.apache.cassandra.db.ColumnFamilyStore$4.run(ColumnFamilyStore.java:2242)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at org.apache.cassandra.db.ColumnFamilyStore.runWithCompactionsDisabled(ColumnFamilyStore.java:2325)
... 9 common frames omitted
ASF Slack的#cassandra频道上也有人问过这个问题,所以我在这里重新发布,以供后人参考。
根据堆栈跟踪,在尝试访问system.size_estimates
和system.table_estimates
的快照子目录时,它似乎失败了。
目录可能是由于停电而损坏的(首先是重新启动节点的原因(,尽管我没有足够的信息来证实这一点。
在任何情况下,解决方法都是手动删除data/system/*
中size_estimates/
和table_estimates/
的快照目录。这将使卡桑德拉能够成功启动。干杯
第页。S贾博超在ASF Slack上确认,该解决方案允许他们在节点上启动C*。
我找到了另一个解决方案
rm -rf apache-cassandra-4.0-beta4/data/saved_caches/*
rm -rf apache-cassandra-4.0-beta4/data/data/system/*
这是一个失败节点的重新启动吗?看起来好像有什么东西试图重播TRUNCATE
命令,但所需的东西没有被发送(根据CASSANDRA-14905(。
为了解决这个问题,我将从磁盘中删除system_schema
密钥空间,然后重新启动。它应该从另一个节点重新流式传输模式。
如果这不起作用,您可能最终不得不擦除数据并重建节点。如果仍然不起作用,您可能需要将其删除/重新加入集群。
编辑:
根据Erick的回答,问题似乎出在system
密钥空间中size_estimates
和table_esimates
表的快照目录上。去掉那些,你就应该很好。
注意到docker容器也存在同样的问题。当我检查日志
docker日志59d4e2890a34
它强调了这个问题。即
INFO [main] 2022-07-22 09:24:16,961 ColumnFamilyStore.java:2242 - Truncating system.size_estimates
INFO [main] 2022-07-22 09:24:16,964 ColumnFamilyStore.java:2279 - Truncating system.size_estimates with truncatedAt=1658481856962
org.apache.cassandra.exceptions.TruncateException: Error during truncate: java.lang.IllegalArgumentException: Requested permits (0) must be positive
使用
码头集装箱rm 59d4e2890a34
我删除了现有的容器并重新创建了它。新版本运行良好。我不确定是什么损坏了system.size_estimates
。