diff options
| author | Ivar Refsdal <ivar.refsdal@nsd.no> | 2021-09-27 14:36:24 +0200 |
|---|---|---|
| committer | Ivar Refsdal <ivar.refsdal@nsd.no> | 2021-09-27 14:36:24 +0200 |
| commit | 79acba1b716685bb601e05a2e9824eefd19d1f5d (patch) | |
| tree | d014d59f94251e52689a03e4ab399aa1ea0dc374 | |
| parent | Release 0.2.37 (diff) | |
| download | fiinha-79acba1b716685bb601e05a2e9824eefd19d1f5d.tar.gz fiinha-79acba1b716685bb601e05a2e9824eefd19d1f5d.tar.xz | |
Add :valid-payload? function
| -rw-r--r-- | README.md | 2 | ||||
| -rw-r--r-- | src/com/github/ivarref/yoltq/impl.clj | 4 | ||||
| -rw-r--r-- | test/com/github/ivarref/yoltq/virtual_test.clj | 11 |
3 files changed, 17 insertions, 0 deletions
@@ -146,6 +146,8 @@ the payload. It can be added like this: ; An optional map of queue opts {:allow-cas-failure? true ; Treat [:db.cas ...] failures as success. This is one way for the ; consumer function to ensure idempotence. + :valid-payload? (fn [payload] (some? (:id payload))) ; Function that verifies payload. Should return truthy for valid payloads. + ; The default function always returns true. :max-retries 10}) ; Specify maximum number of times an item will be retried. Default: 100 ``` diff --git a/src/com/github/ivarref/yoltq/impl.clj b/src/com/github/ivarref/yoltq/impl.clj index 02cc102..8b75fc3 100644 --- a/src/com/github/ivarref/yoltq/impl.clj +++ b/src/com/github/ivarref/yoltq/impl.clj @@ -40,6 +40,7 @@ (if-let [q-config (get-in config [:handlers queue-name])] (let [id (u/squuid) depends-on (get q-config :depends-on (fn [_] nil)) + valid-payload? (get q-config :valid-payload? (fn [_] true)) opts (merge (when-let [deps (depends-on payload)] {:depends-on deps}) @@ -49,6 +50,9 @@ {} (or capture-bindings [])) (pr-str-safe :capture-bindings))] + (when-not (valid-payload? payload) + (log/error "Payload was not valid. Payload was:" payload) + (throw (ex-info (str "Payload was not valid: " payload) {:payload payload}))) (log/debug "queue item" (str id) "for queue" queue-name "is pending status" u/status-init) (merge {:com.github.ivarref.yoltq/id id diff --git a/test/com/github/ivarref/yoltq/virtual_test.clj b/test/com/github/ivarref/yoltq/virtual_test.clj index 8f7b454..acd3eb7 100644 --- a/test/com/github/ivarref/yoltq/virtual_test.clj +++ b/test/com/github/ivarref/yoltq/virtual_test.clj @@ -331,3 +331,14 @@ (yq/add-consumer! :a identity) (timbre/with-level :fatal (is (thrown? Exception @(d/transact conn [(yq/put :a {:broken #'=})])))))) + + +(deftest payload-verifier + (let [conn (u/empty-conn)] + (yq/init! {:conn conn}) + (yq/add-consumer! :q identity + {:valid-payload? (fn [{:keys [id]}] + (some? id))}) + @(d/transact conn [(yq/put :q {:id "a"})]) + (timbre/with-level :fatal + (is (thrown? Exception @(d/transact conn [(yq/put :q {})]))))))
\ No newline at end of file |
