drsnyder / poky

PostgreSQL key value store
MIT License
13 stars 1 forks source link

Fatal error and exception on IOError #23

Open drsnyder opened 10 years ago

drsnyder commented 10 years ago

Poky will go into an unstable state when an IOError is encountered. I'm not sure what we could do about this other than to handle the exception properly.

2013-09-05 21:42:55.155:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:9091
Exception: java.lang.ClassCastException: java.io.IOException cannot be cast to java.sql.SQLException
                   util.clj:77 poky.kv.jdbc.util/format-sql-exception
                   util.clj:83 poky.kv.jdbc.util/warn-sql-exception[fn]
                 core.clj:2487 clojure.core/map[fn]
               LazySeq.java:42 clojure.lang.LazySeq.sval
               LazySeq.java:60 clojure.lang.LazySeq.seq
                  Cons.java:39 clojure.lang.Cons.next
               LazySeq.java:92 clojure.lang.LazySeq.next
                   RT.java:598 clojure.lang.RT.next
                   core.clj:64 clojure.core/next
                 core.clj:2781 clojure.core/dorun
                 core.clj:2796 clojure.core/doall
                   util.clj:84 poky.kv.jdbc.util/warn-sql-exception
                  util.clj:191 poky.kv.jdbc.util/jdbc-mset
                   jdbc.clj:33 poky.kv.jdbc/poky.kv.jdbc.JdbcKeyValue
                  http.clj:185 poky.protocol.http/multi-set
                  http.clj:196 poky.protocol.http/multi-handler
                  http.clj:212 poky.protocol.http/multi-routes[fn]
                   core.clj:93 compojure.core/make-route[fn]
                   core.clj:39 compojure.core/if-route[fn]
                   core.clj:24 compojure.core/if-method[fn]
                  core.clj:106 compojure.core/routing[fn]
                 core.clj:2443 clojure.core/some
                  core.clj:106 compojure.core/routing
               RestFn.java:139 clojure.lang.RestFn.applyTo
                  core.clj:619 clojure.core/apply
                  core.clj:111 compojure.core/routes[fn]
              new_relic.clj:28 ring.middleware.new-relic/wrap-transaction-name[fn]
                  core.clj:106 compojure.core/routing[fn]
                 core.clj:2443 clojure.core/some
                  core.clj:106 compojure.core/routing
               RestFn.java:423 clojure.lang.RestFn.invoke
                  http.clj:226 poky.protocol.http/api[fn]
                  core.clj:164 compojure.core/wrap-context[fn]
                   core.clj:39 compojure.core/if-route[fn]
                  core.clj:106 compojure.core/routing[fn]
                 core.clj:2443 clojure.core/some
                  core.clj:106 compojure.core/routing
               RestFn.java:139 clojure.lang.RestFn.applyTo
                  core.clj:619 clojure.core/apply
                  core.clj:111 compojure.core/routes[fn]
         keyword_params.clj:27 ring.middleware.keyword-params/wrap-keyword-params[fn]
          nested_params.clj:65 ring.middleware.nested-params/wrap-nested-params[fn]
                 params.clj:55 ring.middleware.params/wrap-params[fn]
          format_params.clj:76 ring.middleware.format-params/wrap-format-params[fn]
                  http.clj:139 poky.protocol.http/wrap-charset[fn]
             stacktrace.clj:15 ring.middleware.stacktrace/wrap-stacktrace-log[fn]
             stacktrace.clj:79 ring.middleware.stacktrace/wrap-stacktrace-web[fn]
                 statsd.clj:19 ring.middleware.statsd/wrap-request-method-counter[fn]
                 statsd.clj:34 ring.middleware.statsd/wrap-response-code-counter[fn]
loganlinn commented 10 years ago

Maybe we should add a middleware like,

(defn wrap-catchall-exception-handler [handler]
  (fn [req]
    (try
      (handler req)
      (catch Exception e
        {:status 500
         :headers {"Content-Type" "text/plain"}
         :body "We're sorry, something went wrong."}))))