[ 
https://issues.apache.org/jira/browse/JCR-5095?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17871141#comment-17871141
 ] 

Konrad Windszus commented on JCR-5095:
--------------------------------------

My assumption is that 
https://github.com/apache/jackrabbit/blob/a4a3c7c38b1159472110b80d087549b146eeb54a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/TokenProvider.java#L147
 may fail under heavy concurrency. The token node name is created from Calendar 
populated from the epoch (with milliseconds), e.g. 
{color:#000000}2024-08-05T20:10:42.826+02:00.{color}

Under heavy concurrency the same node name may be used for different login 
tokens which may lead to same-name siblings. The {{TokenInfoImpl}} uses only 
the (non-unique) tokenPath to change expiry data and remove it (in 
https://github.com/apache/jackrabbit/blob/a4a3c7c38b1159472110b80d087549b146eeb54a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/TokenProvider.java#L449).

> TokenBasedLoginTest is flaky
> ----------------------------
>
>                 Key: JCR-5095
>                 URL: https://issues.apache.org/jira/browse/JCR-5095
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: core
>            Reporter: Konrad Windszus
>            Priority: Major
>
> The Jenkins build is failing sometimes due to that 
> ([https://ci-builds.apache.org/job/Jackrabbit/job/jackrabbit-trunk/).]
> The logs shows
> {code:java}
> [ERROR] 
> org.apache.jackrabbit.core.security.authentication.token.TokenBasedLoginTest.testConcurrentLogin
>  – Time elapsed: 2.463 s <<< FAILURE!junit.framework.AssertionFailedError: 
> javax.jcr.LoginException: Failed to commit: failed to build path of 
> b7a136a5-5247-460d-bd74-4e191872ca92: 18765f8a-895a-49c4-831b-dc5119faaacd 
> has no child entry for b7a136a5-5247-460d-bd74-4e191872ca92
> at junit.framework.Assert.fail(Assert.java:57)
> at junit.framework.TestCase.fail(TestCase.java:223)
> at 
> org.apache.jackrabbit.core.security.authentication.token.TokenBasedLoginTest.testConcurrentLogin(TokenBasedLoginTest.java:275)
> at 
> java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
> at java.base/java.lang.reflect.Method.invoke(Method.java:580)
> at junit.framework.TestCase.runTest(TestCase.java:177)
> at junit.framework.TestCase.runBare(TestCase.java:142)
> at junit.framework.TestResult$1.protect(TestResult.java:122)
> at junit.framework.TestResult.runProtected(TestResult.java:142)
> at junit.framework.TestResult.run(TestResult.java:125)
> at org.apache.jackrabbit.test.JCRTestResult.run(JCRTestResult.java:75)
> at junit.framework.TestCase.run(TestCase.java:130)
> at org.apache.jackrabbit.test.AbstractJCRTest.run(AbstractJCRTest.java:476)
> at junit.framework.TestSuite.runTest(TestSuite.java:241)
> at junit.framework.TestSuite.run(TestSuite.java:236)
> at junit.framework.TestSuite.runTest(TestSuite.java:241)
> at junit.framework.TestSuite.run(TestSuite.java:236)
> at 
> org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:90)
> at 
> org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:316)
> at 
> org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:240)
> at 
> org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:214)
> at 
> org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:155)
> at 
> org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)
> at 
> org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
> at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)
> at 
> org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495){code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to