Sean, thanks for asking. The function is so basic that I didn't include it, but here it is:
(defn fetch [mysql-db] (slingshot/try+ (jdbc/query mysql-db [" SELECT p.id as profile_id, p.name as profile_name, p.headquarters_addr1, p.headquarters_city, p.headquarters_state_code, headquarters_country_code, cw.url FROM company_profile p LEFT JOIN company_website cw ON p.id = cw.company_profile_id WHERE p.name is not null and p.name != '' "]) (catch Object o (errors/error o "" " query to database had a problem ")))) On Wednesday, July 12, 2017 at 2:09:32 AM UTC-4, Sean Corfield wrote: > > What is the ‘fetch’ function here? > > > > Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN > An Architect's View -- http://corfield.org/ > > "If you're not annoying somebody, you're not really alive." > -- Margaret Atwood > > > > *From: *lawrence...@gmail.com <javascript:> > *Sent: *Tuesday, July 11, 2017 1:18 PM > *To: *Clojure <javascript:> > *Subject: *Re: I can only get the first item of a lazyseq via a Manifold > stream, and I can't get/find an Exception > > > > Justin, thanks. I'd like to ask a follow up question. To be clear, if I go > into (doseq) then this works fine: > > > > (defn start [] > > (let [ > > config (get-config) > > mysql-db { > > :dbtype "mysql" > > :dbname (get-in config [:database :config :connection > :database]) > > :user (get-in config [:database :config :connection > :user] ) > > :password (get-in config [:database :config :connection > :password] ) > > :host (get-in config [:database :config :connection > :host]) > > } > > data (fetch mysql-db) > > ] > > (slingshot/try+ > > (doseq [row data] > > (queue/enqueue row)) > > (catch Object o > > (errors/error o "" "error in query_database/start: "))))) > > > > > > but if I do this instead: > > > > ;;;;;;; (doseq [row data] > > (queue/enqueue data)) > > > > and then enqueue does this: > > > > (->> (ms/->source data) > > (ms/onto executor) > > (ms/map api/query)) > > > > > > The first row comes through fine, but then the second row is never > processed. > > > > So are you suggesting that simply passing "data" from one function to the > next is enough to lose the database context? But only after the first row > has been pulled? > > > > > > > > > > > > > On Tuesday, July 11, 2017 at 1:44:15 PM UTC-4, Justin Smith wrote: > > My first suspicion would be that by the time you access the second > element, you have exited the context of your database transaction, so > there's no data stream available to get it from. Lazyness doesn't tend to > mix well with stateful resources and contexts. > > > > On Mon, Jul 10, 2017 at 9:45 PM <lawrence...@gmail.com> wrote: > > Okay, that was a deadend. After going through line by line, I could pretty > well rule out any kind of Exception or Error. The first row from the > database seems to go through all of the functions perfectly, without any > errors. But the second row never gets called. > > > > Which takes me back to where I started. Why can't I give a lazy-seq to a > Manifold Stream and simply have a function map over the stream? > > > > On Monday, July 10, 2017 at 11:25:43 PM UTC-4, lawrence...@gmail.com > wrote: > > > > Once again, my lack of knowledge of Java trips me up. Manifold relies on > Dirigiste, which relies on Java's Executor Service. I see a bit here: > > > > http://www.nurkiewicz.com/2014/11/executorservice-10-tips-and-tricks.html > > > > Nurkiewicz writes: > > "I got bitten by that too many times: it won't print *anything*. No sign > of java.lang.ArithmeticException: / by zero, nothing. Thread pool just > swallows this exception, as if it never happened. If it was a good'ol > java.lang.Thread created from scratch, UncaughtExceptionHandler > <https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.UncaughtExceptionHandler.html> > could > work. " > > > > I suspect I'm facing something like that. > > > > > > On Monday, July 10, 2017 at 8:28:03 PM UTC-4, lawrence...@gmail.com > wrote: > > By the way, this code works fine if I go into a (doseq) a level above > enqueue, and then put each individual row onto the stream. Then the code > loops over all of the rows. But that seems to defeat the whole point of > using something like Manifold. I want to be able to put the whole lazy-seq > on the stream. That is supposed to work, yes? > > > > On Monday, July 10, 2017 at 8:18:07 PM UTC-4, lawrence...@gmail.com > wrote: > > I'm using Zach Tellman's excellent Manifold library, though I admit I > don't fully understand it. > > > > My code queries a MySQL database and then needs to do some processing on > each row retrieved. I copy-and-pasted some code from the documentation for > Manifold: > > > > > > ;; 2017-07-10 -- we want a thread pool. I'm arbitrarily choosing 200 > threads. > > ;; query_database/start will pull data from the database and dump it onto a > > ;; stream below, at which point each row should be assigned to one of the > rows > > ;; on our thread pool. > > (def executor (me/fixed-thread-executor 200)) > > > > > > (defn enqueue > > [sequence-from-database] > > (slingshot/try+ > > (println "the type of the object from the database: " (type > sequence-from-database)) > > (->> (ms/->source sequence-from-database) > > (ms/onto executor) > > (ms/map api/query)) > > (catch Object o > > (println " message queue is not happy about the message we were > given") > > (errors/error o "" " we tried to put something on the message queue, > but we got an error ")))) > > > > The line where I print out the type assures that I'm dealing with a > LazySeq. > > > > The code prints out the type and the first row: > > > > > > the type of the object from the database: clojure.lang.LazySeq > > > > in query_api/query {:profile_id 2, :profile_name Mike Shaw Automotive > Group, :headquarters_addr1 90 Madison St., :headquarters_city Denver, > :headquarters_state_code CO, :headquarters_country_code US, :url > mikeshawauto.com} > > > > and then it stops. I assume there must be an Exception or Error happening, > but I can't find it. I've added as many general Catch clauses as I could: > > > > > > (defn query > > [row & args] > > > > (println " in query_api/query " row) > > > > (let [config (if args > > (first args)) > > ] > > ;; 2017-03-30 -- the API is overwhelmed and all I get is Socket > Timeout errors > > (Thread/sleep 300) > > > > (slingshot/try+ > > (call-api row) > > (catch Object o > > (println " error : " o) > > > > ;;(errors/error o row " we tried to call-api, but we got this error > ") > > > > > > ) > > > > (catch Error e > > (println " there Error: " e)) > > ))) > > > > So if I do: > > > > java -jar scan-database-find-similar-items-standalone.jar > > > > > > The code runs till it prints out the first row from the database, and then > it stops. Nothing else happens. There are no error messages. > > > > What did I miss? > > > > > > > > > > > > > > > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clo...@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+u...@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+u...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clo...@googlegroups.com <javascript:> > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+u...@googlegroups.com <javascript:> > 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+u...@googlegroups.com <javascript:>. > For more options, visit https://groups.google.com/d/optout. > > > -- 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.