2017-07-22 7 views
1

私はCassandraでDELETEクエリを実行しています。これは、IF EXISTS句を持つ複数のUPDATEクエリと同時に発生します。予想される動作は、DELETEが到着したときに実行され、IF EXISTS句が削除が発生したときにFALSEとして解決されるため、後続のUPDATEは実行されないことです。Cassandra DELETEクエリが実行されていません。

これは一貫性の問題ではありません.Cassandra 'クラスタ'はドッキング・コンテナ内で実行されている単一のノードであるためです。私はログを見て、失敗した削除と比較して、正常な削除のために、トレースレベルで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 [email protected] @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 [email protected] @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 [email protected]/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 [email protected]/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 [email protected]2 @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 [email protected]/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 [email protected]/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 [email protected]/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 [email protected]/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 

エラーが発生した場合、ドライバで例外が返されません。それは完全に静かに失敗します。

なぜこの削除が行われないのですか?これはカサンドラ自身の何らかのバグを示していますか?

+0

どのバージョンのcassandraを使用していますか? – dilsingi

+0

最新バージョン:3.11 –

答えて

0

ここにはいくつか問題があります。

私はCassandraでDELETEクエリを実行しています。これは、IF NOT EXISTS句を持ついくつかのUPDATEクエリと同時に発生します。予想される動作は、DELETEが到着したときに実行され、IF NOT EXISTS句が削除が発生した場合に真となるため、後続のUPDATEは実行されないことです。

0)DELETEが、それはタイプミスではないですので、もし(あなたの説明に基づいて、(存在しない場合は挿入し)、それは実際にUPSERTあるUPDATEを発行しますので、その後IF NOT EXISTSは、trueになります、ノードを削除することができます'd)、それは正しいことをしていますか?

削除は1行目で受信されますが、処理されません。

更新プログラムは2行目に受信され、IF NOT EXISTS句が削除されなかったため真に解決されるため、正常に実行されます。

1)クエリにはCL:LOCAL_ONEが使用されています。これは、変更がクライアントに返される前に単一のノードによって承認されたことを意味します。何人かのノードが実際に書かれたことを保証しているという保証はありません。さらに、同じコーディネータにクエリを発行しても、コーディネータはそれらを異なるレプリカに送信することがあります。

2)ログ行は、書き込みがmemtableに実際にぶつかっている順序を示していません(コミットログへの書き込みが必要ですが、これは期待どおりの順序ではありません)。

+0

0)申し訳ありません私は質問に誤りがありました。実行中のクエリは実際にはIF EXISTSクエリです。正しい。 1)前述したように、これは単一ノードクラスタであるため、LOCAL_ONEはコンセプトの点で概念的にALLと同じです。 2)今後100ミリ秒後のアップデートが失敗した場合でも正常に実行されますので、DELETEが実行されるまでに数秒かかる場合(可能な場合)は、まったく起こりません。 –

関連する問題