Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 339106 - recursive error produces too many files open
Summary: recursive error produces too many files open
Status: RESOLVED FIXED
Alias: None
Product: Equinox
Classification: Eclipse Project
Component: p2 (show other bugs)
Version: 3.7   Edit
Hardware: PC Linux
: P3 critical (vote)
Target Milestone: 3.7 M6   Edit
Assignee: Ian Bull CLA
QA Contact:
URL:
Whiteboard:
Keywords:
: 339124 339266 (view as bug list)
Depends on:
Blocks:
 
Reported: 2011-03-07 11:00 EST by Paul Webster CLA
Modified: 2011-03-31 13:51 EDT (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Paul Webster CLA 2011-03-07 11:00:15 EST
I built against the 3.7 warmup I build.  When I fire up my 4.1 eclipse, I get a recursive stack trace that ends with some p2 failures.

Some bundles from the install:

org.eclipse.equinox.p2.metadata_2.1.0.v20110228.jar
org.eclipse.equinox.p2.metadata.repository_1.2.0.v20110305-0130.jar
org.eclipse.equinox.p2.repository_2.1.0.v20110305-0130.jar
org.eclipse.equinox.p2.reconciler.dropins_1.1.100.v20110207.jar



!SESSION 2011-03-07 10:43:56.682 -----------------------------------------------
eclipse.buildId=I20110307-0900
java.fullversion=JRE 1.6.0 IBM J9 2.4 Linux amd64-64 jvmxa6460sr9-20101124_69295 (JIT enabled, AOT enabled)
J9VM - 20101124_069295
JIT  - r9_20101028_17488ifx2
GC   - 20101027_AA
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US
Command-line arguments:  -os linux -ws gtk -arch x86_64 -data /opt/pwebster/workspaces/e4

!ENTRY org.eclipse.equinox.p2.metadata.repository 4 1003 2011-03-07 10:44:04.816
!MESSAGE Error saving metadata repository: file:/opt/local/e4-self/I20110307-0900/eclipse/configuration/org.eclipse.osgi/bundles/103/data/-1477580214/
!STACK 0
java.io.FileNotFoundException: /opt/local/e4-self/I20110307-0900/eclipse/configuration/org.eclipse.osgi/bundles/103/data/-1477580214/content.jar (Too many open files)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:190)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:142)
        at org.eclipse.equinox.internal.p2.metadata.repository.LocalMetadataRepository.save(LocalMetadataRepository.java:302)
        at org.eclipse.equinox.internal.p2.metadata.repository.LocalMetadataRepository.setProperty(LocalMetadataRepository.java:324)
        at org.eclipse.equinox.p2.repository.spi.AbstractRepository.setProperty(AbstractRepository.java:190)
        at org.eclipse.equinox.internal.p2.metadata.repository.LocalMetadataRepository.save(LocalMetadataRepository.java:306)
        at org.eclipse.equinox.internal.p2.metadata.repository.LocalMetadataRepository.setProperty(LocalMetadataRepository.java:324)
        at org.eclipse.equinox.p2.repository.spi.AbstractRepository.setProperty(AbstractRepository.java:190)
        at org.eclipse.equinox.internal.p2.metadata.repository.LocalMetadataRepository.save(LocalMetadataRepository.java:306)
        at org.eclipse.equinox.internal.p2.metadata.repository.LocalMetadataRepository.setProperty(LocalMetadataRepository.java:324)

[... this goes on for many lines ...]

        at org.eclipse.equinox.p2.repository.spi.AbstractRepository.setProperty(AbstractRepository.java:190)
        at org.eclipse.equinox.internal.p2.metadata.repository.LocalMetadataRepository.save(LocalMetadataRepository.java:306)
        at org.eclipse.equinox.internal.p2.metadata.repository.LocalMetadataRepository.setProperty(LocalMetadataRepository.java:324)
        at org.eclipse.equinox.p2.repository.spi.AbstractRepository.setProperty(AbstractRepository.java:190)
        at org.eclipse.equinox.internal.p2.metadata.repository.LocalMetadataRepository.save(LocalMetadataRepository.java:306)
        at org.eclipse.equinox.internal.p2.metadata.repository.LocalMetadataRepository.removeInstallableUnits(LocalMetadataRepository.java:264)
        at org.eclipse.equinox.internal.provisional.p2.directorywatcher.RepositoryListener.synchronizeMetadataRepository(RepositoryListener.java:212)
        at org.eclipse.equinox.internal.provisional.p2.directorywatcher.RepositoryListener.stopPoll(RepositoryListener.java:185)
        at org.eclipse.equinox.internal.p2.extensionlocation.BundlePoolFilteredListener.stopPoll(BundlePoolFilteredListener.java:69)
        at org.eclipse.equinox.internal.p2.extensionlocation.SiteListener.stopPoll(SiteListener.java:371)
        at org.eclipse.equinox.internal.provisional.p2.directorywatcher.DirectoryWatcher.stopPoll(DirectoryWatcher.java:171)
        at org.eclipse.equinox.internal.provisional.p2.directorywatcher.DirectoryWatcher.poll(DirectoryWatcher.java:109)
        at org.eclipse.equinox.internal.p2.extensionlocation.SiteListener.synchronizeRepositories(SiteListener.java:111)
        at org.eclipse.equinox.internal.p2.extensionlocation.ExtensionLocationMetadataRepository.ensureInitialized(ExtensionLocationMetadataRepository.java:66)
        at org.eclipse.equinox.internal.p2.extensionlocation.ExtensionLocationMetadataRepository.getProperties(ExtensionLocationMetadataRepository.java:194)
        at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.addRepository(AbstractRepositoryManager.java:127)
        at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:657)
        at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96)
        at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92)
        at org.eclipse.equinox.internal.p2.reconciler.dropins.Activator.loadMetadataRepository(Activator.java:99)
        at org.eclipse.equinox.internal.p2.reconciler.dropins.PlatformXmlListener.synchronizeConfiguration(PlatformXmlListener.java:227)
        at org.eclipse.equinox.internal.p2.reconciler.dropins.PlatformXmlListener.stopPoll(PlatformXmlListener.java:133)
        at org.eclipse.equinox.internal.provisional.p2.directorywatcher.DirectoryWatcher.stopPoll(DirectoryWatcher.java:171)
        at org.eclipse.equinox.internal.provisional.p2.directorywatcher.DirectoryWatcher.poll(DirectoryWatcher.java:109)
        at org.eclipse.equinox.internal.p2.reconciler.dropins.Activator.watchConfiguration(Activator.java:511)
        at org.eclipse.equinox.internal.p2.reconciler.dropins.Activator.start(Activator.java:174)
        at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
        at java.security.AccessController.doPrivileged(AccessController.java:251)
        at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
        at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
        at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
        at org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:389)
        at org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1130)
        at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:559)
        at org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:544)
        at org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:457)
        at org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
        at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:438)
        at org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:1)
        at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
Comment 1 Ian Bull CLA 2011-03-07 12:07:33 EST
I'll take a look at this, but I'm not sure this is related to my recent changes. My changes were related to the artifact repository, and this appears to fail in the metadata repository.  Let me see what's going on here.
Comment 2 Ian Bull CLA 2011-03-07 12:14:15 EST
oh, never mind... I know exactly what's happening.  However, I'm very surprised that none of our tests fail, since any call to setProperty should blow the stack.

I'll put a fix in for the 1:00pm build.
Comment 3 DJ Houghton CLA 2011-03-07 12:58:08 EST
*** Bug 339124 has been marked as a duplicate of this bug. ***
Comment 4 Ian Bull CLA 2011-03-07 12:59:28 EST
Fixed and tagged for the next build.

We are overriding a method from AbstractRepository, and in a subclass we explicitly call super. (to get the parent's implementation). With my recent changes, I overloaded that method adding an additional parameter, and then I delegated from the original method to the overloaded one.

So in short, in our save() method we call super.setProperties, this delegates right back to the method we were trying to avoid (which calls save(), and the recursion continues).

Sorry about that.
Comment 5 Markus Keller CLA 2011-03-08 09:28:28 EST
Looks good in I20110307-2110.

> However, I'm very surprised that none of our tests fail
Did you leave the bug open to remember to add a regression test?
Comment 6 Ian Bull CLA 2011-03-08 16:07:24 EST
*** Bug 339266 has been marked as a duplicate of this bug. ***
Comment 7 Ian Bull CLA 2011-03-31 13:51:12 EDT
We have some regression tests in this area now.  They appear to run fine on my machine, altough I think there is some VM specific issues here.

Anyways, the bug is fixed and the tests are checked in.

I'm marking it M6 since that's when it was actually fixed.