【发布时间】:2017-10-31 15:56:31
【问题描述】:
我有 2 个 Cassandra 节点。我有一个包含 3 个文本字段(所有键)和 2 个计数器的表。射频为 2。
我在表格中添加了另一个计数器列。错误地,我在该列上发布了 drop 。我将应用程序恢复到旧版本以不使用该列。
我添加了另一个计数器列,用不同的名称替换掉掉的那个。我更改了应用程序以使用该新列。
现在,我所有具有 where 子句的查询都失败并出现此错误:
ReadFailure: 来自服务器的错误: code=1300 [Replica(s) failed to execute read] message="操作失败 - 收到 0 个响应和 2 个失败" info={'failures': 2, 'received_responses': 0, 'required_responses': 1, '一致性': 'ONE'}
我在debug.log看到这个:
java.lang.IllegalStateException: [payable, income, to_pay, value] 不是 [revenue to_pay value] 的子集
payable 是旧列,已被删除,to_pay 是新列。
发生了什么?
Cassandra 版本是 3.11。
附言。我尝试修复,它正在运行。会有帮助吗?
编辑:
表架构:
CREATE TABLE backend_platform_prod.stats_counters (
date text,
key text,
revenue counter,
to_pay counter,
value counter,
PRIMARY KEY (date, key)
) WITH CLUSTERING ORDER BY (key ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';
有一个payable counter 字段,已被删除。
我尝试使用copy to 备份数据,删除表并重新创建它,然后使用copy from 进行恢复。它现在可以工作了,虽然有些数据似乎丢失了(不是很重要)。
我在system_schema.dropped_columns 中看到payable 列,但在system_schema.columns 中没有。
【问题讨论】:
-
您当前的架构是什么,您能否举例说明您尝试运行的查询之一?
-
@RebeccaNelson 请参阅编辑。
-
@vfsoraki 你能分享一下你发现了什么以及你是如何解决这个问题的吗?
-
@cacert 阅读最后一段。我导出数据,删除表并重新创建它。
-
@vfsoraki 您是否尝试过修复或压缩但没有帮助?
标签: cassandra