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

Bug 516910

Summary: [newindex] BufferUnderflowException in Chunk.getChars
Product: [Eclipse Project] JDT Reporter: Gunnar Wagenknecht <gunnar>
Component: CoreAssignee: JDT-Core-Inbox <jdt-core-inbox>
Status: CLOSED WONTFIX QA Contact:
Severity: normal    
Priority: P3 CC: loskutov, rsc
Version: 4.7   
Target Milestone: ---   
Hardware: PC   
OS: Mac OS X   
Whiteboard:

Description Gunnar Wagenknecht CLA 2017-05-18 14:31:24 EDT
While working with the new indexer we go into a state that constantly brought the following exception:

java.nio.BufferUnderflowException
java.nio.CharBuffer.get(CharBuffer.java:688)
org.eclipse.jdt.internal.core.nd.db.Chunk.getChars(Chunk.java:285)
org.eclipse.jdt.internal.core.nd.db.LongString.getChars(LongString.java:121)
org.eclipse.jdt.internal.core.nd.db.LongString.compare(LongString.java:223)
org.eclipse.jdt.internal.core.nd.field.FieldSearchIndex$SearchCriteriaToBtreeVisitorAdapter.compare(FieldSearchIndex.java:132)
org.eclipse.jdt.internal.core.nd.db.BTree.accept(BTree.java:628)
org.eclipse.jdt.internal.core.nd.db.BTree.accept(BTree.java:647)
org.eclipse.jdt.internal.core.nd.db.BTree.accept(BTree.java:598)
org.eclipse.jdt.internal.core.nd.field.FieldSearchIndex.findBest(FieldSearchIndex.java:232)

I could imagine that this was a corrupt index. However, I was wondering if this is expected or should be handled?
Comment 1 Stefan Cordes CLA 2019-07-05 02:56:04 EDT
Today I faced the same with Windows 10 and
org.eclipse.jdt.core_3.13.100.v20171123-1049

(Eclipse RCP
 Version: 4.7.2.v20171130-0510
 Build id: M20171130-0510)

Error log is fill of

java.nio.BufferUnderflowException
	at java.nio.CharBuffer.get(CharBuffer.java:688)
	at org.eclipse.jdt.internal.core.nd.db.Chunk.getChars(Chunk.java:340)
	at org.eclipse.jdt.internal.core.nd.db.LongString.getChars(LongString.java:116)
	at org.eclipse.jdt.internal.core.nd.db.LongString.compareCompatibleWithIgnoreCase(LongString.java:238)
	at org.eclipse.jdt.internal.core.nd.field.FieldSearchIndex$SearchCriteriaToBtreeVisitorAdapter.compare(FieldSearchIndex.java:135)
	at org.eclipse.jdt.internal.core.nd.db.BTree.accept(BTree.java:652)
	at org.eclipse.jdt.internal.core.nd.db.BTree.accept(BTree.java:679)
	at org.eclipse.jdt.internal.core.nd.db.BTree.accept(BTree.java:679)
	at org.eclipse.jdt.internal.core.nd.db.BTree.accept(BTree.java:622)
	at org.eclipse.jdt.internal.core.nd.field.FieldSearchIndex.findBest(FieldSearchIndex.java:238)
	at org.eclipse.jdt.internal.core.nd.java.JavaIndex.getResourceFile(JavaIndex.java:97)
	at org.eclipse.jdt.internal.core.ClasspathEntry.getManifestContents(ClasspathEntry.java:988)
	at org.eclipse.jdt.internal.core.ClasspathEntry.getCalledFileNames(ClasspathEntry.java:1030)
	at org.eclipse.jdt.internal.core.ClasspathEntry.resolvedChainedLibraries(ClasspathEntry.java:954)
	at org.eclipse.jdt.internal.core.ClasspathEntry.resolvedChainedLibraries(ClasspathEntry.java:941)
	at org.eclipse.jdt.internal.core.ClasspathEntry.resolvedChainedLibraries(ClasspathEntry.java:1651)
	at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:2972)
	at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:3150)
	at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:2255)
	at org.eclipse.jdt.internal.core.DynamicProjectReferences.getDependentProjects(DynamicProjectReferences.java:34)
	at org.eclipse.core.internal.resources.ProjectDescription.computeDynamicReferencesForProject(ProjectDescription.java:950)
	at org.eclipse.core.internal.resources.ProjectDescription.getAllBuildConfigReferences(ProjectDescription.java:265)
	at org.eclipse.core.internal.resources.ProjectDescription.getAllReferences(ProjectDescription.java:221)
	at org.eclipse.core.internal.resources.Project.getReferencedProjects(Project.java:469)
	at org.eclipse.ui.actions.CloseUnrelatedProjectsAction.buildConnectedComponents(CloseUnrelatedProjectsAction.java:78)
	at org.eclipse.ui.actions.CloseUnrelatedProjectsAction.computeRelated(CloseUnrelatedProjectsAction.java:195)
	at org.eclipse.ui.actions.CloseUnrelatedProjectsAction.getSelectedResources(CloseUnrelatedProjectsAction.java:212)
	at org.eclipse.ui.actions.SelectionListenerAction.selectionIsOfType(SelectionListenerAction.java:240)
	at org.eclipse.ui.actions.CloseResourceAction.updateSelection(CloseResourceAction.java:187)
	at org.eclipse.ui.actions.BaseSelectionListenerAction.selectionChanged(BaseSelectionListenerAction.java:124)
	at org.eclipse.ui.actions.CloseUnrelatedProjectsAction.resourceChanged(CloseUnrelatedProjectsAction.java:236)
	at org.eclipse.core.internal.events.NotificationManager$1.run(NotificationManager.java:299)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:289)
	at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:152)
	at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:374)
	at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1469)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:157)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:232)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)


Very first error was "Database corruption detected during indexing. Deleting and rebuilding the index."

org.eclipse.jdt.internal.core.nd.db.IndexException: Error
	at org.eclipse.jdt.internal.core.nd.db.Database.databaseCorruptionDetected(Database.java:506)
	at org.eclipse.jdt.internal.core.nd.db.Database.getChunk(Database.java:450)
	at org.eclipse.jdt.internal.core.nd.db.BTree$BTNode.<init>(BTree.java:333)
	at org.eclipse.jdt.internal.core.nd.db.BTree$BTNode.getChild(BTree.java:344)
	at org.eclipse.jdt.internal.core.nd.db.BTree.deleteImp(BTree.java:451)
	at org.eclipse.jdt.internal.core.nd.db.BTree.deleteImp(BTree.java:491)
	at org.eclipse.jdt.internal.core.nd.db.BTree.deleteImp(BTree.java:458)
	at org.eclipse.jdt.internal.core.nd.db.BTree.delete(BTree.java:310)
	at org.eclipse.jdt.internal.core.nd.field.FieldSearchKey.cleanup(FieldSearchKey.java:106)
	at org.eclipse.jdt.internal.core.nd.field.FieldSearchKey.destruct(FieldSearchKey.java:95)
	at org.eclipse.jdt.internal.core.nd.field.StructDef.destructFields(StructDef.java:447)
	at org.eclipse.jdt.internal.core.nd.field.StructDef$1.destructFields(StructDef.java:157)
	at org.eclipse.jdt.internal.core.nd.field.StructDef$1.destruct(StructDef.java:150)
	at org.eclipse.jdt.internal.core.nd.Nd.delete(Nd.java:685)
	at org.eclipse.jdt.internal.core.nd.NdNode.delete(NdNode.java:89)
	at org.eclipse.jdt.internal.core.nd.indexer.Indexer.deleteResource(Indexer.java:578)
	at org.eclipse.jdt.internal.core.nd.indexer.Indexer.cleanGarbage(Indexer.java:514)
	at org.eclipse.jdt.internal.core.nd.indexer.Indexer.rescan(Indexer.java:260)
	at org.eclipse.jdt.internal.core.nd.indexer.Indexer.lambda$0(Indexer.java:146)
	at org.eclipse.core.runtime.jobs.Job$2.run(Job.java:182)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)


Disable the new java Index, Rebuild and enable again is a workaround.
Comment 2 Andrey Loskutov CLA 2019-07-05 03:28:01 EDT
New index is unfortunately not supported anymore. Please use old index.