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