cassandra-4.0-beta4 启动期间遇到异常请求的许可 (0) 必须为正

问题描述

  • 操作系统: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_estimatessystem.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_esimatessystem 表的快照目录上。去掉那些,你应该会很好。