Added error handling to go blocks.

This commit is contained in:
Alexander K. Hudek 2014-11-04 18:55:59 -05:00
parent 7d61caea52
commit 7684eb6506
3 changed files with 24 additions and 12 deletions

View file

@ -1,4 +1,4 @@
(defproject views "0.4.1" (defproject views "0.4.2-SNAPSHOT"
:description "You underestimate the power of the SQL side" :description "You underestimate the power of the SQL side"
:url "https://github.com/diligenceengine/views" :url "https://github.com/diligenceengine/views"

View file

@ -6,7 +6,7 @@
[views.db.load :refer [initial-view]] [views.db.load :refer [initial-view]]
[views.db.util :refer [with-retry]] [views.db.util :refer [with-retry]]
[clojure.tools.logging :refer [debug info warn error]] [clojure.tools.logging :refer [debug info warn error]]
[clojure.core.async :refer [put! <! go thread]] [clojure.core.async :refer [thread]]
[clojure.java.jdbc :as j])) [clojure.java.jdbc :as j]))
(def default-ns :default-ns) (def default-ns :default-ns)

View file

@ -2,28 +2,40 @@
(:require (:require
[views.subscribed-views :refer [subscribe-views unsubscribe-views disconnect]] [views.subscribed-views :refer [subscribe-views unsubscribe-views disconnect]]
[clojure.core.async :refer [go go-loop chan pub sub unsub close! >! >!! <! <!! filter<]] [clojure.core.async :refer [go go-loop chan pub sub unsub close! >! >!! <! <!! filter<]]
[clojure.tools.logging :refer [debug]])) [clojure.stacktrace :refer [print-stack-trace]]
[clojure.tools.logging :refer [error debug]]))
(defn log-exception
"Takes a string and exception and logs it to error."
[s e]
(error s e (.getMessage e) (print-stack-trace e)))
(defn handle-subscriptions! (defn handle-subscriptions!
[subscribed-views subscriptions] [subscribed-views subscriptions]
(go (while true (go (while true
(try
(let [sub (<! subscriptions)] (let [sub (<! subscriptions)]
(debug "Subscribing (in router): " sub) (debug "Subscribing (in router): " sub)
(subscribe-views subscribed-views sub))))) (subscribe-views subscribed-views sub))
(catch Exception e (log-exception "when subscribing" e))))))
(defn handle-unsubscriptions! (defn handle-unsubscriptions!
[subscribed-views unsubscriptions] [subscribed-views unsubscriptions]
(go (while true (go (while true
(try
(let [unsub (<! unsubscriptions)] (let [unsub (<! unsubscriptions)]
(debug "Unsubscribing (in router): " unsub) (debug "Unsubscribing (in router): " unsub)
(unsubscribe-views subscribed-views unsub))))) (unsubscribe-views subscribed-views unsub))
(catch Exception e (log-exception "when unsubscribing" e))))))
(defn handle-disconnects! (defn handle-disconnects!
[subscribed-views disconnects] [subscribed-views disconnects]
(go (while true (go (while true
(try
(let [disc (<! disconnects)] (let [disc (<! disconnects)]
(debug "Disconnecting (in router): " disc) (debug "Disconnecting (in router): " disc)
(disconnect subscribed-views disc))))) (disconnect subscribed-views disc)
(catch Exception e (log-exception "disconnect" e)))))))
(defn init! (defn init!
[{:keys [base-subscribed-views] :as conf} client-chan] [{:keys [base-subscribed-views] :as conf} client-chan]