diff --git a/src/views/base_subscribed_views.clj b/src/views/base_subscribed_views.clj index 9d9bcbd..ae8e634 100644 --- a/src/views/base_subscribed_views.clj +++ b/src/views/base_subscribed_views.clj @@ -34,10 +34,10 @@ (defn subscribe-and-compute "Subscribe a view and return the initial values." [db persistence templates vs namespace subscriber-key] - (with-retry - (j/with-db-transaction [t db :isolation :serializable] - (let [view-data (persist/subscribe! persistence t templates namespace vs subscriber-key)] - (initial-view t vs templates (:view view-data)))))) + (let [view-data (persist/subscribe! persistence templates namespace vs subscriber-key)] + (with-retry + (j/with-db-transaction [t db :isolation :serializable] + (initial-view t vs templates (:view view-data)))))) ;; Deltas look like: ;; [{view-sig1 delta, view-sig2 delta, ...} {view-sig3 delta, ...}] diff --git a/src/views/persistence/core.clj b/src/views/persistence/core.clj index f45105f..f140ccb 100644 --- a/src/views/persistence/core.clj +++ b/src/views/persistence/core.clj @@ -1,7 +1,7 @@ (ns views.persistence.core) (defprotocol IPersistence - (subscribe! [this db templates namespace view-sig subscriber-key] + (subscribe! [this templates namespace view-sig subscriber-key] "Subscribes a subscriber with subscriber-key to a view with signature view-sig. Templates is a map of all defined view templates and db is a jdbc transcation handle for the database from which initial diff --git a/src/views/persistence/memory.clj b/src/views/persistence/memory.clj index c41fd27..073373c 100644 --- a/src/views/persistence/memory.clj +++ b/src/views/persistence/memory.clj @@ -35,7 +35,7 @@ (deftype ViewsMemoryPersistence [subbed-views] IPersistence (subscribe! - [this db templates namespace view-sig subscriber-key] + [this templates namespace view-sig subscriber-key] (let [sv (swap! subbed-views (fn [sv] (update-in sv [namespace] ns-subscribe! view-sig templates subscriber-key)))] (get-in sv [namespace view-sig :view-data]))) diff --git a/test/views/base_subscribed_views_test.clj b/test/views/base_subscribed_views_test.clj index b699861..88de995 100644 --- a/test/views/base_subscribed_views_test.clj +++ b/test/views/base_subscribed_views_test.clj @@ -64,7 +64,7 @@ (subscribe-views base-subbed-views {:subscriber-key 1 :views [[:users] [:user-posts 1]]}) (Thread/sleep 10) (is (= (subscriptions (:persistence config) bsv/default-ns [[:users] [:user-posts 1]]) - {[:users] #{1}})) + {[:users] #{1}, [:user-posts 1] #{1}})) (disconnect base-subbed-views {:subscriber-key 1}) (is (= (subscriptions (:persistence config) bsv/default-ns [[:users] [:user-posts 1]]) {})))) @@ -93,7 +93,7 @@ (is (= sent-deltas %3)) (swap! sent conj [%1 %2 %3])) base-subbed-views (BaseSubscribedViews. (assoc config :send-fn send-fn))] - (subscribe! (:persistence config) vf/db vf/templates bsv/default-ns [:users] 1) + (subscribe! (:persistence config) vf/templates bsv/default-ns [:users] 1) (broadcast-deltas base-subbed-views deltas nil) (is (= 1 (count @sent))) (is (= 1 (ffirst @sent))) @@ -111,7 +111,7 @@ 1)) (swap! sent conj [a b deltas-out])) base-subbed-views (BaseSubscribedViews. (assoc config :send-fn send-fn :templates templates))] - (subscribe! (:persistence config) vf/db vf/templates bsv/default-ns [:users] 1) + (subscribe! (:persistence config) vf/templates bsv/default-ns [:users] 1) (Thread/sleep 10) (broadcast-deltas base-subbed-views deltas nil) (is (= 1 (count @sent))) @@ -131,7 +131,7 @@ 1)) (swap! sent conj [a b deltas-out])) base-subbed-views (BaseSubscribedViews. (assoc config :send-fn send-fn :templates templates))] - (subscribe! (:persistence config) vf/db vf/templates bsv/default-ns [:users] 1) + (subscribe! (:persistence config) vf/templates bsv/default-ns [:users] 1) (Thread/sleep 10) (broadcast-deltas base-subbed-views deltas nil) (is (= 1 (count @sent))) diff --git a/test/views/db/core_test.clj b/test/views/db/core_test.clj index a2fd937..e3911ec 100644 --- a/test/views/db/core_test.clj +++ b/test/views/db/core_test.clj @@ -34,7 +34,7 @@ (deftest vexec-sends-deltas (let [view-sig [:user-posts (:id @vf/user-fixture)] - sub-to-it (persist/subscribe! @memory vf/db vf/templates default-ns view-sig (:id @vf/user-fixture)) + sub-to-it (persist/subscribe! @memory vf/templates default-ns view-sig (:id @vf/user-fixture)) posted (first (vdb/vexec! test-config (vf/insert-post-tmpl (:id @vf/user-fixture) "title" "body"))) delta-vs (ffirst (first @received-deltas)) insert-delta (-> @received-deltas ffirst second first :insert-deltas first)] @@ -46,7 +46,7 @@ (deftest with-view-transaction-sends-deltas (let [view-sig [:user-posts (:id @vf/user-fixture)] - sub-to-it (persist/subscribe! @memory vf/db vf/templates default-ns view-sig (:id @vf/user-fixture)) + sub-to-it (persist/subscribe! @memory vf/templates default-ns view-sig (:id @vf/user-fixture)) posted (first (vdb/with-view-transaction [tc test-config] (vdb/vexec! tc (vf/insert-post-tmpl (:id @vf/user-fixture) "title" "body")))) diff --git a/test/views/persistence/memory_test.clj b/test/views/persistence/memory_test.clj index 06309dc..8ed7699 100644 --- a/test/views/persistence/memory_test.clj +++ b/test/views/persistence/memory_test.clj @@ -7,7 +7,7 @@ (deftest memory-persistence (let [p (new-memory-persistence) - vd (subscribe! p vf/db vf/templates :ns [:users] 1)] + vd (subscribe! p vf/templates :ns [:users] 1)] ;; This sort of test isn't great as it depends on the internal ;; structure unrlated to memory persistence. (is (= vd @@ -18,7 +18,7 @@ {[:users] #{1}})) ;; Subsequent calls return same vd. - (is (= (subscribe! p vf/db vf/templates :ns [:users] 3) + (is (= (subscribe! p vf/templates :ns [:users] 3) vd)) ;; And subscription is correct. @@ -30,12 +30,12 @@ {})) ;; Duplicate subscription is ignored. - (subscribe! p vf/db vf/templates :ns [:users] 3) + (subscribe! p vf/templates :ns [:users] 3) (is (= (subscriptions p :ns [[:users]]) {[:users] #{1 3}})) ;; We can subscribe to multiple views. - (subscribe! p vf/db vf/templates :ns [:user-posts 1] 5) + (subscribe! p vf/templates :ns [:user-posts 1] 5) (is (= (subscriptions p :ns [[:users] [:user-posts 1]]) {[:users] #{1 3} [:user-posts 1] #{5}})) @@ -53,8 +53,8 @@ [[:user-posts 1]])) ;; Unsubscribe all works. - (subscribe! p vf/db vf/templates :ns [:users] 7) - (subscribe! p vf/db vf/templates :ns [:users] 5) + (subscribe! p vf/templates :ns [:users] 7) + (subscribe! p vf/templates :ns [:users] 5) (unsubscribe-all! p :ns 5) (is (= (subscriptions p :ns [[:users] [:user-posts 1]]) {[:users] #{7}}))))