I don't think you can catch an Object on the JVM can you? What happens if you catch Throwable?
On Sun, Oct 8, 2017 at 9:43 PM, <lawrence.krub...@gmail.com> wrote: > So, for instance, this says that 10 documents were retried: > > {"message" {:num-slabs 1, :num-active-slabs 1, :enqueued 389, :retried 10, > :completed 378, :in-progress 1}} > > The only place that I call retry! is in this catch block (this function > runs in a background thread): > > (defn advance > [message] > {:pre [ > (= (type message) durable_queue.Task) > ]} > (slingshot/try+ > (doseq [[k v] @message] > (when-not (or > (= :how-many-rows-and-fields-from-database k) > (= :database-table k) > (= :denormalized-id k) > (= :topic k)) > (transform > (get @message :denormalized-id :missing-denormalized-id) > k > v > (get @message :topic :missing-topic) > (get @message :how-many-rows-and-fields-from-database > :missing-how-many-rows-and-fields-from-database)))) > > (durable/complete! message) > (catch Object o > (durable/retry! message) > (slingshot/throw+ { > :type ::advance > :error o > } > )))) > > So clearly, the code has a problem with some of the documents, and so an > error is thrown, and it is caught by the catch block. I would love to see > the error. I can not. If I put println in the catch block, the message > never shows up in the terminal. Likewise if I use Timbre. > > I would love to see the error object. My inability to see the error > objects has crippled my productivity. > > Can anyone tell me what I need to do to see these errors? > > > > > > On Sunday, October 8, 2017 at 11:13:10 PM UTC-4, lawrence...@gmail.com > wrote: > >> I'm trying to use a Zach Tellman's durable-queue to pass information from >> one part of my app to another. I have 3 queues. I also have a function that >> runs every 30 seconds, that is suppose to report some statistics for me: >> >> (fn [] >> (future >> (slingshot/try+ >> (errors/log "Resource usage: " >> (monitoring/show-stats-regard >> ing-resources-used-by-this-app)) >> (errors/log "Stats about from-mysql-to-tables-queue: " >> (durable/stats from-mysql-to-tables-queue)) >> (errors/log "Stats about from-tables-to-topics-queue: >> " (durable/stats from-tables-to-topics-queue)) >> (errors/log "Stats about the >> from-topics-to-persistence-queue: " (durable/stats >> from-topics-to-persistence-queue)) >> (catch Object o >> (slingshot/throw+ { >> :type >> ::cycle-resource-usage-report >> :error o >> } >> ))))) >> >> I think there is an error here, because I see the first (errors/log) but >> typically not anything after that. Can I rely on the fact that this should >> catch anything: >> >> (catch Object o >> >> Because it doesn't seem to work. Instead, the app runs for 8 minutes, >> then prints data about the queues just once, then never again. Assuming an >> error is occuring, why can't I see the error? >> >> >> {:timestamp "17-10-09 01:27:45", :level :trace, :hostname >> "ip-172-31-4-54", :message ("STARTING!!!!")} >> >> Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver >> class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered >> via the SPI and manual loading of the driver class is generally unnecessary. >> >> >> {:timestamp "17-10-09 01:28:16", :level :trace, :hostname >> "ip-172-31-4-54", :message ("\n\n\n\n\nResource usage: " "Memory in use >> (percentage/used/max-heap): (\"67%\" \"2414M\" \"3568M\")\n\nCPU usage >> (how-many-cpu's/load-average): [4 1.56]\n\nFree memory in jvm: >> [1201758848]")} >> >> >> {:timestamp "17-10-09 01:28:49", :level :trace, :hostname >> "ip-172-31-4-54", :message ("\n\n\n\n\nResource usage: " "Memory in use >> (percentage/used/max-heap): (\"81%\" \"2900M\" \"3568M\")\n\nCPU usage >> (how-many-cpu's/load-average): [4 2.64]\n\nFree memory in jvm: >> [699798216]")} >> >> ;; removing redundant entries >> >> {:timestamp "17-10-09 01:34:48", :level :trace, :hostname "UnknownHost", >> :message ("\n\n\n\n\nResource usage: " "Memory in use >> (percentage/used/max-heap): (\"87%\" \"3118M\" \"3568M\")\n\nCPU usage >> (how-many-cpu's/load-average): [4 3.77]\n\nFree memory in jvm: >> [471249616]")} >> >> >> {:timestamp "17-10-09 01:35:17", :level :trace, :hostname >> "ip-172-31-4-54", :message ("\n\n\n\n\nResource usage: " "Memory in use >> (percentage/used/max-heap): (\"87%\" \"3120M\" \"3568M\")\n\nCPU usage >> (how-many-cpu's/load-average): [4 3.79]\n\nFree memory in jvm: >> [468602192]")} >> >> >> {:timestamp "17-10-09 01:35:35", :level :trace, :hostname >> "ip-172-31-4-54", :message ("\nStats about from-mysql-to-tables-queue: " >> {"message" {:num-slabs 1, :num-active-slabs 1, :enqueued 306671, :retried >> 0, :completed 306660, :in-progress 8}})} >> >> >> {:timestamp "17-10-09 01:35:50", :level :trace, :hostname >> "ip-172-31-4-54", :message ("\nStats about from-tables-to-topics-queue: " >> {})} >> >> >> {:timestamp "17-10-09 01:35:50", :level :trace, :hostname >> "ip-172-31-4-54", :message ("\nStats about the >> from-topics-to-persistence-queue: " {})} >> >> >> {:timestamp "17-10-09 01:36:15", :level :trace, :hostname >> "ip-172-31-4-54", :message ("\n\n\n\n\nResource usage: " "Memory in use >> (percentage/used/max-heap): (\"28%\" \"1007M\" \"3568M\")\n\nCPU usage >> (how-many-cpu's/load-average): [4 4.14]\n\nFree memory in jvm: >> [1868654000]")} >> >> >> >> >> >> So 8 minutes after the app starts, it print the lines with stats about >> the queues, just this one time, and then never again. I think an error must >> occur inside of the function that is suppose to report the queues. What >> would I have to do to see that error? >> >> My core/main function looks like this: >> >> (defn -main [& args] >> >> (slingshot/try+ >> >> ;; 2017-10-04 -- see this: >> ;; https://stackoverflow.com/questions/28908835/ssl-peer-shut- >> down-incorrectly-in-java >> (System/setProperty "https.protocols" "TLSv1.1") >> >> (.addShutdownHook (Runtime/getRuntime) >> (Thread. >> #(do (println "addShutdownHook triggered. This app >> is shutting down.") >> (stop)))) >> >> ;; 2017-07-12 -- stealing code from here: >> ;; https://stuartsierra.com/2015/05/27/clojure-uncaught-exceptions >> ;; Assuming require [clojure.tools.logging :as log] >> (Thread/setDefaultUncaughtExceptionHandler >> (reify Thread$UncaughtExceptionHandler >> (uncaughtException [_ thread ex] >> (println ex "Uncaught background exception on thread " (.getName >> thread) " Caught by Thread/setDefaultUncaughtExceptionHandler in >> core/main.") >> (throw (ex-info "/setDefaultUncaughtExceptionHandler. The app >> has died!"))))) >> >> (start) >> (catch Exception e >> (println e) >> (stack/parse-exception e) >> (throw (ex-info "The app has died!"))) >> (catch Object o >> (println o) >> (throw (ex-info "The app has died!"))))) >> >> What else could I do to either kill the app at the moment of error or >> catch it at the top and print the error? >> > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- “One of the main causes of the fall of the Roman Empire was that–lacking zero–they had no way to indicate successful termination of their C programs.” (Robert Firth) -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.