eclipse-jdt / eclipse-jdt/eclipse.jdt.core

Sporadic test hang in the indexer code

Open
#797 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
237
Forks
195
Avg merge
1d 12h
Merged PRs (30d)
47

Description

JDT Jenkins tests [sporadically hang ](https://github.com/eclipse-jdt/eclipse.jdt.core/pull/793#issuecomment-1445225917)in indexer code (again).
This time it seems the indexer managed to acquire and never release a write lock. The index in question is the meta-index.

- Full Jenkins console:
[consoleText_raw.txt](https://github.com/eclipse-jdt/eclipse.jdt.core/files/10841696/consoleText_raw.txt)
- Console part reporting hanging test:
[consoleText_hang.txt](https://github.com/eclipse-jdt/eclipse.jdt.core/files/10841700/consoleText_hang.txt)
- Workspace log:
[log.txt](https://github.com/eclipse-jdt/eclipse.jdt.core/files/10841702/log.txt)

Related :
- https://github.com/eclipse-jdt/eclipse.jdt.core/pull/69
- https://github.com/eclipse-jdt/eclipse.jdt.core/issues/41

**Most important parts from stack**

Test waits for IndexManager lock
```
"main": BLOCKED
org.eclipse.jdt.internal.core.search.indexing.IndexManager.findMatchingIndexNames(IndexManager.java:1600)
org.eclipse.jdt.internal.core.search.IndexSelector.getIndexLocations(IndexSelector.java:319)
org.eclipse.jdt.internal.core.search.JavaSearchParticipant.selectIndexURLs(JavaSearchParticipant.java:160)
org.eclipse.jdt.internal.core.search.PatternSearchJob.getIndexes(PatternSearchJob.java:186)
org.eclipse.jdt.internal.core.search.SubTypeSearchJob.getIndexes(SubTypeSearchJob.java:47)
org.eclipse.jdt.internal.core.search.PatternSearchJob.ensureReadyToRun(PatternSearchJob.java:99)
org.eclipse.jdt.internal.core.search.processing.JobManager.performConcurrentJob(JobManager.java:262)
org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.legacySearchAllPossibleSubTypes(IndexBasedHierarchyBuilder.java:605)
org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.searchAllPossibleSubTypes(IndexBasedHierarchyBuilder.java:506)
org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.determinePossibleSubTypes(IndexBasedHierarchyBuilder.java:465)
org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.build(IndexBasedHierarchyBuilder.java:158)
org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.compute(TypeHierarchy.java:323)
org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.refresh(TypeHierarchy.java:1319)
org.eclipse.jdt.internal.core.CreateTypeHierarchyOperation.executeOperation(CreateTypeHierarchyOperation.java:94)
org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:740)
org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:806)
org.eclipse.jdt.internal.core.SourceType.newTypeHierarchy(SourceType.java:950)
org.eclipse.jdt.core.tests.model.WorkingCopyOwnerTests.testHierarchy(WorkingCopyOwnerTests.java:939)
java.base@19.0.1/java.lang.invoke.LambdaForm$DMH/0x000000080120e400.invokeVirtual(LambdaForm$DMH)
java.base@19.0.1/java.lang.invoke.LambdaForm$MH/0x00000008010b8800.invoke(LambdaForm$MH)
java.base@19.0.1/java.lang.invoke.Invokers$Holder.invokeExact_MT(Invokers$Holder)
java.base@19.0.1/jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(DirectMethodHandleAccessor.java:154)
java.base@19.0.1/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
java.base@19.0.1/java.lang.reflect.Method.invoke(Method.java:578)
junit.framework.TestCase.runTest(TestCase.java:177)
org.eclipse.jdt.core.tests.junit.extension.TestCase.runTest(TestCase.java:983)
junit.framework.TestCase.runBare(TestCase.java:142)
junit.framework.TestResult$1.protect(TestResult.java:122)
junit.framework.TestResult.runProtected(TestResult.java:142)
junit.framework.TestResult.run(TestResult.java:125)
junit.framework.TestCase.run(TestCase.java:130)
junit.framework.TestSuite.runTest(TestSuite.java:241)
org.eclipse.jdt.core.tests.model.SuiteOfTestCases$Suite.runTest(SuiteOfTestCases.java:114)
junit.framework.TestSuite.run(TestSuite.java:236)
org.eclipse.jdt.core.tests.model.SuiteOfTestCases$Suite.superRun(SuiteOfTestCases.java:98)
org.eclipse.jdt.core.tests.model.SuiteOfTestCases$Suite$1.protect(SuiteOfTestCases.java:86)
junit.framework.TestResult.runProtected(TestResult.java:142)
org.eclipse.jdt.core.tests.model.SuiteOfTestCases$Suite.run(SuiteOfTestCases.java:95)
```

Indexer holds IndexManager lock and waits for write lock on particular index
```
"Java indexing": WAITING
java.base@19.0.1/java.lang.Object.wait0(Native Method)
java.base@19.0.1/java.lang.Object.wait(Object.java:366)
java.base@19.0.1/java.lang.Object.wait(Object.java:339)
org.eclipse.jdt.internal.core.search.indexing.ReadWriteMonitor.enterWrite(ReadWriteMonitor.java:49)
org.eclipse.jdt.internal.core.search.indexing.IndexManager.saveMetaIndex(IndexManager.java:1247)
org.eclipse.jdt.internal.core.search.indexing.IndexManager.saveIndexes(IndexManager.java:1225)
org.eclipse.jdt.internal.core.search.indexing.IndexManager.notifyIdle(IndexManager.java:838)
org.eclipse.jdt.internal.core.search.processing.JobManager.indexerLoop(JobManager.java:487)
org.eclipse.jdt.internal.core.search.processing.JobManager$$Lambda$165/0x0000000801275d58.run(Unknown Source)
java.base@19.0.1/java.lang.Thread.run(Thread.java:1589)
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.