From f0c439d8cbbf822366bceb600260b901dcd98911 Mon Sep 17 00:00:00 2001 From: James Henderson Date: Fri, 13 Dec 2019 16:28:27 +0000 Subject: [PATCH] Fix CaS when the doc's provided in a different order, #362 --- crux-core/src/crux/tx.clj | 4 ++-- crux-test/test/crux/tx_test.clj | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/crux-core/src/crux/tx.clj b/crux-core/src/crux/tx.clj index 425293441f..3aa771d8b4 100644 --- a/crux-core/src/crux/tx.clj +++ b/crux-core/src/crux/tx.clj @@ -74,8 +74,8 @@ valid-time (or at-valid-time transact-time) {:keys [content-hash] :as entity} (first (idx/entities-at snapshot [eid] valid-time transact-time))] - {:pre-commit-fn #(if (= (c/new-id content-hash) - (c/new-id old-v)) + {:pre-commit-fn #(if (= (db/get-single-object object-store snapshot (c/new-id content-hash)) + (db/get-single-object object-store snapshot (c/new-id old-v))) (let [correct-state? (not (nil? (db/get-single-object object-store snapshot (c/new-id new-v))))] (when-not correct-state? (log/error "CAS, incorrect doc state for:" (c/new-id new-v) "tx id:" tx-id)) diff --git a/crux-test/test/crux/tx_test.clj b/crux-test/test/crux/tx_test.clj index 304ab70626..e1942e00f7 100644 --- a/crux-test/test/crux/tx_test.clj +++ b/crux-test/test/crux/tx_test.clj @@ -632,3 +632,10 @@ (t/is (= {:crux.db/id :foo, :bar :baz} (api/entity (api/db *api*) :foo)))))) + +(t/deftest cas-map-ordering-362 + (sync-submit-tx *api* [[:crux.tx/put {:crux.db/id :foo, :foo :bar}]]) + (sync-submit-tx *api* [[:crux.tx/cas {:foo :bar, :crux.db/id :foo} {:crux.db/id :foo, :foo :baz}]]) + + (t/is (= {:crux.db/id :foo, :foo :baz} + (api/entity (api/db *api*) :foo))))