Thanks, Sean, here's simplified test which shows the behavior:

Project dependencies:
  :dependencies [[org.clojure/clojure "1.3.0"]
                 [org.clojure/java.jdbc "0.2.2"]
                 [mysql/mysql-connector-java "5.1.6"]

Code:
(ns jdbc-test.core
  (:require [clojure.java.jdbc :as sql])
  (:import (java.text SimpleDateFormat)
           (java.util Date)))

;; MySQL connection configuration
(def mysql-db
  {:classname "com.mysql.jdbc.Driver"
   :subprotocol "mysql"
   :user "root"
   :password "root"
   :subname "//localhost/clojurejdbc"})

;; Table definition

(defn add-row-to-table
  [label datetime]
  (sql/with-connection mysql-db
    (sql/insert-records :inserttest
                        {:id 0 :label label :created datetime})))

(defn generate-entries
  [no]
  (let [date-formatter (SimpleDateFormat. "yyyy-MM-dd HH:mm:ss")]
    (loop [counter 1
           datetime (.format date-formatter (Date.))]
      (if (= 0 (mod counter 1000))
        (println (str counter " rows added")))
      (add-row-to-table (str "Line #" counter) datetime)
      (if (< counter no)
        (recur (inc counter) datetime)))))

The MySQL database and table definition:
CREATE DATABASE clojurejdbc;

USE clojurejdbc;

CREATE TABLE inserttest (
  id INT NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id),
  label CHAR(255),
  created DATETIME
);

I call the function generate-entries like this:
(generate-entries 1000000)

On my machine, the program stops after 34000+ rows have been added to the table:
...
32000 rows added
33000 rows added
34000 rows added
NoRouteToHostException Cannot assign requested address
java.net.PlainSocketImpl.socketConnect (PlainSocketImpl.java:-2)

The problem is probably the high number of connections kept open to
the localhost port, but that's just a guess:
http://stackoverflow.com/questions/1572215/how-to-avoid-a-noroutetohostexception

"netstat -a" shows a lot of TIME_WAIT entries

tcp        0      0 localhost:mysql         *:*                     LISTEN
tcp        0      0 localhost:mysql         localhost:46850         TIME_WAIT
tcp        0      0 localhost:mysql         localhost:46737         TIME_WAIT
tcp        0      0 localhost:mysql         localhost:46340         TIME_WAIT
(long list continued) ....

So this is not Clojure/JDBC specific, but a general problem with Java
and MySQL executing many queries to localhost. I'll investigate more
later.

Thanks,
Raju

-- 
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

Reply via email to