This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.
Summary: | All file systems are not in the repository during setting deserialization | ||
---|---|---|---|
Product: | platform | Reporter: | Damian Frach <dfrach> |
Component: | -- Other -- | Assignee: | David Konecny <dkonecny> |
Status: | VERIFIED WONTFIX | ||
Severity: | blocker | CC: | jglick, pnejedly |
Priority: | P4 | ||
Version: | 3.x | ||
Hardware: | PC | ||
OS: | Windows ME/2000 | ||
Issue Type: | DEFECT | Exception Reporter: | |
Attachments: | A patch that slows down startup by 25% |
Description
Damian Frach
2002-02-14 11:25:20 UTC
Davide, Automount? I'll look at it. *** Issue 20515 has been marked as a duplicate of this issue. *** Could you please attach stack trace of the moment when your FileObject is being deserialized? I need it to check from where the deserialization was triggered to make sure the filesystems are there. Thanks. Ohhh, now I see, breakpoints are deserialized during debug module installation. This is probably change from the Pilsen. Sorry for confussion. *********** Exception occurred ************ Fri Feb 15 13:01:41 CET 2002: org.openide.filesystems.FileStateInvalidException: <no message> org.openide.filesystems.FileStateInvalidException at org.openide.filesystems.AbstractFileObject$Invalid.getFileSystem (AbstractFileObject.java:831) at org.netbeans.modules.web.core.jsploader.JspCompileUtil.getContextRoot (JspCompileUtil.java:187) [catch] at org.netbeans.modules.web.core.jsploader.JspDataObject.addWebContextLis tener(JspDataObject.java:762) at org.netbeans.modules.web.core.jsploader.JspDataObject.getPlugin (JspDataObject.java:609) at org.netbeans.modules.web.core.jsploader.JspDataObject.getServletDataOb ject(JspDataObject.java:634) at org.netbeans.modules.web.core.jsploader.JspDataObject.getServletEditor (JspDataObject.java:889) at org.netbeans.modules.web.core.jsploader.ServletEditor$JspEnv.findClone ableOpenSupport(ServletEditor.java:409) at org.openide.text.PositionRef$Manager.readObject (PositionRef.java:208) 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:324) at java.io.ObjectStreamClass.invokeReadObject (ObjectStreamClass.java:809) at java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:1733) at java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1636) at java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1264) at java.io.ObjectInputStream.readObject (ObjectInputStream.java:322) at org.openide.text.PositionRef.readObject (PositionRef.java:98) 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:324) at java.io.ObjectStreamClass.invokeReadObject (ObjectStreamClass.java:809) at java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:1733) at java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1636) at java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1264) at java.io.ObjectInputStream.readObject (ObjectInputStream.java:322) at org.openide.text.DocumentLine.readObject (DocumentLine.java:267) 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:324) at java.io.ObjectStreamClass.invokeReadObject (ObjectStreamClass.java:809) at java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:1733) at java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1636) at java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1264) at java.io.ObjectInputStream.defaultReadFields (ObjectInputStream.java:1830) at java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:1756) at java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1636) at java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1264) at java.io.ObjectInputStream.defaultReadFields (ObjectInputStream.java:1830) at java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:1756) at java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1636) at java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1264) at java.io.ObjectInputStream.defaultReadFields (ObjectInputStream.java:1830) at java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:1756) at java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1636) at java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1264) at java.io.ObjectInputStream.defaultReadFields (ObjectInputStream.java:1830) at java.io.ObjectInputStream.defaultReadObject (ObjectInputStream.java:450) at org.netbeans.modules.debugger.CoreBreakpoint.readObject (CoreBreakpoint.java:124) 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:324) at java.io.ObjectStreamClass.invokeReadObject (ObjectStreamClass.java:809) at java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:1733) at java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1636) at java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1264) at java.io.ObjectInputStream.readObject (ObjectInputStream.java:322) at java.util.HashMap.readObject(HashMap.java:973) 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:324) at java.io.ObjectStreamClass.invokeReadObject (ObjectStreamClass.java:809) at java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:1733) at java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1636) at java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1264) at java.io.ObjectInputStream.defaultReadFields (ObjectInputStream.java:1830) at java.io.ObjectInputStream.defaultReadObject (ObjectInputStream.java:450) at org.netbeans.modules.debugger.BreakpointGroup.readObject (BreakpointGroup.java:92) 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:324) at java.io.ObjectStreamClass.invokeReadObject (ObjectStreamClass.java:809) at java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:1733) at java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1636) at java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1264) at java.io.ObjectInputStream.defaultReadFields (ObjectInputStream.java:1830) at java.io.ObjectInputStream.defaultReadObject (ObjectInputStream.java:450) at org.netbeans.modules.debugger.CoreBreakpoint.readObject (CoreBreakpoint.java:124) 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:324) at java.io.ObjectStreamClass.invokeReadObject (ObjectStreamClass.java:809) at java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:1733) at java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1636) at java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1264) at java.io.ObjectInputStream.readArray (ObjectInputStream.java:1593) at java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1261) at java.io.ObjectInputStream.defaultReadFields (ObjectInputStream.java:1830) at java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:1756) at java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1636) at java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1264) at java.io.ObjectInputStream.defaultReadFields (ObjectInputStream.java:1830) at java.io.ObjectInputStream.defaultReadObject (ObjectInputStream.java:450) at org.netbeans.modules.debugger.support.DebuggerSupport.readObject (DebuggerSupport.java:91) 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:324) at java.io.ObjectStreamClass.invokeReadObject (ObjectStreamClass.java:809) at java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:1733) at java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1636) at java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1264) at java.io.ObjectInputStream.readObject (ObjectInputStream.java:322) at org.openide.options.SystemOption.readExternal (SystemOption.java:241) at org.openide.util.SharedClassObject$WriteReplace.readObject (SharedClassObject.java:732) at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at java.io.ObjectStreamClass.invokeReadObject (ObjectStreamClass.java:809) at java.io.ObjectInputStream.readSerialData (ObjectInputStream.java:1733) at java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1636) at java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1264) at java.io.ObjectInputStream.readObject (ObjectInputStream.java:322) at org.openide.loaders.XMLSettingsSupport$SettingsRecognizer.readSerial (XMLSettingsSupport.java:400) at org.openide.loaders.XMLSettingsSupport$SettingsRecognizer.instanceCrea te(XMLSettingsSupport.java:430) at org.openide.loaders.InstanceDataObject$SettingsInstance.instanceCreate (InstanceDataObject.java:1221) at org.openide.loaders.FolderLookup$ICItem.getInstance (FolderLookup.java:352) at org.openide.util.lookup.AbstractLookup$R.allInstances (AbstractLookup.java:447) at org.openide.util.lookup.ProxyLookup$R.computeResult (ProxyLookup.java:351) at org.openide.util.lookup.ProxyLookup$R.allInstances (ProxyLookup.java:302) at org.openide.util.lookup.ProxyLookup$R.computeResult (ProxyLookup.java:351) at org.openide.util.lookup.ProxyLookup$R.allInstances (ProxyLookup.java:302) at org.openide.util.SharedClassObject.findObject (SharedClassObject.java:495) at org.netbeans.modules.debugger.support.DebuggerSupport.initBreakpoints (DebuggerSupport.java:484) at org.netbeans.modules.debugger.support.DebuggerSupport.getBreakpoints (DebuggerSupport.java:387) at org.netbeans.modules.debugger.support.DebuggerModule.restored (DebuggerModule.java:239) at org.netbeans.modules.debugger.multisession.EnterpriseModule.restored (EnterpriseModule.java:53) at org.netbeans.core.modules.NbInstaller.loadCode (NbInstaller.java:300) at org.netbeans.core.modules.NbInstaller.load (NbInstaller.java:225) at org.netbeans.core.modules.ModuleManager.enable (ModuleManager.java:537) at org.netbeans.core.modules.ModuleList.installNew (ModuleList.java:474) at org.netbeans.core.modules.ModuleList.trigger (ModuleList.java:418) at org.netbeans.core.modules.ModuleSystem.scanForNewAndRestore (ModuleSystem.java:263) at org.netbeans.core.NonGui.run(NonGui.java:523) at org.netbeans.core.Main.run(Main.java:213) at org.openide.TopManager.initializeTopManager (TopManager.java:120) at org.openide.TopManager.getDefault(TopManager.java:81) at org.netbeans.core.Main.main(Main.java:346) at org.netbeans.core.TopThreadGroup.run (TopThreadGroup.java:87) at java.lang.Thread.run(Thread.java:536) *** Issue 19088 has been marked as a duplicate of this issue. *** I said attach not paste! ;-) Anyway - is it still a problem? Do you need to deserialize stuff during new module installation? Jesse, should we ensure that when module.restored() is called all filesystems (that the module could see when the ide was exiting) are in the repository? We do not do it right now. I guess it would be nice for it to be more predictable. Unfortunately the APIs were never very clear on what would or would not be available during ModuleInstall calls. We guarantee Lookup I guess. Note that a module can listen to changes in the Repository, but this is probably not reliable enough, not to mention tricky. If it is possible to ensure that AutomountSupport finishes before module code is loaded, that would probably be better. I.e. by modulesClassPathInitialized time. But what if a module adds a filesystem by specifing an entry in automount directory? If we ensure finishing mounting before modules are installed the automount would refresh several times during startup. Why would it refresh several times? (I don't know much about how AutomountSupport is implemented.) In principle, since all module layers are merged at once, you should be able to get the complete Repository once at modulesClassPathInitialized time, then refresh it after that only if something really changes. Created attachment 4740 [details]
A patch that slows down startup by 25%
I have tried to simply force the automount to finish sooner. It slows down the startup significantly. Maybe I am doing something wrong. Opinions? In fact, it is not right to try to have all FSes back online before ModuleInstalls get called. Module provided FS implementation may not work before module has got its restored() BTW: I do not see (not tested yet) why should it slow down the startup that much. AutoMount take typpically about 700ms to finish and it takes the time at the end of the startup sequence anyway. Interference with FolderLookup? "Module provided FS implementation may not work before module has got its restored()" - this I don't agree with; layer-supplied objects are supposed to be usable as soon as the module's classloader is ready, even before restored() has been called. This is true of lookup objects, it should be the same for mounts I guess. BTW Petr is there any document available that shows how to compare two runs of the IDE (e.g. during startup) and "subtract" them to find out where the additional time is coming from? I couldn't figure out how to do this with OptimizeIt!, maybe HAT makes it easier? I am donwgrading the priority of this bug. I was tempted to close it since Damian and I found a workaround for his specific case. But as Jesse suggests it could be possible. So I am leaving it opened with P4. It would be dangerous to change the startup sequence for 3.4. However if there is a reasonable patch please attach it here and we will consider applying it. Some comments I forgot to attach earlier: > "Module provided FS implementation may not work before module has > got its restored()" - this I don't agree with; layer-supplied > objects are supposed to be usable as soon as the module's > classloader is ready, even before restored() has been called. I had user-mounted FS in mind, not module-mounted... > Petr is there any document available that shows how to compare two > runs of the IDE (e.g. during startup) and "subtract" them to find > out where the additional time is coming from? I couldn't figure out > how to do this with OptimizeIt!, maybe HAT makes it easier? Run with -J-Dorg.netbeans.log.startup=print and compare both outputs But it's like x11perf without x11perfcomp, no automatic comparison. Petr - OK, so user-mounted filesystems. I still think these ought to be prepared to be deserialized as soon as layers are ready. ModuleInstall.restored() is done as a last step. Target milestone was changed from '3.4' to TBD. Target milestone was changed from '3.4' to TBD. Closing as WONTFIX. The original problem was resolved somehow. The patch DavidS wrote (and which makes sense to me) has very negative impact on startup and so I will not commit it. From this point of view it seems to me that it is not possible (easily without sideeffects) to finish automount before the module's code is called. Feel free to reopen (or better file new separate issue) if you disagree. I think this case should be resolved as part of the IDE Bootstrap Sequence cleanup. A few things said in this issue are worth documenting somewhere, eg. what should be expected to work in module before Module.restore was called, etc. Without new informations for long time - verifying. |