[Netarchivesuite-devel] Fwd: [SBForge JIRA] Assigned: (NAS-1845) Database Deadlock

Nicolas Giraud nikokode at gmail.com
Thu Apr 14 10:14:06 CEST 2011


---------- Forwarded message ----------
From: Nicolas Giraud <nikokode at gmail.com>
Date: 2011/4/14
Subject: Re: [SBForge JIRA] Assigned: (NAS-1845) Database Deadlock
To: "Mikis Seth Sørensen (JIRA)" <jira at sbforge.org>


Ok.

One thing I don't get is why in the world is Derby attempting to rollback
the transaction? Is there an auto-rollback mechanism after a king of
timeout?

What happens here that is different from the previous implementation is that
the same thread can open aonther connection without having yet closed a
previous one (nested calls in DAO classes that call
HarvestDBConnection#get). This works fine with PostgreSQL though. I don't
know Derby well enough to know if this is the real concern.

One thing I wanted to do in one of the refactoring issues I've created is to
ensure that only top-level DAO calls open connections to the DB, all nested
calls should not.

After a bit of reading, it would appear that we are trying to access a row
that is already locked... weird. Is Derby configured with row-level locking
by default?

Nicolas

2011/4/14 Mikis Seth Sørensen (JIRA) <jira at sbforge.org>


>     [
> https://sbforge.org/jira/browse/NAS-1845?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel]
>
> Mikis Seth Sørensen reassigned NAS-1845:
> ----------------------------------------
>
>    Assignee: Nicolas Giraud
>
> I'm assigning this issue to you Nicolas, I think your are the one with the
> biggest chance of guessing what's going on.
>
> > Database Deadlock
> > -----------------
> >
> >                 Key: NAS-1845
> >                 URL: https://sbforge.org/jira/browse/NAS-1845
> >             Project: NetarchiveSuite
> >          Issue Type: Bug
> >          Components: GUI
> >    Affects Versions: 3.16.0
> >            Reporter: Colin Rosenthal
> >            Assignee: Nicolas Giraud
> >            Priority: Blocker
> >             Fix For: 3.16.0
> >
> >         Attachments: stack.txt
> >
> >
> > Received the following deadlock when trying to update alias information
> (Step 9 of Test 2).
> > SQL error updating domain Domain:sulnudu.dk;
> > Comment:;
> > Configurations:
> >       defaultconfig;
> > Seedlists:
> >       defaultseeds;
> > Passwords:
> > ---------------
> >  in database
> > SQLException trace:
> > SQL State:40XL2
> > Error Code:-1
> > java.sql.SQLTransactionRollbackException: A lock could not be obtained
> within the time requested.  The lockTable dump is:
> > 2011-04-13 12:50:14.632 GMT
> > XID       |TYPE         |MODE|LOCKCOUNT|LOCKNAME
>                                                |STATE|TABLETYPE / LOCKOBJ
>                 |INDEXNAME / CONTAINER_ID / (MODE for LATCH only)
>  |TABLENAME / CONGLOM_ID                |
> >
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> > *** The following row is the victim ***
> > 6641      |ROW          |S   |0        |(2,15)
>                                                |WAIT |T
>                 |NULL                                              |DOMAINS
>                               |
> > *** The above row is the victim ***
> > 6630      |ROW          |X   |4        |(2,15)
>                                                |GRANT|T
>                 |NULL                                              |DOMAINS
>                               |
> > 6630      |TABLE        |IX  |4        |Tablelock
>                                               |GRANT|T
>               |NULL                                              |DOMAINS
>                             |
> > 6641      |TABLE        |IS  |1        |Tablelock
>                                               |GRANT|T
>               |NULL                                              |DOMAINS
>                             |
> >
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> >       at
> org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown
> Source)
> >       at org.apache.derby.client.am.SqlException.getSQLException(Unknown
> Source)
> >       at
> org.apache.derby.client.am.PreparedStatement.executeUpdate(Unknown Source)
> >       at
> com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105)
> >       at
> dk.netarkivet.harvester.datamodel.DomainDBDAO.updateHarvestInfo(DomainDBDAO.java:646)
> >       at
> dk.netarkivet.harvester.datamodel.DomainDBDAO.update(DomainDBDAO.java:292)
> >       at
> dk.netarkivet.harvester.webinterface.DomainDefinition.updateDomain(DomainDefinition.java:195)
> >       at
> dk.netarkivet.harvester.webinterface.DomainDefinition.processRequest(DomainDefinition.java:138)
> >       at
> org.apache.jsp.Definitions_002dedit_002ddomain_jsp._jspService(org.apache.jsp.Definitions_002dedit_002ddomain_jsp:125)
> >       at
> org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109)
> >       at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
> >       at
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389)
> >       at
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:486)
> >       at
> org.apache.jasper.servlet.JspServlet.service(JspServlet.java:380)
> >       at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
> >       at
> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
> >       at
> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401)
> >       at
> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
> >       at
> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
> >       at
> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
> >       at
> org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
> >       at
> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
> >       at
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
> >       at org.mortbay.jetty.Server.handle(Server.java:322)
> >       at
> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
> >       at
> org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945)
> >       at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
> >       at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
> >       at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
> >       at
> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
> >       at
> org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
> > Caused by: org.apache.derby.client.am.SqlException: A lock could not be
> obtained within the time requested.  The lockTable dump is:
> > 2011-04-13 12:50:14.632 GMT
> > XID       |TYPE         |MODE|LOCKCOUNT|LOCKNAME
>                                                |STATE|TABLETYPE / LOCKOBJ
>                 |INDEXNAME / CONTAINER_ID / (MODE for LATCH only)
>  |TABLENAME / CONGLOM_ID                |
> >
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> > *** The following row is the victim ***
> > 6641      |ROW          |S   |0        |(2,15)
>                                                |WAIT |T
>                 |NULL                                              |DOMAINS
>                               |
> > *** The above row is the victim ***
> > 6630      |ROW          |X   |4        |(2,15)
>                                                |GRANT|T
>                 |NULL                                              |DOMAINS
>                               |
> > 6630      |TABLE        |IX  |4        |Tablelock
>                                               |GRANT|T
>               |NULL                                              |DOMAINS
>                             |
> > 6641      |TABLE        |IS  |1        |Tablelock
>                                               |GRANT|T
>               |NULL                                              |DOMAINS
>                             |
> >
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> >       at org.apache.derby.client.am.Statement.completeExecute(Unknown
> Source)
> >       at
> org.apache.derby.client.net.NetStatementReply.parseEXCSQLSTTreply(Unknown
> Source)
> >       at
> org.apache.derby.client.net.NetStatementReply.readExecute(Unknown Source)
> >       at org.apache.derby.client.net.StatementReply.readExecute(Unknown
> Source)
> >       at
> org.apache.derby.client.net.NetPreparedStatement.readExecute_(Unknown
> Source)
> >       at org.apache.derby.client.am.PreparedStatement.readExecute(Unknown
> Source)
> >       at org.apache.derby.client.am.PreparedStatement.flowExecute(Unknown
> Source)
> >       at
> org.apache.derby.client.am.PreparedStatement.executeUpdateX(Unknown Source)
> >       ... 29 more
> > End of SQLException trace
>
> --
> This message is automatically generated by JIRA.
> -
> For more information on JIRA, see: http://www.atlassian.com/software/jira
>
>
>


-- 
Nicolas Giraud
---------------------------------------------------------------------------------------------
Développeur Archives du Web - Bibliothèque Nationale de France
Web Archiving Developper - National Library of France
---------------------------------------------------------------------------------------------



-- 
Nicolas Giraud
---------------------------------------------------------------------------------------------
Développeur Archives du Web - Bibliothèque Nationale de France
Web Archiving Developper - National Library of France
---------------------------------------------------------------------------------------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ml.sbforge.org/pipermail/netarchivesuite-devel/attachments/20110414/b428dff1/attachment-0002.html>


More information about the Netarchivesuite-devel mailing list