Hi all, I've been experimenting a bit with Oak and ran into something I thought I would share, in case there is a worthwhile bug to investigate. I have com.adobe.granite.quickstart-2012.22-SNAPSHOT.jar, which is rather old now, but looks to be the latest CRX build that hangs together. The test case involves a number of concurrent threads, creating different parts of a node hierarchy concurrently, via curl POSTs, such as:
command=/usr/bin/curl -sSo /dev/null -u admin:admin -F jcr:primaryType=nt:folder "http://chartis_a.ottperflab.corp.adobe.com:4502/content/folder/84/32" command=/usr/bin/curl -sSo /dev/null -u admin:admin -F jcr:primaryType=nt:folder "http://chartis_a.ottperflab.corp.adobe.com:4502/content/folder/84/32/25" command=/usr/bin/curl -sSo /dev/null -u admin:admin -F jcr:primaryType=nt:folder "http://chartis_a.ottperflab.corp.adobe.com:4502/content/folder/84/32/25/72" command=/usr/bin/curl -sSo /dev/null -u admin:admin -F jcr:primaryType=nt:folder "http://chartis_a.ottperflab.corp.adobe.com:4502/content/folder/84/32/25/72/6" command=/usr/bin/curl -sSo /dev/null -u admin:admin -F jcr:primaryType=nt:folder "http://chartis_a.ottperflab.corp.adobe.com:4502/content/folder/86" command=/usr/bin/curl -sSo /dev/null -u admin:admin -F jcr:primaryType=nt:folder "http://chartis_a.ottperflab.corp.adobe.com:4502/content/folder/86/00" What happened in my test case is that one of the threads hung whilst creating /content/folder/86/00. You can see the progress of the various threads here: [cid:image001.png@01CDF234.26111F90] This thread is not blocked however, but seems to be stuck in a loop, and it is constantly running doing something. If you care to look, there's a Yourkit profiling snapshot with this stuck thread here: \\ottfs01\users_g\gbuchana\MyTransfer\com.adobe.granite.quickstart-2012.22-SNAPSHOT-2013-01-11(2).snapshot<file:///\\ottfs01\users_g\gbuchana\MyTransfer\com.adobe.granite.quickstart-2012.22-SNAPSHOT-2013-01-11(2).snapshot> >From the profiler snapshot I captured, it appears to be stuck in: >org.apache.sling.servlets.post.impl.operations.AbstractCreateOperation.deepGetOrCreateNode() Where it is making a whole slew of repeated calls to various things [cid:image002.png@01CDF234.26111F90] Looking at the source code for deepGetOrCreateNode(), it would appear to be stuck in this loop: 478 Resource startingResource = null; 479 while (startingResource == null) { 480 if (startingResourcePath.equals("/")) { 481 startingResource = resolver.getResource("/"); 482 } else if (resolver.getResource(startingResourcePath) != null) { 483 startingResource = resolver.getResource(startingResourcePath); 484 updateNodeType(resolver, startingResourcePath, reqProperties, changes, versioningConfiguration); 485 updateMixins(resolver, startingResourcePath, reqProperties, changes, versioningConfiguration); 486 } else { 487 int pos = startingResourcePath.lastIndexOf('/'); 488 if (pos > 0) { 489 startingResourcePath = startingResourcePath.substring(0, pos); 490 } else { 491 startingResourcePath = "/"; 492 } 493 } 494 } Gardner Buchanan Adobe Systems Canada Office: +1 613 940 3842 Mobile: +1 613 884 7940