Bug 241400 - [LinkedResources] Random errors when changing project settings
Summary: [LinkedResources] Random errors when changing project settings
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.4   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.5 M3   Edit
Assignee: Jerome Lanneluc CLA
QA Contact:
URL:
Whiteboard:
Keywords:
: 237767 (view as bug list)
Depends on:
Blocks:
 
Reported: 2008-07-18 10:10 EDT by Sebastian Kopsan CLA
Modified: 2008-11-21 11:00 EST (History)
5 users (show)

See Also:


Attachments
Proposed fix (4.90 KB, patch)
2008-09-24 10:10 EDT, Jerome Lanneluc CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Sebastian Kopsan CLA 2008-07-18 10:10:14 EDT
Build ID: I20080617-2000

Steps To Reproduce:
The error is hard to reproduce as there is no definite way to do so. Sometimes changing project settings works as expected, sometimes it doesn't.

More information:
The problem occurs when changing project settings. Adding a new folder to a project sometimes fails and an Eclipse restart is required. When adding dependent projects or appending a JAR-File to the project settings sometimes requires two or more tries until it finally succeeds.

I haven't found any way to reproduce the problem. The error message doesn't supply any useful hint where to look for the problem, except the information that there is something with a linked resource. But the problem occurs also on a  workspace that just contains one project without using any linked resources. I just use the ClearCase SCM Adapter as an additional plugin, but even a vanilla Eclipse installation produces the error.

The error message is:
Cannot create linked resource '/.org.eclipse.jdt.core.external.folders/.link0'.  The parent resource is not accessible.

No stack trace is available.

SessionData:
eclipse.buildId=I20080617-2000
java.version=1.6.0_07
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=de_DE
Framework arguments:  -showlocation
Command-line arguments:  -os win32 -ws win32 -arch x86 -data D:\VE Stuff\Workspaces\Workspace2 -showlocation

Any hint where to look for further information on this problem would be appreciated as it really annoying to reconfigure a project again and again.
Comment 1 Gustavo de Paula CLA 2008-07-18 11:15:47 EDT
hi sebastian,

the problem usually occurs when you change the project settings and there is a new build or just changing without rebuilding? on mtj we track the project resources to know when to rebuild and generate a temporary jad/jar file. we already notice some problems (also hard to reproduce problems) associated to classpaths in the build process.

:)
gep
Comment 2 Sebastian Kopsan CLA 2008-07-18 11:49:29 EDT
Hi and thanks for your quick response. Unfortunately I had JavaScript disabled when entering this bug report, so BugZilla had automatically assinged it to MTJ, but it is a JDT related problem. Was already wondering why a Motorola mail domain was informed :) Will try to reassign it to JDT, but I think you have to change the assignee then? Sorry, my fault.

For the new assignee: After some more digging in the error logs i was able to find some stack traces.

org.eclipse.core.internal.resources.ResourceException: Cannot create linked resource '/.org.eclipse.jdt.core.external.folders/.link0'.  The parent resource is not accessible.
	at org.eclipse.core.internal.resources.Resource.assertLinkRequirements(Resource.java:160)
	at org.eclipse.core.internal.resources.Resource.createLink(Resource.java:592)
	at org.eclipse.core.internal.resources.Resource.createLink(Resource.java:574)
	at org.eclipse.jdt.internal.core.ExternalFoldersManager.createLinkFolder(ExternalFoldersManager.java:111)
	at org.eclipse.jdt.internal.core.ExternalFolderChange.updateExternalFoldersIfNecessary(ExternalFolderChange.java:47)
	at org.eclipse.jdt.internal.core.DeltaProcessor.resourceChanged(DeltaProcessor.java:1956)
	at org.eclipse.jdt.internal.core.DeltaProcessingState.resourceChanged(DeltaProcessingState.java:410)
	at org.eclipse.core.internal.events.NotificationManager$2.run(NotificationManager.java:288)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
	at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:282)
	at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:148)
	at org.eclipse.core.internal.resources.Workspace.broadcastBuildEvent(Workspace.java:297)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:136)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:238)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)


org.eclipse.core.internal.resources.ResourceException: The project description file (.project) for '.org.eclipse.jdt.core.external.folders' is missing.  This file contains important information about the project.  The project will not function properly until this file is restored.
	at org.eclipse.core.internal.localstore.FileSystemResourceManager.read(FileSystemResourceManager.java:669)
	at org.eclipse.core.internal.resources.SaveManager.restoreMetaInfo(SaveManager.java:797)
	at org.eclipse.core.internal.resources.SaveManager.restore(SaveManager.java:702)
	at org.eclipse.core.internal.resources.Project.open(Project.java:872)
	at org.eclipse.core.internal.resources.Project.open(Project.java:911)
	at org.eclipse.jdt.internal.core.ExternalFoldersManager.createExternalFoldersProject(ExternalFoldersManager.java:176)
	at org.eclipse.jdt.internal.core.ExternalFoldersManager.createLinkFolder(ExternalFoldersManager.java:108)
	at org.eclipse.jdt.internal.core.ExternalFolderChange.updateExternalFoldersIfNecessary(ExternalFolderChange.java:47)
	at org.eclipse.jdt.internal.core.DeltaProcessor.resourceChanged(DeltaProcessor.java:1956)
	at org.eclipse.jdt.internal.core.DeltaProcessingState.resourceChanged(DeltaProcessingState.java:410)
	at org.eclipse.core.internal.events.NotificationManager$2.run(NotificationManager.java:288)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
	at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:282)
	at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:148)
	at org.eclipse.core.internal.resources.Workspace.broadcastBuildEvent(Workspace.java:297)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:136)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:238)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)


And a mysterious message that occurs every second: Problem occurred in auto-refresh native code: 5. 


Additionally this message occured: Problems occurred when invoking code from plug-in: "org.eclipse.core.resources": 

java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
at java.util.HashMap$KeyIterator.next(HashMap.java:828)
at java.util.AbstractCollection.toArray(AbstractCollection.java:124)
at com.ibm.rational.clearcase.ccrefresh.CcRefreshProviderService.visit(CcRefreshProviderService.java:185)
at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:68)
at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79)
at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79)
at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79)
at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79)
at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79)
at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79)
at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79)
at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79)
at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79)
at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:48)
at com.ibm.rational.clearcase.ccrefresh.CcRefreshProviderService.resourceChanged(CcRefreshProviderService.java:132)
at org.eclipse.core.internal.events.NotificationManager$2.run(NotificationManager.java:288)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:282)
at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:148)
at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:313)
at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1022)
at org.eclipse.core.internal.resources.Resource.delete(Resource.java:731)
at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.cleanOutputFolders(BatchImageBuilder.java:114)
at org.eclipse.jdt.internal.core.builder.JavaBuilder.clean(JavaBuilder.java:291)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:635)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:170)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:201)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:253)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:256)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:309)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:341)
at org.eclipse.core.internal.resources.Workspace.build(Workspace.java:330)
at org.eclipse.ui.internal.ide.dialogs.CleanDialog.doClean(CleanDialog.java:299)
at org.eclipse.ui.internal.ide.dialogs.CleanDialog$1.runInWorkspace(CleanDialog.java:147)
at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

This seems to be a ClearCase plugin related problem, but may be a cause? (Remember, the error occurs also without the CC plugin installed)
Comment 3 Gustavo de Paula CLA 2008-07-18 15:52:37 EDT
assignment was wrong

:)
gustavo
Comment 4 Olivier Thomann CLA 2008-07-21 10:18:47 EDT
Move to Platform/Resources
Comment 5 Szymon Brandys CLA 2008-07-22 06:11:09 EDT
(In reply to comment #2)
> Will try to reassign it to JDT...
> 
> org.eclipse.core.internal.resources.ResourceException: Cannot create linked
> resource '/.org.eclipse.jdt.core.external.folders/.link0'.  The parent resource
> is not accessible.
>         at
> org.eclipse.core.internal.resources.Resource.assertLinkRequirements(Resource.java:160)
>         at
> org.eclipse.core.internal.resources.Resource.createLink(Resource.java:592)
>         at
> org.eclipse.core.internal.resources.Resource.createLink(Resource.java:574)
>         at
> org.eclipse.jdt.internal.core.ExternalFoldersManager.createLinkFolder(ExternalFoldersManager.java:111)
>         at
> org.eclipse.jdt.internal.core.ExternalFolderChange.updateExternalFoldersIfNecessary(ExternalFolderChange.java:47)
>         at
> org.eclipse.jdt.internal.core.DeltaProcessor.resourceChanged(DeltaProcessor.java:1956)
>         at
> org.eclipse.jdt.internal.core.DeltaProcessingState.resourceChanged(DeltaProcessingState.java:410)
>         at
> org.eclipse.core.internal.events.NotificationManager$2.run(NotificationManager.java:288)
>         at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
>         at

Right, core.resources entries are at the end of the stacktrace, however this seems to be jdt.core issue related to external class folders introduced in 3.4. Probably Jerome should comment on it. 

> And a mysterious message that occurs every second: Problem occurred in
> auto-refresh native code: 5. 
> 
> Additionally this message occured: Problems occurred when invoking code from
> plug-in: "org.eclipse.core.resources": 
> 
> java.util.ConcurrentModificationException
> at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
> at java.util.HashMap$KeyIterator.next(HashMap.java:828)
> at java.util.AbstractCollection.toArray(AbstractCollection.java:124)
> at 
com.ibm.rational.clearcase.ccrefresh.CcRefreshProviderService.visit(CcRefreshProviderService.java:185)

The second exception is a problem in the clearcase plug-in.

Comment 6 Jerome Lanneluc CLA 2008-08-19 10:26:44 EDT
The .metadata was tampered with. In particular the .project file for the external project was deleted. The crash happens in the crash recovery code where the .project file was just recreated on the line above. There is nothing more we can do. Won't fix.
Comment 7 Jerome Lanneluc CLA 2008-09-02 05:04:30 EDT
*** Bug 237767 has been marked as a duplicate of this bug. ***
Comment 8 Jerome Lanneluc CLA 2008-09-15 05:14:05 EDT
Actually, I was able to reproduce following those steps:
1. Start a new workspace on "d:\temp\test"
2. Create a Java project "Test"
3. Add an external class folder to the build path of "Test" (e.g. "d:\temp\lib")
4. Shutdown
5. Rename "d:\temp\test" to "d:\temp\test2"
6. Start Eclipse on this new workspace
Observe: You get the stack traces reported in comment 2 in the .log

Reopening to fix for 3.5M3
Comment 9 Jerome Lanneluc CLA 2008-09-24 10:10:40 EDT
Created attachment 113364 [details]
Proposed fix

Note that there is no regression test as one cannot move the workspace in tests.
Comment 10 Jerome Lanneluc CLA 2008-09-24 11:45:47 EDT
Fix released for 3.5M3
Comment 11 Olivier Thomann CLA 2008-10-28 13:21:48 EDT
On the restart (step 6), I got:
The project description file (.project) for '.org.eclipse.jdt.core.external.folders' is missing.  This file contains important information about the project.  The project will not function properly until this file is restored.

org.eclipse.core.internal.resources.ResourceException: The project description file (.project) for '.org.eclipse.jdt.core.external.folders' is missing.  This file contains important information about the project.  The project will not function properly until this file is restored.
at org.eclipse.core.internal.localstore.FileSystemResourceManager.read(FileSystemResourceManager.java:687)
at org.eclipse.core.internal.resources.SaveManager.restoreMetaInfo(SaveManager.java:797)
at org.eclipse.core.internal.resources.SaveManager.restoreMetaInfo(SaveManager.java:777)
at org.eclipse.core.internal.resources.SaveManager.restore(SaveManager.java:663)
at org.eclipse.core.internal.resources.SaveManager.startup(SaveManager.java:1326)
at org.eclipse.core.internal.resources.Workspace.startup(Workspace.java:1953)
at org.eclipse.core.internal.resources.Workspace.open(Workspace.java:1716)
at org.eclipse.core.resources.ResourcesPlugin.start(ResourcesPlugin.java:376)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:804)
at java.security.AccessController.doPrivileged(Native Method)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:798)
at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:779)
at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:346)
at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:272)
at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:400)
at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:111)
at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:427)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:192)
at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:372)
at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:33)
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:445)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:401)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:389)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:86)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:114)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:370)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
at org.eclipse.equinox.launcher.Main.main(Main.java:1212)
Comment 12 Jerome Lanneluc CLA 2008-10-29 06:04:58 EDT
(In reply to comment #11)
This is a different stack trace than the one from comment 2. JDT/Core was involved in the stack trace from comment 2. The stack trace from comment 11 doesn't involve JDT/Core. Please open a separate bug agains Platform/Resources.
Comment 13 Jerome Lanneluc CLA 2008-10-29 07:34:28 EDT
(In reply to comment #8)
> Actually, I was able to reproduce following those steps:
> 1. Start a new workspace on "d:\temp\test"
> 2. Create a Java project "Test"
> 3. Add an external class folder to the build path of "Test" (e.g.
> "d:\temp\lib")
> 4. Shutdown
> 5. Rename "d:\temp\test" to "d:\temp\test2"
> 6. Start Eclipse on this new workspace
> Observe: You get the stack traces reported in comment 2 in the .log

Actually, one step was missing to reproduce:
7. Add another external class folder to the build path of "Test" (e.g. "d:\temp\lib2")
Observe: You get an error dialog saying "Cannot create linked resource"
Comment 14 David Audel CLA 2008-10-29 09:01:45 EDT
Verified for 3.5M3 using I20081028-2000 build.

The bug is fixed because the error dialog does not appear but the behavior is still not perfect (see bug 252571)
Comment 15 Lars Heinemann CLA 2008-11-19 10:24:41 EST
Is there any workaround, like cleaning some files/folders in .metadata?
Comment 16 Jerome Lanneluc CLA 2008-11-20 05:23:06 EST
You might try to delete ".metadata\.plugins\org.eclipse.jdt.core\.org.eclipse.jdt.core.external.folders" before restarting your workspace.

Please report whether this works for you.
Comment 17 Lars Heinemann CLA 2008-11-20 05:27:02 EST
Unfortunately this does not help. I also tried to delete the folder ".metadata\.plugins\org.eclipse.jdt.core" completely with no luck.
Comment 18 Jerome Lanneluc CLA 2008-11-21 11:00:15 EST
(In reply to comment #17)
> Unfortunately this does not help. I also tried to delete the folder
> ".metadata\.plugins\org.eclipse.jdt.core" completely with no luck.
So sorry, but I don't see any other workaround. In 3.4, it is not possible to move workspaces that contain projects with external folders.