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:

 

 

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

 

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

 

 

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