Return-Path: Delivered-To: apmail-jackrabbit-dev-archive@www.apache.org Received: (qmail 39996 invoked from network); 28 Mar 2006 19:37:17 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 28 Mar 2006 19:37:17 -0000 Received: (qmail 75525 invoked by uid 500); 28 Mar 2006 19:37:16 -0000 Delivered-To: apmail-jackrabbit-dev-archive@jackrabbit.apache.org Received: (qmail 75483 invoked by uid 500); 28 Mar 2006 19:37:16 -0000 Mailing-List: contact dev-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list dev@jackrabbit.apache.org Received: (qmail 75474 invoked by uid 99); 28 Mar 2006 19:37:16 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 28 Mar 2006 11:37:16 -0800 X-ASF-Spam-Status: No, hits=0.8 required=10.0 tests=HTML_MESSAGE,INFO_TLD,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: domain of the.mindstorm.mailinglist@gmail.com designates 64.233.182.189 as permitted sender) Received: from [64.233.182.189] (HELO nproxy.gmail.com) (64.233.182.189) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 28 Mar 2006 11:37:14 -0800 Received: by nproxy.gmail.com with SMTP id p46so11096nfa for ; Tue, 28 Mar 2006 11:36:53 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:references; b=Vm8L3VTTIVQG99nAapn7OaW+fjJi7BMi2RlXZPMvaSO4+7p8YQjny+0k/A7NsJ7wn/MrgiL6tXOz08FgO+uRpLTQQxQyPStCEHs3b+nszVBvV784Zpgr1Kvv3+oLMPbAxUIcu3DHUgdk4tHurX/HdZpG7F+Vu2yWgi6Bg7UjjxU= Received: by 10.49.78.20 with SMTP id f20mr2439525nfl; Tue, 28 Mar 2006 11:36:52 -0800 (PST) Received: by 10.49.72.17 with HTTP; Tue, 28 Mar 2006 11:36:52 -0800 (PST) Message-ID: Date: Tue, 28 Mar 2006 22:36:52 +0300 From: "Alexandru Popescu" To: devJackrabbit Subject: Fwd: [jira] Closed: (JCR-335) Deadlock caused by versioning operations within transaction In-Reply-To: <1558686721.1143123920210.JavaMail.jira@ajax> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_8003_266076.1143574612870" References: <1558686721.1143123920210.JavaMail.jira@ajax> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N ------=_Part_8003_266076.1143574612870 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Sorry to ask: what is the status of this issue? I see it is closed, but fix version is set to 1.1. TIA, ./alex -- .w( the_mindstorm )p. ---------- Forwarded message ---------- From: Tobias Bocanegra (JIRA) Date: Mar 23, 2006 5:25 PM Subject: [jira] Closed: (JCR-335) Deadlock caused by versioning operations within transaction To: dev@jackrabbit.apache.org [ http://issues.apache.org/jira/browse/JCR-335?page=3Dall ] Tobias Bocanegra closed JCR-335: -------------------------------- Fix Version: 1.1 Resolution: Fixed added a new internal resources that spans the entire trransaction and locks it on a workspace scope. this prevents the managers of different transactio= n to deadlock. > Deadlock caused by versioning operations within transaction > ----------------------------------------------------------- > > Key: JCR-335 > URL: http://issues.apache.org/jira/browse/JCR-335 > Project: Jackrabbit > Type: Bug > Components: versioning > Versions: 0.9, 1.0 > Environment: r383887 > Reporter: Tobias Bocanegra > Assignee: Tobias Bocanegra > Fix For: 1.1 > Attachments: threaddump-385412.txt > > Deadlock occurs, while running a very simple test, which is just trying > to checkout/checkin node within transaction concurrently from 2 threads. > Find enclosed thread dump, log and simple Java program. > I'm using UserTransaction implementation from jackrabbit test suite. > Regards > Przemo Pakulski > www.cognifide.com > Full thread dump Java HotSpot(TM) Client VM (1.4.2_08-b03 mixed mode): > "Thread-5" prio=3D5 tid=3D0x03054c48 nid=3D0x180c in Object.wait() [355f000..355fd8c] > at java.lang.Object.wait(Native Method) > - waiting on <0x1148ef20> (a EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock$WriterLock) > at java.lang.Object.wait(Object.java:429) > at EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock$WriterLock.a= cquire(Unknown Source) > - locked <0x1148ef20> (a EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock$WriterLock) > at org.apache.jackrabbit.core.state.SharedItemStateManager.acquireWriteLock( SharedItemStateManager.java:1137) > at org.apache.jackrabbit.core.state.SharedItemStateManager.access$200( SharedItemStateManager.java:110) > at org.apache.jackrabbit.core.state.SharedItemStateManager$Update.begin( SharedItemStateManager.java:456) > at org.apache.jackrabbit.core.state.SharedItemStateManager.beginUpdate( SharedItemStateManager.java:651) > at org.apache.jackrabbit.core.state.XAItemStateManager.prepare( XAItemStateManager.java:150) > at org.apache.jackrabbit.core.TransactionContext.prepare( TransactionContext.java:128) > - locked <0x11565ac8> (a org.apache.jackrabbit.core.TransactionContext) > at org.apache.jackrabbit.core.XASessionImpl.prepare( XASessionImpl.java:300) > at com.oyster.mom.contentserver.jcr.transaction.JackrabbitUserTransaction.comm= it (JackrabbitUserTransaction.java:102) > at com.oyster.mom.contentserver.jcr.transaction.JrTestDeadlock.run= ( JrTestDeadlock.java:97) > "Thread-4" prio=3D5 tid=3D0x0303b348 nid=3D0x9d0 in Object.wait() [351f000..351fd8c] > at java.lang.Object.wait(Native Method) > - waiting on <0x1148ef20> (a EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock$WriterLock) > at java.lang.Object.wait(Object.java:429) > at EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock$WriterLock.a= cquire(Unknown Source) > - locked <0x1148ef20> (a EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock$WriterLock) > at org.apache.jackrabbit.core.state.SharedItemStateManager.acquireWriteLock( SharedItemStateManager.java:1137) > at org.apache.jackrabbit.core.state.SharedItemStateManager.access$200( SharedItemStateManager.java:110) > at org.apache.jackrabbit.core.state.SharedItemStateManager$Update.begin( SharedItemStateManager.java:456) > at org.apache.jackrabbit.core.state.SharedItemStateManager.beginUpdate( SharedItemStateManager.java:651) > at org.apache.jackrabbit.core.state.XAItemStateManager.prepare( XAItemStateManager.java:150) > at org.apache.jackrabbit.core.TransactionContext.prepare( TransactionContext.java:128) > - locked <0x1156f558> (a org.apache.jackrabbit.core.TransactionContext) > at org.apache.jackrabbit.core.XASessionImpl.prepare( XASessionImpl.java:300) > at com.oyster.mom.contentserver.jcr.transaction.JackrabbitUserTransaction.comm= it (JackrabbitUserTransaction.java:102) > at com.oyster.mom.contentserver.jcr.transaction.JrTestDeadlock.run= ( JrTestDeadlock.java:97) > "IndexMerger" daemon prio=3D5 tid=3D0x030388b8 nid=3D0x1858 in Object.wai= t() [34df000..34dfd8c] > at java.lang.Object.wait(Native Method) > - waiting on <0x114fd280> (a org.apache.commons.collections.buffer.BlockingBuffer) > at java.lang.Object.wait(Object.java:429) > at org.apache.commons.collections.buffer.BlockingBuffer.remove( BlockingBuffer.java:107) > - locked <0x114fd280> (a org.apache.commons.collections.buffer.BlockingBuffer) > at org.apache.jackrabbit.core.query.lucene.IndexMerger.run( IndexMerger.java:235) > "Thread-2" daemon prio=3D5 tid=3D0x0303a230 nid=3D0xe4c in Object.wait() [349f000..349fd8c] > at java.lang.Object.wait(Native Method) > - waiting on <0x114fd2e0> (a java.util.TaskQueue) > at java.util.TimerThread.mainLoop(Timer.java:429) > - locked <0x114fd2e0> (a java.util.TaskQueue) > at java.util.TimerThread.run(Timer.java:382) > "Thread-1" daemon prio=3D5 tid=3D0x0301b7a0 nid=3D0x1a00 in Object.wait() [345f000..345fd8c] > at java.lang.Object.wait(Native Method) > - waiting on <0x114f9058> (a java.util.TaskQueue) > at java.lang.Object.wait(Object.java:429) > at java.util.TimerThread.mainLoop(Timer.java:403) > - locked <0x114f9058> (a java.util.TaskQueue) > at java.util.TimerThread.run(Timer.java:382) > "ObservationManager" daemon prio=3D5 tid=3D0x02ef6c50 nid=3D0x10d8 in Object.wait() [341f000..341fd8c] > at java.lang.Object.wait(Native Method) > - waiting on <0x114f38e0> (a org.apache.commons.collections.buffer.BlockingBuffer) > at java.lang.Object.wait(Object.java:429) > at org.apache.commons.collections.buffer.BlockingBuffer.remove( BlockingBuffer.java:107) > - locked <0x114f38e0> (a org.apache.commons.collections.buffer.BlockingBuffer) > at org.apache.jackrabbit.core.observation.ObservationManagerFactory.run( ObservationManagerFactory.java:155) > at java.lang.Thread.run(Thread.java:534) > "Signal Dispatcher" daemon prio=3D10 tid=3D0x00a05590 nid=3D0x1914 waitin= g on condition [0..0] > "Finalizer" daemon prio=3D9 tid=3D0x00a027f8 nid=3D0x17a4 in Object.wait(= ) [2c9f000..2c9fd8c] > at java.lang.Object.wait(Native Method) > - waiting on <0x113db118> (a java.lang.ref.ReferenceQueue$Lock) > at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111) > - locked <0x113db118> (a java.lang.ref.ReferenceQueue$Lock) > at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127) > at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) > "Reference Handler" daemon prio=3D10 tid=3D0x00a01478 nid=3D0x16d4 in Object.wait() [2c5f000..2c5fd8c] > at java.lang.Object.wait(Native Method) > - waiting on <0x113db180> (a java.lang.ref.Reference$Lock) > at java.lang.Object.wait(Object.java:429) > at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:115= ) > - locked <0x113db180> (a java.lang.ref.Reference$Lock) > "main" prio=3D5 tid=3D0x0003e6f0 nid=3D0x1470 in Object.wait() [7f000..7f= c38] > at java.lang.Object.wait(Native Method) > - waiting on <0x11524f10> (a com.oyster.mom.contentserver.jcr.transaction.JrTestDeadlock) > at java.lang.Thread.join(Thread.java:1001) > - locked <0x11524f10> (a com.oyster.mom.contentserver.jcr.transaction.JrTestDeadlock) > at java.lang.Thread.join(Thread.java:1054) > at com.oyster.mom.contentserver.jcr.transaction.JrTestDeadlock.mai= n (JrTestDeadlock.java:33) > "VM Thread" prio=3D5 tid=3D0x00a42730 nid=3D0x17d0 runnable > "VM Periodic Task Thread" prio=3D10 tid=3D0x00a45540 nid=3D0x1928 waiting= on condition > "Suspend Checker Thread" prio=3D10 tid=3D0x00a04af8 nid=3D0x17ac runnable > import javax.jcr.Node; > import javax.jcr.RepositoryException; > import javax.jcr.Session; > import javax.jcr.SimpleCredentials; > import org.apache.jackrabbit.core.RepositoryImpl; > import org.apache.jackrabbit.core.config.RepositoryConfig; > public class JrTestDeadlock extends Thread { > private static final org.apache.commons.logging.Log log =3D org.apache.commons.logging.LogFactory.getLog(JrTestDeadlock.class); > public static String REPOSITORY_HOME =3D "d:/repo/jackrabbit/"; > public static String REPOSITORY_CONFIG =3D REPOSITORY_HOME + " repository.xml"; > public static void main(String[] args) throws Exception { > JrTestDeadlock test =3D new JrTestDeadlock(-1); > test.startup(); > JrTestDeadlock tests[] =3D new JrTestDeadlock[2]; > for (int i =3D 0; i < tests.length; i++) { > JrTestDeadlock x =3D new JrTestDeadlock(i); > x.start(); > tests[i] =3D x; > } > for (int i =3D 0; i < tests.length; i++) { > tests[i].join(); > } > test.shutdown(); > } > private static RepositoryImpl repository; > private int id; > public JrTestDeadlock(int i) { > this.id =3D i; > } > public void startup() throws Exception { > System.setProperty("java.security.auth.login.config", "c:/jaas.config"); > RepositoryConfig config =3D RepositoryConfig.create(REPOSITORY_CON= FIG, REPOSITORY_HOME); > repository =3D RepositoryImpl.create(config); > Session session =3D repository.login(new SimpleCredentials("admin"= , "admin".toCharArray())); > Node rootNode =3D session.getRootNode(); > if (!rootNode.hasNode("folder")) { > Node folder =3D rootNode.addNode("folder"); > folder.addMixin("mix:versionable"); > folder.addMixin("mix:lockable"); > rootNode.save(); > } > session.logout(); > } > public void shutdown() throws RepositoryException { > repository.shutdown(); > } > public Node getFolder(Session session) throws RepositoryException { > return session.getRootNode().getNode("folder"); > } > public void run() { > try { > Session session =3D repository.login(new SimpleCredentials("admin", "admin".toCharArray())); > for (int i =3D 0; i < 100; i++) { > log.error("START id:" + id + ", i=3D" + i); > boolean success =3D false; > JackrabbitUserTransaction ut =3D new JackrabbitUserTransaction(session); > try { > ut.begin(); > Node folder =3D getFolder(session); > folder.checkout(); > folder.checkin(); > success =3D true; > log.info("SUCCESS id:" + id + ", i=3D" + i); > } > catch (Exception e) { > log.warn("FAIL:" + id + ", i=3D" + i, e); > } > finally { > try { > if (success) { > ut.commit(); > } > else { > ut.rollback(); > } > } > catch (Exception e) { > log.fatal(e); > } > } > } > session.logout(); > } > catch (RepositoryException e) { > e.printStackTrace(); > } > } > } > 13:46 ERROR JrTestDeadlock.run(JrTestDeadlock.java:76) - START id:0, i=3D= 0 > 13:46 ERROR JrTestDeadlock.run(JrTestDeadlock.java:76) - START id:1, i=3D= 0 > 13:46 INFO JrTestDeadlock.run(JrTestDeadlock.java:89) - SUCCESS id:0, i= =3D0 > 13:46 INFO JrTestDeadlock.run(JrTestDeadlock.java:89) - SUCCESS id:1, i= =3D0 > 13:46 ERROR org.apache.jackrabbit.core.state.XAItemStateManager.prepare( XAItemStateManager.java:156) - org.apache.jackrabbit.core.state.StaleItemStateException: 233e656f-79f8-414d-9e37-3fce865b492d/{ http://www.jcp.org/jcr/1.0}isCheckedOut has been modified externally > 13:46 FATAL JrTestDeadlock.run(JrTestDeadlock.java:104) - javax.transaction.RollbackException: Transaction rolled back: XA_ERR=3D104 > 13:46 ERROR JrTestDeadlock.run(JrTestDeadlock.java:76) - START id:1, i=3D= 1 > 13:46 WARN JrTestDeadlock.run(JrTestDeadlock.java:92) - FAIL:1, i=3D1 > ax.jcr.InvalidItemStateException: f83a830b-abbf-4ab2-8625-b9e2c4802316: the item does not exist anymore > at org.apache.jackrabbit.core.version.XAVersion.sanityCheck( XAVersion.java:81) > at org.apache.jackrabbit.core.version.XAVersion.getInternalVersion( XAVersion.java:70) > at org.apache.jackrabbit.core.version.AbstractVersion.getUUID( AbstractVersion.java:107) > at org.apache.jackrabbit.core.NodeImpl.checkout(NodeImpl.java:2759) > at JrTestDeadlock.run(JrTestDeadlock.java:85) > 13:46 ERROR JrTestDeadlock.run(JrTestDeadlock.java:76) - START id:1, i=3D= 2 > 13:46 INFO JrTestDeadlock.run(JrTestDeadlock.java:89) - SUCCESS id:1, i= =3D2 > 13:51 WARN org.apache.jackrabbit.core.TransactionContext.run( TransactionContext.java:239) - Transaction rolled back because timeout expired. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira ------=_Part_8003_266076.1143574612870--