【发布时间】:2017-12-28 10:33:06
【问题描述】:
我正在 Cassandra 中运行 DELETE 查询。这与具有 IF EXISTS 子句的几个 UPDATE 查询同时发生。预期的行为是,当 DELETE 到达时,它将被执行,然后不会执行后续的 UPDATE,因为 IF EXISTS 子句将解析为 false,因为删除将发生。
这不是一致性问题,因为 Cassandra“集群”是在 docker 容器中运行的单个节点。我查看了日志并在跟踪级别捕获了成功删除与不成功删除相比的 cassandra 日志输出。似乎在失败的情况下,删除根本没有被执行。
删除成功:
删除在第 2 行处理。
更新后立即处理并且不应用,因为删除的行不再存在。
TRACE [Native-Transport-Requests-4] 2017-07-21 14:27:37,012 Message.java:516 - Received: QUERY DELETE FROM monitored_compliance_rules WHERE organisation_id='2' AND id=2cde2468-1c04-480c-9e24-681c04480c9e[pageSize = 5000], v=4/v4
TRACE [Native-Transport-Requests-4] 2017-07-21 14:27:37,012 QueryProcessor.java:212 - Process org.apache.cassandra.cql3.statements.DeleteStatement@77bb560f @CL.LOCAL_ONE
TRACE [Native-Transport-Requests-1] 2017-07-21 14:27:37,013 Message.java:516 - Received: EXECUTE 346d975e583adeeb6aadbf60e16d9d26 with 4 values at consistency LOCAL_ONE, v=4/v4
TRACE [Native-Transport-Requests-1] 2017-07-21 14:27:37,013 QueryProcessor.java:519 - [1] 'java.nio.HeapByteBuffer[pos=0 lim=4 cap=4]'
TRACE [Native-Transport-Requests-1] 2017-07-21 14:27:37,013 QueryProcessor.java:519 - [2] 'java.nio.HeapByteBuffer[pos=0 lim=12 cap=12]'
TRACE [Native-Transport-Requests-1] 2017-07-21 14:27:37,013 QueryProcessor.java:519 - [3] 'java.nio.HeapByteBuffer[pos=0 lim=1 cap=1]'
TRACE [Native-Transport-Requests-1] 2017-07-21 14:27:37,013 QueryProcessor.java:519 - [4] 'java.nio.HeapByteBuffer[pos=0 lim=16 cap=16]'
TRACE [Native-Transport-Requests-1] 2017-07-21 14:27:37,013 QueryProcessor.java:212 - Process org.apache.cassandra.cql3.statements.UpdateStatement@6d551622 @CL.LOCAL_ONE
TRACE [Native-Transport-Requests-1] 2017-07-21 14:27:37,013 MessagingService.java:945 - /172.18.0.4 sending PAXOS_PREPARE to 3255@/172.18.0.4
TRACE [Native-Transport-Requests-1] 2017-07-21 14:27:37,013 MessagingService.java:948 - Message-to-self TYPE:MUTATION VERB:PAXOS_PREPARE going over MessagingService
TRACE [MutationStage-3] 2017-07-21 14:27:37,015 MessagingService.java:945 - /172.18.0.4 sending REQUEST_RESPONSE to 3255@/172.18.0.4
TRACE [MutationStage-3] 2017-07-21 14:27:37,015 MessagingService.java:948 - Message-to-self TYPE:REQUEST_RESPONSE VERB:REQUEST_RESPONSE going over MessagingService
TRACE [RequestResponseStage-5] 2017-07-21 14:27:37,016 PrepareCallback.java:64 - Prepare response PrepareResponse(true, Commit(bdbe3ea0-6e20-11e7-bc6a-52488cbcfc11, [analytics.monitored_compliance_rules] key=2 columns=[[] | [days_processed days_to_process state]]
Row: id=4c6ddcbe-c3f7-4287-addc-bec3f7628718 | days_processed=0, days_to_process=180, state=initializing), Commit(13814000-1dd2-11b2-8080-808080808080, [analytics.monitored_compliance_rules] key=2 columns=[[] | []])) from /172.18.0.4
TRACE [Native-Transport-Requests-1] 2017-07-21 14:27:37,016 ReadCallback.java:101 - Blockfor is 1; setting up requests to /172.18.0.4
TRACE [Native-Transport-Requests-1] 2017-07-21 14:27:37,016 AbstractReadExecutor.java:116 - reading data locally
TRACE [Native-Transport-Requests-4] 2017-07-21 14:27:37,016 Tracing.java:188 - request complete
TRACE [Native-Transport-Requests-4] 2017-07-21 14:27:37,017 Message.java:535 - Responding: EMPTY RESULT, v=4/v4
TRACE [Native-Transport-Requests-1] 2017-07-21 14:27:37,018 ReadCallback.java:147 - Read: 5 ms.
TRACE [Native-Transport-Requests-1] 2017-07-21 14:27:37,019 Tracing.java:188 - request complete
TRACE [Native-Transport-Requests-1] 2017-07-21 14:27:37,019 Message.java:535 - Responding: ROWS [[applied](analytics, monitored_compliance_rules), org.apache.cassandra.db.marshal.BooleanType]
| false
---, v=4/v4
删除失败
第 1 行收到删除但未处理。
更新在第 2 行收到并成功发生,因为 IF EXISTS 子句解析为 true,因为删除从未发生。
TRACE [Native-Transport-Requests-1] 2017-07-21 14:27:37,353 Message.java:516 - Received: QUERY DELETE FROM monitored_compliance_rules WHERE organisation_id='2' AND id=5c1b69cd-653d-4d6b-9b69-cd653dbd6b8c[pageSize = 5000], v=4/v4
TRACE [Native-Transport-Requests-3] 2017-07-21 14:27:37,369 Message.java:516 - Received: EXECUTE 346d975e583adeeb6aadbf60e16d9d26 with 4 values at consistency LOCAL_ONE, v=4/v4
TRACE [Native-Transport-Requests-3] 2017-07-21 14:27:37,369 QueryProcessor.java:519 - [1] 'java.nio.HeapByteBuffer[pos=0 lim=4 cap=4]'
TRACE [Native-Transport-Requests-3] 2017-07-21 14:27:37,369 QueryProcessor.java:519 - [2] 'java.nio.HeapByteBuffer[pos=0 lim=12 cap=12]'
TRACE [Native-Transport-Requests-3] 2017-07-21 14:27:37,369 QueryProcessor.java:519 - [3] 'java.nio.HeapByteBuffer[pos=0 lim=1 cap=1]'
TRACE [Native-Transport-Requests-3] 2017-07-21 14:27:37,369 QueryProcessor.java:519 - [4] 'java.nio.HeapByteBuffer[pos=0 lim=16 cap=16]'
TRACE [Native-Transport-Requests-3] 2017-07-21 14:27:37,369 QueryProcessor.java:212 - Process org.apache.cassandra.cql3.statements.UpdateStatement@6d551622 @CL.LOCAL_ONE
TRACE [Native-Transport-Requests-3] 2017-07-21 14:27:37,369 MessagingService.java:945 - /172.18.0.4 sending PAXOS_PREPARE to 3263@/172.18.0.4
TRACE [Native-Transport-Requests-3] 2017-07-21 14:27:37,370 MessagingService.java:948 - Message-to-self TYPE:MUTATION VERB:PAXOS_PREPARE going over MessagingService
TRACE [MutationStage-2] 2017-07-21 14:27:37,374 MessagingService.java:945 - /172.18.0.4 sending REQUEST_RESPONSE to 3263@/172.18.0.4
TRACE [MutationStage-2] 2017-07-21 14:27:37,376 MessagingService.java:948 - Message-to-self TYPE:REQUEST_RESPONSE VERB:REQUEST_RESPONSE going over MessagingService
TRACE [RequestResponseStage-4] 2017-07-21 14:27:37,377 PrepareCallback.java:64 - Prepare response PrepareResponse(true, Commit(bdbe3ea0-6e20-11e7-bc6a-52488cbcfc11, [analytics.monitored_compliance_rules] key=2 columns=[[] | [days_processed days_to_process state]]
Row: id=4c6ddcbe-c3f7-4287-addc-bec3f7628718 | days_processed=0, days_to_process=180, state=initializing), Commit(13814000-1dd2-11b2-8080-808080808080, [analytics.monitored_compliance_rules] key=2 columns=[[] | []])) from /172.18.0.4
TRACE [Native-Transport-Requests-3] 2017-07-21 14:27:37,378 ReadCallback.java:101 - Blockfor is 1; setting up requests to /172.18.0.4
TRACE [Native-Transport-Requests-3] 2017-07-21 14:27:37,378 AbstractReadExecutor.java:116 - reading data locally
TRACE [Native-Transport-Requests-3] 2017-07-21 14:27:37,379 ReadCallback.java:147 - Read: 10 ms.
TRACE [Native-Transport-Requests-3] 2017-07-21 14:27:37,380 MessagingService.java:945 - /172.18.0.4 sending PAXOS_PROPOSE to 3264@/172.18.0.4
TRACE [Native-Transport-Requests-3] 2017-07-21 14:27:37,380 MessagingService.java:948 - Message-to-self TYPE:MUTATION VERB:PAXOS_PROPOSE going over MessagingService
TRACE [MutationStage-2] 2017-07-21 14:27:37,381 MessagingService.java:945 - /172.18.0.4 sending REQUEST_RESPONSE to 3264@/172.18.0.4
TRACE [MutationStage-2] 2017-07-21 14:27:37,383 MessagingService.java:948 - Message-to-self TYPE:REQUEST_RESPONSE VERB:REQUEST_RESPONSE going over MessagingService
TRACE [RequestResponseStage-2] 2017-07-21 14:27:37,383 ProposeCallback.java:62 - Propose response true from /172.18.0.4
TRACE [Native-Transport-Requests-3] 2017-07-21 14:27:37,383 Tracing.java:188 - request complete
TRACE [Native-Transport-Requests-3] 2017-07-21 14:27:37,383 Message.java:535 - Responding: ROWS [[applied](analytics, monitored_compliance_rules), org.apache.cassandra.db.marshal.BooleanType]
| true
---, v=4/v4
失败不会在驱动程序中返回异常。它只是默默地失败了。
为什么有时不会发生这种删除?这是否表明 Cassandra 本身存在某种错误?
【问题讨论】:
-
您使用的是哪个版本的 cassandra?
-
最新版本:3.11
标签: cassandra