You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-dev@jackrabbit.apache.org by Gardner Buchanan <gb...@adobe.com> on 2013/01/14 14:50:05 UTC

Hung thread in OAK CRX -- maybe a bug to look into

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


RE: Hung thread in OAK CRX -- maybe a bug to look into

Posted by Marcel Reutegger <mr...@adobe.com>.
Hi Gardner,

> 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:

you are using a binary, which is adobe internal and not available to the
public. this makes it a bit hard for non-adobe developers to reproduce
the behavior you see.

would it be possible for you to convert this into a test class that we can
run with Oak only?

regards
 marcel