[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