由于 Cassandra 后端逻辑删除异常导致 JanusGraph 查询失败
JanusGraph query failure due to Cassandra backend tombstone exception
我也对此提出了 GitHub issue。粘贴在下面。
- JanusGraph 版本 - janusgraph-0.3.1
- 卡桑德拉 - cassandra:3.11.4
当我们 运行 使用 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.
所述
有关墓碑的更多信息:
我也对此提出了 GitHub issue。粘贴在下面。
- JanusGraph 版本 - janusgraph-0.3.1
- 卡桑德拉 - cassandra:3.11.4
当我们 运行 使用 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 的一个分支)。
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.
有关墓碑的更多信息: