Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 443455

Summary: modal dialog shown when task list index is corrupt
Product: z_Archived Reporter: Emerson Murphy-Hill <captain.emerson>
Component: MylynAssignee: Project Inbox <mylyn-triaged>
Status: CLOSED MOVED QA Contact:
Severity: normal    
Priority: P2 CC: jtk499
Version: unspecifiedKeywords: helpwanted
Target Milestone: ---   
Hardware: PC   
OS: Windows 8   
Whiteboard:

Description Emerson Murphy-Hill CLA 2014-09-06 17:02:47 EDT
In the task list view, whenever I type something, an Eclipse error dialog pops up. Stack trace below.

In my ".metadata\.mylyn\.taskListIndex" folder, I have a file named "segments-toolcita2.gen". I guess this file got created automatically by MS OneDrive when there was a conflict between it and the same file on another one of my systems. Deleting the file solves the problem.

I would expect Mylyn to function correctly even in the presence of unexpected files.

---------------------

eclipse.buildId=4.4.0.I20140606-1215
java.version=1.8.0_20
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
Framework arguments:  -product org.eclipse.epp.package.rcp.product
Command-line arguments:  -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.rcp.product

java.lang.NumberFormatException: For input string: "toolcita2.gen"
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Long.parseLong(Unknown Source)
	at org.apache.lucene.index.SegmentInfos.generationFromSegmentsFileName(SegmentInfos.java:226)
	at org.apache.lucene.index.SegmentInfos.getCurrentSegmentGeneration(SegmentInfos.java:161)
	at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:644)
	at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:75)
	at org.apache.lucene.index.IndexReader.open(IndexReader.java:462)
	at org.apache.lucene.index.IndexReader.open(IndexReader.java:322)
	at org.eclipse.mylyn.internal.tasks.index.core.TaskListIndex.getIndexReader(TaskListIndex.java:772)
	at org.eclipse.mylyn.internal.tasks.index.core.TaskListIndex.matches(TaskListIndex.java:569)
	at org.eclipse.mylyn.internal.tasks.index.ui.IndexedSubstringPatternFilter.isLeafMatch(IndexedSubstringPatternFilter.java:47)
	at org.eclipse.ui.dialogs.PatternFilter.isElementVisible(PatternFilter.java:243)
	at org.eclipse.ui.dialogs.PatternFilter.computeAnyVisible(PatternFilter.java:138)
	at org.eclipse.ui.dialogs.PatternFilter.isAnyVisible(PatternFilter.java:121)
	at org.eclipse.ui.dialogs.PatternFilter.isParentMatch(PatternFilter.java:262)
	at org.eclipse.ui.dialogs.PatternFilter.isElementVisible(PatternFilter.java:243)
	at org.eclipse.ui.dialogs.PatternFilter.select(PatternFilter.java:149)
	at org.eclipse.jface.viewers.ViewerFilter.filter(ViewerFilter.java:51)
	at org.eclipse.ui.dialogs.PatternFilter.filter(PatternFilter.java:89)
	at org.eclipse.jface.viewers.StructuredViewer.getFilteredChildren(StructuredViewer.java:909)
	at org.eclipse.jface.viewers.AbstractTreeViewer.getSortedChildren(AbstractTreeViewer.java:617)
	at org.eclipse.jface.viewers.AbstractTreeViewer.updateChildren(AbstractTreeViewer.java:2649)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1918)
	at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:684)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1893)
	at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1850)
	at org.eclipse.jface.viewers.StructuredViewer$8.run(StructuredViewer.java:1528)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1436)
	at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:366)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1397)
	at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1525)
	at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:533)
	at org.eclipse.ui.dialogs.FilteredTree$NotifyingTreeViewer.refresh(FilteredTree.java:1292)
	at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1481)
	at org.eclipse.ui.dialogs.FilteredTree$NotifyingTreeViewer.refresh(FilteredTree.java:1280)
	at org.eclipse.ui.dialogs.FilteredTree$2.runInUIThread(FilteredTree.java:528)
	at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:97)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:136)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4147)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3764)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:636)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:579)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:135)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:382)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:236)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1438)
Comment 1 Sam Davis CLA 2014-09-11 16:23:34 EDT
This is a bug in Apache Lucene: https://issues.apache.org/jira/browse/LUCENE-4405. Since it's been open for 2 years we should probably try to handle that exception:
Comment 2 Sam Davis CLA 2014-09-11 16:52:07 EDT
Actually there is not much we can do about it. The only way to resolve the issue is for the user to delete the file that Lucene objects to.
Comment 3 Emerson Murphy-Hill CLA 2014-09-11 20:15:38 EDT
Thanks, Sam. What about wrapping the error and throwing a more descriptive error message, and perhaps put it in the error log rather than a modal dialog?
Comment 4 Sam Davis CLA 2014-09-12 11:23:20 EDT
You're right, there shouldn't be a modal dialog when the index is corrupt and we can't fix it. Maybe once per session, to let the user know, but not every time they type in the task list. I am not sure that we can reliably extract the name of the offending file from the exception thrown by Lucene, but we could make a best effort. This bug has been marked helpwanted to indicate that we would be happy to support a community contribution to resolve it.
Comment 5 Eclipse Webmaster CLA 2022-11-15 11:45:08 EST
Mylyn has been restructured, and our issue tracking has moved to GitHub [1].

We are closing ~14K Bugzilla issues to give the new team a fresh start. If you feel that this issue is still relevant, please create a new one on GitHub.

[1] https://github.com/orgs/eclipse-mylyn