问题描述
- 操作系统:Ubuntu20.04
- 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
解决方法
问题是 also asked on the #cassandra channel 上的 ASF Slack,所以我在此重新发布以供后人使用。
根据堆栈跟踪,尝试访问 system.size_estimates
和 system.table_estimates
的快照子目录时似乎失败。
虽然我没有足够的信息来确认这一点,但目录可能因断电而损坏(首先重新启动节点的原因)。
无论如何,解决方法是手动删除 size_estimates/
中 table_estimates/
和 data/system/*
的快照目录。这将允许 Cassandra 成功启动。干杯!
附言贾博超在 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 的回答,问题似乎出在 size_estimates
键空间中 table_esimates
和 system
表的快照目录上。去掉那些,你应该会很好。