As shalin says threadsafety is not given importance because DIH is singlethreaded. But eventually we may move there . But we indeed tried once w/ multithreaded indexing for around 3million records and the performance gain we observed was <10% . We realized that it was bound by Lucene's ability to index documents rather than DIH's ability to produce it. So we dropped it in favor of simplicity
--Noble On Tue, Nov 18, 2008 at 10:28 PM, Shalin Shekhar Mangar <[EMAIL PROTECTED]> wrote: > Hmm, the import operation in DIH is single threaded. Each entity has a > separate instance of DataSource for itself. I think that we may not need the > synchronization at all. > > On Tue, Nov 18, 2008 at 10:22 PM, Yonik Seeley <[EMAIL PROTECTED]> wrote: > >> I took a very quick peek... looks like Mark is right, there are some >> non-thread-safe practices going on there with both "conn" and >> "connLastUsed". Prob also want another check inside the sync block so >> multiple threads don't pile up at that sync block and all open a new >> connection in turn (or just put the check inside the sync block). >> >> Is a finalizer really needed? If so, hopefully the connection is >> resistant to close() being called on it more than once? >> >> -Yonik >> >> >> On Tue, Nov 18, 2008 at 11:27 AM, Noble Paul നോബിള് नोब्ळ् >> <[EMAIL PROTECTED]> wrote: >> > it is not . conn is protected throughout >> > >> > On Tue, Nov 18, 2008 at 9:48 PM, Mark Miller <[EMAIL PROTECTED]> >> wrote: >> >> But if your going to sync a variable, you can't read/write it outside of >> >> proper synchronization. Maybe I am just not following the code... >> >> >> >> Noble Paul ??????? ?????? wrote: >> >>> >> >>> one JdbcDataSource has only one connection the connection object/the >> >>> connLastUsed etc needs to be protected. >> >>> >> >>> >> >>> >> >>> On Tue, Nov 18, 2008 at 9:24 PM, Mark Miller <[EMAIL PROTECTED]> >> >>> wrote: >> >>> >> >>>> >> >>>> JdbcDataSource looks like it has a little funkiness going on. Why is >> >>>> there a >> >>>> synchronize block there? Can multiple threads call getConnection >> >>>> concurrently? If they can, this is not thread safe anyway. If they >> can't, >> >>>> why is factory.call (or is it the close?) being protected with a sync? >> >>>> >> >>>> private Connection getConnection() throws Exception { >> >>>> long currTime = System.currentTimeMillis(); >> >>>> if (currTime - connLastUsed > CONN_TIME_OUT) { >> >>>> synchronized (this) { >> >>>> Connection tmpConn = factory.call(); >> >>>> close(); >> >>>> connLastUsed = System.currentTimeMillis(); >> >>>> return conn = tmpConn; >> >>>> } >> >>>> >> >>>> } else { >> >>>> connLastUsed = currTime; >> >>>> return conn; >> >>>> } >> >>>> } >> >>>> >> >>>> >> >>> >> >>> >> >>> >> >>> >> >> >> >> >> > >> > >> > >> > -- >> > --Noble Paul >> > >> > > > > -- > Regards, > Shalin Shekhar Mangar. > -- --Noble Paul