Bug 61683 - update.core and scheduler activated every time
Summary: update.core and scheduler activated every time
Status: RESOLVED WONTFIX
Alias: None
Product: Platform
Classification: Eclipse Project
Component: Update (deprecated - use Eclipse>Equinox>p2) (show other bugs)
Version: 3.0   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Dorian Birsan CLA
QA Contact:
URL:
Whiteboard:
Keywords: performance
Depends on: 61780
Blocks:
  Show dependency tree
 
Reported: 2004-05-10 22:40 EDT by Jeff McAffer CLA
Modified: 2009-08-18 16:44 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jeff McAffer CLA 2004-05-10 22:40:34 EDT
I started a new i0505, closed the intro page and the intro view and exited.  
started again and looked at the list of plugins acivated. update.core and 
update.scheduler were activated but it is unclear why.  Below are the stack 
traces for their activation.  I see that the scheduler is listed as an 
automatic startup plugin but since I do not have scheduling turned on, 
activation is not required.  Some other mechnaism (perhaps expressions) should 
be found.

Activating plugin: org.eclipse.update.core
Plugin activation stack:
	org.eclipse.update.core
Class loading stack:
	org.eclipse.update.search.IUpdateSearchResultCollector
	org.eclipse.update.internal.scheduler.AutomaticUpdatesJob
Stack trace:
java.lang.Throwable
	at org.eclipse.osgi.framework.stats.StatsManager.traceActivate
(StatsManager.java:149)
	at org.eclipse.osgi.framework.stats.StatsManager.startActivation
(StatsManager.java:125)
	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker
(BundleHost.java:394)
	at org.eclipse.osgi.framework.internal.core.AbstractBundle.start
(AbstractBundle.java:298)
	at org.eclipse.core.runtime.adaptor.EclipseClassLoader.findLocalClass
(EclipseClassLoader.java:110)
	at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass
(BundleLoader.java:368)
	at org.eclipse.osgi.framework.internal.core.BundleLoader.requireClass
(BundleLoader.java:333)
	at 
org.eclipse.osgi.framework.internal.core.BundleLoader.findRequiredClass
(BundleLoader.java:911)
	at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass
(BundleLoader.java:396)
	at org.eclipse.osgi.framework.adaptor.core.AbstractClassLoader.loadClass
(AbstractClassLoader.java:93)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
	at java.lang.ClassLoader.defineClass0(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:537)
	at 
org.eclipse.osgi.framework.internal.defaultadaptor.DefaultClassLoader.defineClas
s(DefaultClassLoader.java:292)
	at org.eclipse.core.runtime.adaptor.EclipseClassLoader.defineClass
(EclipseClassLoader.java:203)
	at 
org.eclipse.osgi.framework.internal.defaultadaptor.DefaultClassLoader.findClassI
mpl(DefaultClassLoader.java:281)
	at 
org.eclipse.osgi.framework.internal.defaultadaptor.DefaultClassLoader.findClass
(DefaultClassLoader.java:172)
	at 
org.eclipse.osgi.framework.adaptor.core.AbstractClassLoader.findLocalClass
(AbstractClassLoader.java:220)
	at org.eclipse.core.runtime.adaptor.EclipseClassLoader.findLocalClass
(EclipseClassLoader.java:60)
	at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass
(BundleLoader.java:368)
	at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass
(BundleLoader.java:399)
	at org.eclipse.osgi.framework.adaptor.core.AbstractClassLoader.loadClass
(AbstractClassLoader.java:93)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
	at java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.lang.Class.privateGetDeclaredConstructors(Class.java:1610)
	at java.lang.Class.getConstructor0(Class.java:1922)
	at java.lang.Class.newInstance0(Class.java:278)
	at java.lang.Class.newInstance(Class.java:261)
	at 
org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtensio
n(ConfigurationElement.java:141)
	at 
org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtensio
n(ConfigurationElement.java:124)
	at 
org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtensio
n(ConfigurationElement.java:113)
	at org.eclipse.ui.internal.WorkbenchPlugin$1.run
(WorkbenchPlugin.java:196)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:51)
	at org.eclipse.ui.internal.WorkbenchPlugin.createExtension
(WorkbenchPlugin.java:193)
	at org.eclipse.ui.internal.EarlyStartupRunnable.getExecutableExtension
(EarlyStartupRunnable.java:109)
	at org.eclipse.ui.internal.EarlyStartupRunnable.run
(EarlyStartupRunnable.java:61)
	at org.eclipse.core.internal.runtime.InternalPlatform.run
(InternalPlatform.java:607)
	at org.eclipse.core.runtime.Platform.run(Platform.java:668)
	at org.eclipse.ui.internal.Workbench$15.run(Workbench.java:1259)
	at java.lang.Thread.run(Thread.java:534)



Activating plugin: org.eclipse.update.scheduler
Plugin activation stack:
	org.eclipse.update.scheduler
	org.eclipse.jface.text
Class loading stack:
	org.eclipse.update.internal.scheduler.SchedulerStartup
	org.eclipse.jface.text.ITextSelection
Stack trace:
java.lang.Throwable
	at org.eclipse.osgi.framework.stats.StatsManager.traceActivate
(StatsManager.java:149)
	at org.eclipse.osgi.framework.stats.StatsManager.startActivation
(StatsManager.java:125)
	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker
(BundleHost.java:394)
	at org.eclipse.osgi.framework.internal.core.AbstractBundle.start
(AbstractBundle.java:298)
	at org.eclipse.core.runtime.adaptor.EclipseClassLoader.findLocalClass
(EclipseClassLoader.java:110)
	at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass
(BundleLoader.java:368)
	at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass
(BundleLoader.java:399)
	at org.eclipse.osgi.framework.adaptor.core.AbstractClassLoader.loadClass
(AbstractClassLoader.java:93)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
	at org.eclipse.osgi.framework.internal.core.BundleLoader.loadClass
(BundleLoader.java:304)
	at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass
(BundleHost.java:336)
	at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass
(AbstractBundle.java:1315)
	at 
org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtensio
n(ConfigurationElement.java:131)
	at 
org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtensio
n(ConfigurationElement.java:124)
	at 
org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtensio
n(ConfigurationElement.java:113)
	at org.eclipse.ui.internal.WorkbenchPlugin$1.run
(WorkbenchPlugin.java:196)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:51)
	at org.eclipse.ui.internal.WorkbenchPlugin.createExtension
(WorkbenchPlugin.java:193)
	at org.eclipse.ui.internal.EarlyStartupRunnable.getExecutableExtension
(EarlyStartupRunnable.java:109)
	at org.eclipse.ui.internal.EarlyStartupRunnable.run
(EarlyStartupRunnable.java:61)
	at org.eclipse.core.internal.runtime.InternalPlatform.run
(InternalPlatform.java:607)
	at org.eclipse.core.runtime.Platform.run(Platform.java:668)
	at org.eclipse.ui.internal.Workbench$15.run(Workbench.java:1259)
	at java.lang.Thread.run(Thread.java:534)
Activating plugin: org.eclipse.jface.text
Plugin activation stack:
	org.eclipse.jface.text
Class loading stack:
	org.eclipse.jface.text.ITextSelection
Stack trace:
java.lang.Throwable
	at org.eclipse.osgi.framework.stats.StatsManager.traceActivate
(StatsManager.java:149)
	at org.eclipse.osgi.framework.stats.StatsManager.startActivation
(StatsManager.java:125)
	at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker
(BundleHost.java:394)
	at org.eclipse.osgi.framework.internal.core.AbstractBundle.start
(AbstractBundle.java:298)
	at org.eclipse.core.runtime.adaptor.EclipseClassLoader.findLocalClass
(EclipseClassLoader.java:110)
	at org.eclipse.osgi.framework.internal.core.BundleLoader.findLocalClass
(BundleLoader.java:368)
	at org.eclipse.osgi.framework.internal.core.BundleLoader.requireClass
(BundleLoader.java:333)
	at 
org.eclipse.osgi.framework.internal.core.BundleLoader.findRequiredClass
(BundleLoader.java:906)
	at org.eclipse.osgi.framework.internal.core.BundleLoader.findClass
(BundleLoader.java:396)
	at org.eclipse.osgi.framework.adaptor.core.AbstractClassLoader.loadClass
(AbstractClassLoader.java:93)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
	at 
org.eclipse.debug.internal.ui.stringsubstitution.SelectedResourceManager.selecti
onChanged(SelectedResourceManager.java:129)
	at 
org.eclipse.debug.internal.ui.stringsubstitution.SelectedResourceManager.windowA
ctivated(SelectedResourceManager.java:76)
	at 
org.eclipse.debug.internal.ui.stringsubstitution.SelectedResourceManager.<init>
(SelectedResourceManager.java:47)
	at 
org.eclipse.debug.internal.ui.stringsubstitution.SelectedResourceManager.getDefa
ult(SelectedResourceManager.java:59)
	at org.eclipse.debug.internal.ui.DebugUIPlugin$2.run
(DebugUIPlugin.java:345)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages
(Synchronizer.java:106)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:2571)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2276)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1353)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1324)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench
(Workbench.java:243)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:140)
	at org.eclipse.ui.internal.ide.IDEApplication.run
(IDEApplication.java:90)
	at org.eclipse.core.internal.runtime.PlatformActivator$1.run
(PlatformActivator.java:298)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run
(EclipseStarter.java:249)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run
(EclipseStarter.java:126)
	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 org.eclipse.core.launcher.Main.basicRun(Main.java:269)
	at org.eclipse.core.launcher.Main.run(Main.java:722)
	at org.eclipse.core.launcher.Main.main(Main.java:706)
Comment 1 Dorian Birsan CLA 2004-05-10 22:48:30 EDT
The update.core is pre-req of the scheduler, so I assume it gets started as a 
result of the scheduler starting.

I don't control starting of the update.scheduler, all I do is provide the 
startup extension point. Is there anything else needed?
Comment 2 Jeff McAffer CLA 2004-05-10 23:03:11 EDT
You need to ensure that your function behaves well.  If the startup extension 
is not suiting your needs, a different way must be found.

As for the prereq'ing, prereqs are not started just because they are prereq'd.  
They are started because classes are loaded.  Loading fewer (i.e., no) classes 
can improve things.  Doing less on activation also helps.
Comment 3 Dorian Birsan CLA 2004-05-10 23:54:44 EDT
I made a simple change, to avoid having the Update core started unless 
automatic updates are enabled.
The startup code for automatic update checks the plugin preferences (where we 
save whether automatic updates is enabled) and returns if disabled. Otherwise 
it schedule a job (at which point update.core is started).

Does this good enough? Are there better mechanisms to deal with this scenario?
Comment 4 Jeff McAffer CLA 2004-05-11 00:34:03 EDT
not sure what all the startup extension allows.  Ideally it would allow 
something along the lines of the expressions stuff to be used in determining if 
a plugin should actually be activated.  This way people could say "yes, I would 
like to be considered for activation and here is a predicate to decide if you 
should try"

Failing some existing mechanism, update should do the absolute bare minimum if 
scheduling is not on and UI should take an item for post 3.0 to offer more 
flexibility here.

CC Nick for comments on the startup mechanism
Comment 5 Dejan Glozic CLA 2004-05-11 10:46:02 EDT
Dorian, scheduler should first check the value of the master on/off switch. If 
off, it should exit right away - no tasks should be scheduled and no classes 
that will cause Update Core to load should be instantiated.
Comment 6 Dorian Birsan CLA 2004-05-11 11:55:17 EDT
It does (see comment #3)
Comment 7 Nick Edgar CLA 2004-05-11 15:11:28 EDT
The startup extension point does not currently support conditional startup.
I've filed bug 61780 for the conditional startup enhancement.
Comment 8 Dorian Birsan CLA 2004-05-12 12:21:49 EDT
Consider for post 3.0
Comment 9 DJ Houghton CLA 2009-08-18 16:41:09 EDT
[LATER->WONTFIX] The "LATER" bugzilla resolution is being removed so reopening
to mark as WONTFIX.
Comment 10 DJ Houghton CLA 2009-08-18 16:44:36 EDT
[LATER->WONTFIX] The "LATER" bugzilla resolution is being removed so reopening
to mark as WONTFIX.