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

Reply via email to