由于 Cassandra 后端逻辑删除异常导致 JanusGraph 查询失败

JanusGraph query failure due to Cassandra backend tombstone exception

我也对此提出了 GitHub issue。粘贴在下面。

当我们 运行 使用 Cassandra 后端的 JanusGraph 时,一段时间后,JanusGraph 开始抛出以下错误并进入不可用状态。

JanusGraph 日志:

466489 [gremlin-server-exec-6] INFO org.janusgraph.diskstorage.util.BackendOperation - Temporary exception during backend operation [EdgeStoreKeys]. Attempting backoff retry. org.janusgraph.diskstorage.TemporaryBackendException: Temporary failure in storage backend at io.vavr.API$Match$Case0.apply(API.java:3174) at io.vavr.API$Match.of(API.java:3137) at org.janusgraph.diskstorage.cql.CQLKeyColumnValueStore.lambda$static[=10=] (CQLKeyColumnValueStore.java:123) at io.vavr.control.Try.getOrElseThrow(Try.java:671) at org.janusgraph.diskstorage.cql.CQLKeyColumnValueStore.getKeys (CQLKeyColumnValueStore.java:405)

Caused by: com.datastax.driver.core.exceptions.ReadFailureException: Cassandra failure during read query at consistency QUORUM (1 responses were required but only 0 replica responded, 1 failed) at com.datastax.driver.core.exceptions.ReadFailureException.copy(ReadFailureException.java:130) at com.datastax.driver.core.exceptions.ReadFailureException.copy(ReadFailureException.java:30)

Cassandra 日志:

WARN [ReadStage-2] 2019-07-19 11:40:02,980 ReadCommand.java:569 - Read 74 live rows and 100001 tombstone cells for query SELECT * FROM janusgraph.edgestore WHERE column1 >= 02 AND column1 <= 03 LIMIT 100 (see tombstone_warn_threshold)

ERROR [ReadStage-2] 2019-07-19 11:40:02,980 StorageProxy.java:1896 - Scanned over 100001 tombstones during query 'SELECT * FROM janusgraph.edgestore WHERE column1 >= 02 AND column1 <= 03 LIMIT 100' (last scanned row partion key was ((00000000002b9d88), 02)); query aborted

相关问题: Cassandra failure during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded, 1 failed)

问题:

1) Edge 更新是否存储为导致墓碑的新项目?。 (因为 janus 是 titan 的一个分支)。 https://github.com/JanusGraph/janusgraph/issues/934

2) 正确的方法是什么。 ?

任何 solution/indications 都会很有帮助。

[更新]

1) 对边的更新不会导致 JanusGraph 中出现墓碑。

2)解决方案: - 根据答案,在删除 edge/vertex 的基础上将 gc_grace_seconds 减少到一个较低的值。 - 也可以考虑根据需要调整cassandra.yaml中的"tombstone_failure_threshold"。

对于 Cassandra,墓碑是一个标志,指示应删除记录,这可能发生在明确请求删除操作之后,或者一旦生存时间 (TTL) 期满。执行删除操作后,带有逻辑删除的记录将保留 gc_grace_seconds 中定义的时间,默认为 10 天。

通常 运行 nodetool repair janusgraph edgestore(根据提供的错误日志)应该能够解决问题。如果错误仍然存​​在,您可能需要减小 table 的 gc_grace_seconds 值,如 here.

所述

有关墓碑的更多信息: