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.

Reply via email to