prevent subscriber and subscribed lists from endlessly filling up
in practice this would probably only be a problem for applications with lots of views that can be subscribed to that also have very long uptimes.
This commit is contained in:
parent
5ec96d6db2
commit
4559d39bb7
|
@ -73,15 +73,39 @@
|
||||||
|
|
||||||
(defn- remove-from-subscribers
|
(defn- remove-from-subscribers
|
||||||
[view-system view-sig subscriber-key]
|
[view-system view-sig subscriber-key]
|
||||||
(update-in view-system [:subscribers view-sig] disj subscriber-key))
|
(-> view-system
|
||||||
|
(update-in [:subscribers view-sig] disj subscriber-key)
|
||||||
|
; remove view-sig entry if no subscribers. helps prevent the subscribers
|
||||||
|
; map from e.g. endlessly filling up with all sorts of different
|
||||||
|
; view-sigs with crazy amounts of only-slightly-varying parameters
|
||||||
|
(update-in [:subscribers]
|
||||||
|
(fn [subscribers]
|
||||||
|
(if (empty? (get subscribers view-sig))
|
||||||
|
(dissoc subscribers view-sig)
|
||||||
|
subscribers)))))
|
||||||
|
|
||||||
|
(defn- remove-from-subscribed
|
||||||
|
[view-system view-sig subscriber-key]
|
||||||
|
(-> view-system
|
||||||
|
(update-in [:subscribed subscriber-key] disj view-sig)
|
||||||
|
; remove subscriber-key entry if no current subscriptions. this helps prevent
|
||||||
|
; the subscribed map from (for example) endlessly filling up with massive
|
||||||
|
; amounts of entries with no subscriptions. this could easily happen over time
|
||||||
|
; naturally for applications with long uptimes.
|
||||||
|
(update-in [:subscribed]
|
||||||
|
(fn [subscribed]
|
||||||
|
(if (empty? (get subscribed subscriber-key))
|
||||||
|
(dissoc subscribed subscriber-key)
|
||||||
|
subscribed)))))
|
||||||
|
|
||||||
(defn unsubscribe!
|
(defn unsubscribe!
|
||||||
[namespace view-id parameters subscriber-key]
|
[namespace view-id parameters subscriber-key]
|
||||||
(swap! view-system
|
(swap! view-system
|
||||||
(fn [vs]
|
(fn [vs]
|
||||||
|
(let [view-sig [namespace view-id parameters]]
|
||||||
(-> vs
|
(-> vs
|
||||||
(update-in [:subscribed subscriber-key] disj [namespace view-id parameters])
|
(remove-from-subscribed view-sig subscriber-key)
|
||||||
(remove-from-subscribers [namespace view-id parameters] subscriber-key)))))
|
(remove-from-subscribers view-sig subscriber-key))))))
|
||||||
|
|
||||||
(defn unsubscribe-all!
|
(defn unsubscribe-all!
|
||||||
"Remove all subscriptions by a given subscriber."
|
"Remove all subscriptions by a given subscriber."
|
||||||
|
|
Loading…
Reference in a new issue