got vexec! partially working
This commit is contained in:
parent
d34e37e4ca
commit
5a25838a69
|
@ -1,7 +1,7 @@
|
|||
(ns views.base-subscribed-views
|
||||
(:require
|
||||
[views.persistor :refer [subscribe-to-view! unsubscribe-from-view! unsubscribe-from-all-views!]]
|
||||
[views.subscribed-views :refer [SubscribedViews]]
|
||||
[views.persistor :refer [subscribe-to-view! unsubscribe-from-view! unsubscribe-from-all-views! get-subscribed-views]]
|
||||
[views.subscribed-views :refer [ISubscribedViews]]
|
||||
[views.subscriptions :refer [default-ns]]
|
||||
[views.filters :refer [view-filter]]
|
||||
[clojure.tools.logging :refer [debug info warn error]]
|
||||
|
@ -22,7 +22,7 @@
|
|||
(if namespace-fn (namespace-fn msg) default-ns))
|
||||
|
||||
(deftype BaseSubscribedViews [opts]
|
||||
SubscribedViews
|
||||
ISubscribedViews
|
||||
(subscribe-views
|
||||
[this {db :db :as msg}]
|
||||
(let [{:keys [persistor templates send-fn subscriber-key-fn namespace-fn unsafe?]} opts
|
||||
|
@ -34,6 +34,7 @@
|
|||
(info "Subscribing views: " view-sigs " for subscriber " subscriber-key ", in namespace " namespace)
|
||||
(when (seq view-sigs)
|
||||
(thread
|
||||
(println "WTF")
|
||||
(doseq [vs view-sigs]
|
||||
(send-fn* send-fn subscriber-key (subscribe-to-view! persistor db vs popts)))))))
|
||||
|
||||
|
@ -52,7 +53,8 @@
|
|||
namespace (namespace-fn* namespace-fn msg)]
|
||||
(unsubscribe-from-all-views! persistor subscriber-key namespace)))
|
||||
|
||||
;; DB interaction
|
||||
(subscribed-views [this])
|
||||
(subscribed-views [this args]
|
||||
(get-subscribed-views (:persistor opts) (namespace-fn* (:namespace-fn opts) args)))
|
||||
|
||||
(broadcast-deltas [this fdb views-with-deltas]))
|
||||
(broadcast-deltas [this fdb views-with-deltas]
|
||||
(println "broadcasting 1 2 3")))
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
(ns views.core
|
||||
(:require
|
||||
[views.base-subscribed-views])
|
||||
(:import
|
||||
[views.base_subscribed_views BaseSubscribedViews]))
|
||||
[views.base-subscribed-views :as bsv]; :refer [BaseSubscribedViews]]
|
||||
[views.persistor :as vp])); :refer [InMemoryPersistor]]))
|
||||
;; (:import
|
||||
;; [views.persistor InMemoryPersistor]
|
||||
;; [views.base_subscribed_views BaseSubscribedViews]))
|
||||
|
||||
(defmacro config
|
||||
[{:keys [db schema] :as opts}]
|
||||
{:db db :schema schema :subscribed-views (BaseSubscribedViews. opts)})
|
||||
[{:keys [db schema persistor] :as opts}]
|
||||
(let [opts (if persistor opts (assoc opts :persistor (vp/->InMemoryPersistor)))]
|
||||
{:db db :schema schema :base-subscribed-views (bsv/->BaseSubscribedViews opts)}))
|
||||
|
|
|
@ -449,7 +449,7 @@
|
|||
"Used to perform arbitrary insert/update/delete actions on the database,
|
||||
while ensuring that view deltas are appropriately checked and calculated
|
||||
for the currently registered views as reported by a type implementing
|
||||
the SubscribedViews protocol.
|
||||
the ISubscribedViews protocol.
|
||||
|
||||
Arguments are:
|
||||
|
||||
|
@ -459,22 +459,24 @@
|
|||
|
||||
- action-map: the HoneySQL map for the insert/update/delete action
|
||||
|
||||
- subscribed-views: an implementation of SubscribedViews implementing
|
||||
- subscribed-views: an implementation of ISubscribedViews implementing
|
||||
the follow functions:
|
||||
|
||||
- get-subscribed-views takes a database connection. It should return
|
||||
- subscribed-views takes a ... . It should return
|
||||
a collection of view-maps.
|
||||
|
||||
- send-deltas takes a db connection, and the views which have had deltas
|
||||
- broadcast-deltas takes a db connection, and the views which have had deltas
|
||||
calculate for them and associated with the hash-maps (appropriately
|
||||
called views-with-deltas)."
|
||||
[schema db action-map subscribed-views]
|
||||
(let [subbed-views (subscribed-views subscribed-views db)
|
||||
transaction-fn #(do-view-transaction schema db subbed-views action-map)]
|
||||
(if-let [deltas (:deltas db)] ;; inside a transaction we just collect deltas and do not retry
|
||||
(let [{:keys [views-with-deltas result-set]} (transaction-fn)]
|
||||
(swap! deltas into views-with-deltas)
|
||||
result-set)
|
||||
(let [{:keys [views-with-deltas result-set]} (do-transaction-fn-with-retries transaction-fn)]
|
||||
(broadcast-deltas subscribed-views db views-with-deltas)
|
||||
result-set))))
|
||||
([action-map opts]
|
||||
(vexec! (:db opts) action-map opts))
|
||||
([db action-map {:keys [schema base-subscribed-views]}]
|
||||
(let [subbed-views (subscribed-views base-subscribed-views db)
|
||||
transaction-fn #(do-view-transaction schema db subbed-views action-map)]
|
||||
(if-let [deltas (:deltas db)] ;; inside a transaction we just collect deltas and do not retry
|
||||
(let [{:keys [views-with-deltas result-set]} (transaction-fn)]
|
||||
(swap! deltas into views-with-deltas)
|
||||
result-set)
|
||||
(let [{:keys [views-with-deltas result-set]} (do-transaction-fn-with-retries transaction-fn)]
|
||||
(broadcast-deltas base-subscribed-views db views-with-deltas)
|
||||
result-set)))))
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
(ns views.persistor
|
||||
(:require
|
||||
[clojure.java.jdbc :as j]
|
||||
[views.subscriptions :refer [add-subscription! remove-subscription! compiled-view-for subscriptions-for]]
|
||||
[views.subscriptions :refer [add-subscription! remove-subscription! compiled-view-for compiled-views-for subscriptions-for]]
|
||||
[views.db.load :refer [initial-view]]))
|
||||
|
||||
(defprotocol IPersistor
|
||||
(subscribe-to-view! [this db view-sig opts])
|
||||
(unsubscribe-from-view! [this view-sig subscriber-key namespace])
|
||||
(unsubscribe-from-all-views! [this subscriber-key namespace]))
|
||||
(unsubscribe-from-all-views! [this subscriber-key namespace])
|
||||
(get-subscribed-views [this namespace]))
|
||||
|
||||
(deftype InMemoryPersistor []
|
||||
IPersistor
|
||||
|
@ -24,4 +25,6 @@
|
|||
(unsubscribe-from-all-views!
|
||||
[this subscriber-key namespace]
|
||||
(doseq [vs (subscriptions-for subscriber-key namespace)]
|
||||
(remove-subscription! vs subscriber-key namespace))))
|
||||
(remove-subscription! vs subscriber-key namespace)))
|
||||
|
||||
(get-subscribed-views [this namespace] (compiled-views-for namespace)))
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
(ns views.subscribed-views)
|
||||
|
||||
(defprotocol SubscribedViews
|
||||
(defprotocol ISubscribedViews
|
||||
;; Subscription and Delta routing
|
||||
(subscribe-views [this sub-request])
|
||||
(unsubscribe-views [this unsub-request])
|
||||
|
@ -8,4 +8,4 @@
|
|||
|
||||
;; DB interaction
|
||||
(broadcast-deltas [this db views-with-deltas])
|
||||
(subscribed-views [this]))
|
||||
(subscribed-views [this args]))
|
||||
|
|
|
@ -77,3 +77,7 @@
|
|||
([view-sig] (compiled-view-for view-sig default-ns))
|
||||
([view-sig namespace]
|
||||
(get-in @subscribed-views [namespace view-sig :view-data])))
|
||||
|
||||
(defn compiled-views-for
|
||||
[namespace]
|
||||
(get @subscribed-views namespace))
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
(:require
|
||||
[views.base-subscribed-views :as bsv] ; :refer [BaseSubscribedViews]]
|
||||
[views.persistor];; :refer [InMemoryPersistor]]
|
||||
[views.subscribed-views :refer [SubscribedViews subscribe-views unsubscribe-views disconnect]]
|
||||
[views.subscribed-views :refer [subscribe-views unsubscribe-views disconnect]]
|
||||
[views.subscriptions :as vs :refer [subscribed-to?]]
|
||||
[views.fixtures :as vf]
|
||||
[clojure.test :refer [use-fixtures deftest is]]
|
||||
|
|
|
@ -3,13 +3,12 @@
|
|||
[clojure.test :refer [use-fixtures deftest is]]
|
||||
[edl.core :refer [defschema]]
|
||||
[views.fixtures :as vf]
|
||||
[views.subscribed-views :as vs] ;; :refer [SubscribedViews]]
|
||||
[views.subscribed-views :as vs]
|
||||
[views.core :refer [config]]))
|
||||
|
||||
(defschema schema vf/db "public")
|
||||
|
||||
(deftest configures-views
|
||||
(let [conf (config {:db vf/db :schema schema :templates vf/templates :unsafe? true})]
|
||||
(println (satisfies? views.subscribed-views/SubscribedViews (:subscribed-views conf))) ; wtf?!
|
||||
;; (is (satisfies? views.subscribed-views/SubscribedViews (:subscribed-views conf)))))
|
||||
))
|
||||
;; wtf is this false?!
|
||||
(is (satisfies? views.subscribed-views/ISubscribedViews (:subscribed-views conf)))))
|
||||
|
|
Loading…
Reference in a new issue