[ 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)