From 94a74ed09f254a97d842049900bbbd82d67532da Mon Sep 17 00:00:00 2001 From: yito88 Date: Sun, 23 Jun 2024 21:31:47 +0200 Subject: [PATCH 1/2] fix to catch exceptions --- scalardb/src/scalardb/transfer.clj | 38 +++++++++++------------ scalardb/src/scalardb/transfer_append.clj | 33 ++++++++++---------- 2 files changed, 34 insertions(+), 37 deletions(-) diff --git a/scalardb/src/scalardb/transfer.clj b/scalardb/src/scalardb/transfer.clj index 03b9819..50b63ff 100644 --- a/scalardb/src/scalardb/transfer.clj +++ b/scalardb/src/scalardb/transfer.clj @@ -127,19 +127,16 @@ (assoc op :type :fail :error {:results results}))))) (defn- read-record - "Read a record with a transaction. If read fails, this function returns nil." + "Read a record with a transaction. If read fails, an exception is thrown." [tx storage i] - (try - ;; Need Storage API to read the transaction metadata - (let [tx-result (.get tx (prepare-get i)) - result (.get storage (prepare-get i))] - ;; Put the same balance to check conflicts with in-flight transactions - (->> (calc-new-balance tx-result 0) - (prepare-put i) - (.put tx)) - result) - (catch CrudException _ nil) - (catch ExecutionException _ nil))) + ;; Need Storage API to read the transaction metadata + (let [tx-result (.get tx (prepare-get i)) + result (.get storage (prepare-get i))] + ;; Put the same balance to check conflicts with in-flight transactions + (->> (calc-new-balance tx-result 0) + (prepare-put i) + (.put tx)) + result)) (defn read-all-with-retry [test n] @@ -150,15 +147,16 @@ (scalar/prepare-transaction-service! test) (scalar/prepare-storage-service! test)) test - (let [tx (scalar/start-transaction test) - results (doall (map #(read-record tx @(:storage test) %) (range n)))] - (try + (try + (let [tx (scalar/start-transaction test) + results (doall (map #(read-record tx @(:storage test) %) + (range n)))] (.commit tx) - (if (some nil? results) nil results) - (catch Exception e - ;; The transaction conflicted - (warn (.getMessage e)) - nil))))) + results) + (catch Exception e + ;; The transaction conflicted + (warn (.getMessage e)) + nil)))) (defrecord TransferClient [initialized? n initial-balance max-txs] client/Client diff --git a/scalardb/src/scalardb/transfer_append.clj b/scalardb/src/scalardb/transfer_append.clj index 4de723d..bfa169b 100644 --- a/scalardb/src/scalardb/transfer_append.clj +++ b/scalardb/src/scalardb/transfer_append.clj @@ -129,30 +129,29 @@ :start-fail)) (defn- scan-records + "Scan records with a transaction. If the scan fails, an exception is thrown." [tx id] - (try - (let [results (.scan tx (prepare-scan id))] - ;; Put the same balance to check conflicts with in-flight transactions - (->> (prepare-put id - (-> results first calc-new-age) - (-> results first (calc-new-balance 0))) - (.put tx)) - results) - (catch CrudException _ nil))) + (let [results (.scan tx (prepare-scan id))] + ;; Put the same balance to check conflicts with in-flight transactions + (->> (prepare-put id + (-> results first calc-new-age) + (-> results first (calc-new-balance 0))) + (.put tx)) + results)) (defn scan-all-records-with-retry [test n] (scalar/check-transaction-connection! test) (scalar/with-retry scalar/prepare-transaction-service! test - (let [tx (scalar/start-transaction test) - results (doall (map #(scan-records tx %) (range n)))] - (try + (try + (let [tx (scalar/start-transaction test) + results (doall (map #(scan-records tx %) (range n)))] (.commit tx) - (if (some nil? results) nil results) - (catch Exception e - ;; The transaction conflicted - (warn (.getMessage e)) - nil))))) + results) + (catch Exception e + ;; The transaction conflicted + (warn (.getMessage e)) + nil)))) (defrecord TransferClient [initialized? n initial-balance max-txs] client/Client From f7aaa0c54c39cbe0a62d916fa8955e0821a4c709 Mon Sep 17 00:00:00 2001 From: yito88 Date: Sun, 23 Jun 2024 22:26:06 +0200 Subject: [PATCH 2/2] fix for lint and fix test for group commit --- scalardb/src/scalardb/transfer.clj | 4 +--- scalardb/src/scalardb/transfer_append.clj | 3 +-- scalardb/test/scalardb/core_test.clj | 4 +++- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/scalardb/src/scalardb/transfer.clj b/scalardb/src/scalardb/transfer.clj index 50b63ff..e7ea196 100644 --- a/scalardb/src/scalardb/transfer.clj +++ b/scalardb/src/scalardb/transfer.clj @@ -14,9 +14,7 @@ Result) (com.scalar.db.io IntValue Key) - (com.scalar.db.exception.storage ExecutionException) - (com.scalar.db.exception.transaction CrudException - UnknownTransactionStatusException))) + (com.scalar.db.exception.transaction UnknownTransactionStatusException))) (def ^:private ^:const TABLE "transfer") (def ^:private ^:const ACCOUNT_ID "account_id") diff --git a/scalardb/src/scalardb/transfer_append.clj b/scalardb/src/scalardb/transfer_append.clj index bfa169b..9197376 100644 --- a/scalardb/src/scalardb/transfer_append.clj +++ b/scalardb/src/scalardb/transfer_append.clj @@ -13,8 +13,7 @@ Scan$Ordering Scan$Ordering$Order Result) - (com.scalar.db.exception.transaction CrudException - UnknownTransactionStatusException) + (com.scalar.db.exception.transaction UnknownTransactionStatusException) (com.scalar.db.io IntValue Key))) diff --git a/scalardb/test/scalardb/core_test.clj b/scalardb/test/scalardb/core_test.clj index 5c39604..00d00de 100644 --- a/scalardb/test/scalardb/core_test.clj +++ b/scalardb/test/scalardb/core_test.clj @@ -25,7 +25,9 @@ (condp = column "tx_id" (Optional/of (TextValue. column id)) "tx_created_at" (Optional/of (BigIntValue. column (long 1566376246))) - "tx_state" (Optional/of (IntValue. column (Integer/parseInt id))))))) + "tx_state" (Optional/of (IntValue. column (Integer/parseInt id))) + ;; for the coordinator table + "tx_child_ids" (Optional/empty))))) (def mock-db (reify