Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Infinite loop in CompletionProposalTools.getScoreOfFilterMatchHelper #1132

Closed
apupier opened this issue Oct 3, 2024 · 4 comments
Closed

Comments

@apupier
Copy link
Contributor

apupier commented Oct 3, 2024

Infinite loop in CompletionProposalTools.getScoreOfFilterMatchHelper (or at least 20 minutes looping in it)

I do not know how to reproduce.
Language Server Protocol client for Eclipse IDE (Incubation) 0.18.10.202405280703 org.eclipse.lsp4e
in Eclipse Version: 2024-06 (4.32.0) Build id: 20240606-1231

org.eclipse.lsp4e.operations.completion.CompletionProposalTools.lengthOfPrefixMatch(CompletionProposalTools.java:193)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:165)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatch(CompletionProposalTools.java:149)
org.eclipse.lsp4e.operations.completion.LSCompletionProposal.getRankScore(LSCompletionProposal.java:212)
org.eclipse.lsp4e.operations.completion.LSCompletionProposalComparator.compare(LSCompletionProposalComparator.java:42)
org.eclipse.lsp4e.operations.completion.LSCompletionProposalComparator.compare(LSCompletionProposalComparator.java:1)
[email protected]/java.util.TimSort.binarySort(TimSort.java:296)
[email protected]/java.util.TimSort.sort(TimSort.java:239)
[email protected]/java.util.Arrays.sort(Arrays.java:1234)
org.eclipse.lsp4e.operations.completion.LSContentAssistProcessor.computeCompletionProposals(LSContentAssistProcessor.java:169)
org.eclipse.jface.text.contentassist.AsyncCompletionProposalPopup.lambda$10(AsyncCompletionProposalPopup.java:378)
org.eclipse.jface.text.contentassist.AsyncCompletionProposalPopup$$Lambda/0x00007f2bed277908.run(Unknown Source)
org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
org.eclipse.jface.text.contentassist.AsyncCompletionProposalPopup.lambda$9(AsyncCompletionProposalPopup.java:377)
org.eclipse.jface.text.contentassist.AsyncCompletionProposalPopup$$Lambda/0x00007f2bed2776e8.get(Unknown Source)
[email protected]/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)
[email protected]/java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1760)
[email protected]/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
[email protected]/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
[email protected]/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
[email protected]/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
[email protected]/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatch(CompletionProposalTools.java:149)
org.eclipse.lsp4e.operations.completion.LSCompletionProposal.getRankScore(LSCompletionProposal.java:212)
org.eclipse.lsp4e.operations.completion.LSCompletionProposalComparator.compare(LSCompletionProposalComparator.java:42)
org.eclipse.lsp4e.operations.completion.LSCompletionProposalComparator.compare(LSCompletionProposalComparator.java:1)
[email protected]/java.util.TimSort.binarySort(TimSort.java:296)
[email protected]/java.util.TimSort.sort(TimSort.java:239)
[email protected]/java.util.Arrays.sort(Arrays.java:1234)
org.eclipse.lsp4e.operations.completion.LSContentAssistProcessor.computeCompletionProposals(LSContentAssistProcessor.java:169)
org.eclipse.jface.text.contentassist.AsyncCompletionProposalPopup.lambda$10(AsyncCompletionProposalPopup.java:378)
org.eclipse.jface.text.contentassist.AsyncCompletionProposalPopup$$Lambda/0x00007f2bed277908.run(Unknown Source)
org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
org.eclipse.jface.text.contentassist.AsyncCompletionProposalPopup.lambda$9(AsyncCompletionProposalPopup.java:377)
org.eclipse.jface.text.contentassist.AsyncCompletionProposalPopup$$Lambda/0x00007f2bed2776e8.get(Unknown Source)
[email protected]/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)
[email protected]/java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1760)
[email protected]/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
[email protected]/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
[email protected]/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
[email protected]/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
[email protected]/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)
@BoykoAlex
Copy link
Contributor

Can't see how CompletionProposalTools.getScoreOfFilterMatchHelper(..) can loop forever... Are you getting stack overflow eventually?
Any chance you can turn on boot ls logs as well? Wonder how many completion proposals the LS has sent out... Also did you invoke content assists and continue typing while completions are showing to narrow down the list of completions?

@apupier
Copy link
Contributor Author

apupier commented Oct 4, 2024

Can't see how CompletionProposalTools.getScoreOfFilterMatchHelper(..) can loop forever... Are you getting stack overflow eventually?

no, I killed it after 30 minutes

Also did you invoke content assists and continue typing while completions are showing to narrow down the list of completions?

I do not remember exactly. I was doing several things in parallel and was switching between windows, I realized that my fan was at max speed and so looked which process was taking the CPU to the max.

If just the stacktrace is not enough to guide more I guess we can close the issue for now. If I'm able to reproduce maybe we would be able to narrow down the use case and I would reopen at that time.

@sebthom
Copy link
Member

sebthom commented Jan 12, 2025

@apupier I tried to provoke the endless loop in a test case with random strings for getScoreOfFilterMatch but was not able to do so even after hundred million iterations.

As you suggested I am closing this issue for now. If this happens again please provide complete stacktraces. ideally multiple ones with a few seconds time difference.

@sebthom sebthom closed this as not planned Won't fix, can't repro, duplicate, stale Jan 12, 2025
@JonathanLeech
Copy link

JonathanLeech commented Feb 17, 2025

Eclipse hung 3 times today so far. Doesn't periodically save open files and let you recover. Its not making progress or growing the stack so it probably won't overflow. it varies between 16 and 23 stack entries in CompletionProposalTools.java

"main" #1 [259] prio=6 os_prio=31 cpu=1500992.69ms elapsed=1926.20s tid=0x00007fec7d818000 nid=259 runnable  [0x00007ff7aff7f000]
   java.lang.Thread.State: RUNNABLE
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:176)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:169)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatchHelper(CompletionProposalTools.java:179)
	at org.eclipse.lsp4e.operations.completion.CompletionProposalTools.getScoreOfFilterMatch(CompletionProposalTools.java:149)
	at org.eclipse.lsp4e.operations.completion.LSCompletionProposal.getRankScore(LSCompletionProposal.java:216)
	at org.eclipse.lsp4e.jdt.LSJavaProposal.getRelevance(LSJavaProposal.java:64)
	at org.eclipse.jdt.ui.text.java.CompletionProposalComparator.getRelevance(CompletionProposalComparator.java:85)
	at org.eclipse.jdt.ui.text.java.CompletionProposalComparator.compare(CompletionProposalComparator.java:61)
	at org.eclipse.jdt.ui.text.java.CompletionProposalComparator.compare(CompletionProposalComparator.java:1)
	at org.eclipse.jdt.internal.ui.text.java.RelevanceSorter.compare(RelevanceSorter.java:40)
	at org.eclipse.jface.text.contentassist.CompletionProposalPopup$$Lambda/0x000000002f1e7b10.compare(Unknown Source)
	at java.util.TimSort.countRunAndMakeAscending(java.base@21.0.5/TimSort.java:355)
	at java.util.TimSort.sort(java.base@21.0.5/TimSort.java:220)
	at java.util.Arrays.sort(java.base@21.0.5/Arrays.java:1308)
	at java.util.ArrayList.sort(java.base@21.0.5/ArrayList.java:1804)
	at org.eclipse.jface.text.contentassist.CompletionProposalPopup.sortProposals(CompletionProposalPopup.java:2027)
	at org.eclipse.jface.text.contentassist.CompletionProposalPopup.setProposals(CompletionProposalPopup.java:1181)
	at org.eclipse.jface.text.contentassist.CompletionProposalPopup$1.run(CompletionProposalPopup.java:375)
	at org.eclipse.jface.text.contentassist.CompletionProposalPopup.getSelectedProposal(CompletionProposalPopup.java:927)
	at org.eclipse.jface.text.contentassist.CompletionProposalPopup.setProposals(CompletionProposalPopup.java:1166)
	at org.eclipse.jface.text.contentassist.AsyncCompletionProposalPopup.lambda$4(AsyncCompletionProposalPopup.java:267)
	at org.eclipse.jface.text.contentassist.AsyncCompletionProposalPopup$$Lambda/0x000000002f1ba9d8.run(Unknown Source)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:132)
	- locked <0x0000000082f03250> (a org.eclipse.swt.widgets.RunnableLock)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4382)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4005)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1151)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1042)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:663)
	at org.eclipse.ui.internal.Workbench$$Lambda/0x000000002e295df8.run(Unknown Source)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:570)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:173)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:178)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:208)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:143)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:109)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:439)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:271)
	at java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(java.base@21.0.5/DirectMethodHandle$Holder)
	at java.lang.invoke.LambdaForm$MH/0x000000002e007800.invoke(java.base@21.0.5/LambdaForm$MH)
	at java.lang.invoke.LambdaForm$MH/0x000000002e007c00.invokeExact_MT(java.base@21.0.5/LambdaForm$MH)
	at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@21.0.5/DirectMethodHandleAccessor.java:155)
	at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@21.0.5/DirectMethodHandleAccessor.java:103)
	at java.lang.reflect.Method.invoke(java.base@21.0.5/Method.java:580)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:668)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:605)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1481)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants