Re: Unloading a CMPI provider
Kirk Augustin <[email protected]> Thu, 9 May 2013 08:50:18 -0700 (PDT)
| Newsgroups | gmane.network.open-pegasus.general |
|---|---|
| Message-ID | <[email protected]> |
However, except for very rare conditions, in general it is a bad idea to prevent provider unloading. It is not just that if every provider does it, the system will run out of resources and crash. It is because any provider that does not unload is not being backed up, can not be shadowed or restored, and prevents the whole system from being properly maintained. Other than for debugging purposes, there is never really a good reason to prevent unloading. If you are relying on a cron type of timing activity, its timing probably should not done by a provider, but something else that wakes the provider. Providers are supposed to respond, not control or initiate. And you should never rely on volatile memory to hold on going systems information. You should write it out to a database and unload. Kirk Augustin 11821 NW McNamee Rd Portland, OR 97231 HM: 503-289-4356 >________________________________ >From: Ashok K Pathak <[email protected]> >To: Vijayalakshmi Subramanyam <[email protected]> >Cc: Devchandra L Meetei <[email protected]>; "[email protected]" <[email protected]> >Sent: Wednesday, May 8, 2013 10:52 PM >Subject: Re: Unloading a CMPI provider > > > >Some times back I have discussion w/ Marek for the same issue >Thanks to Marek for the nice explanation to prevent unloading of CMPI >provider . > >For CMPI provider the way to prevent unload of your CMPI provider is to >implement the cleanup() function for each MI (in the provider). > >To give you an example how to do this, lets assume a provider named >"Example" with an InstanceMI (provides enumerateInstances etc.). >Assuming you use the CMPI convenience macro >CMInstanceMIStub( > Example, > Example, > _broker, > CMNoHook) > >You would have to implement the function: ExampleCleanup(). > >CMPIStatus ExampleCleanup( > CMPIInstanceMI * mi, > const CMPIContext * ctx, > CMPIBoolean terminating) >{ > if (!terminating) > { > CMReturn(CMPI_RC_NEVER_UNLOAD); > } > else > { > /* CIM Server is terminating, we HAVE to do cleanup now */ > } >} > > > > >C++ providers may use the CIMOMHandle::disallowProviderUnload() method to >remain loaded even when idle by using the disallowProviderUnload() call in >the initialize method of your Provider > > >void disallowProviderUnload() >Provides a hint to the CIM Server that the provider calling this method >prefers not to be unloaded. This hint applies in situations where a >provider unload is not necessary, such as when the CIM Server unloads idle >providers for efficiency reasons. A provider may rescind this hint by using >the allowProviderUnload method. Note that disallowProviderUnload is >cumulative, such that each call to disallowProviderUnload must be matched >with a call to allowProviderUnload. > >For example you can refer link >http://cvs.opengroup.org/cgi-bin/viewcvs.cgi/pegasus/src/Pegasus/Provider/CIMOMHandle.h >http://cvs.opengroup.org/cgi-bin/viewcvs.cgi/pegasus/src/Providers/slp/SLPProvider.cpp > >Regards >Ashok > > > > Vijayalakshmi > Subramanyam > <viji.sub87@gmail To > .com> Devchandra L Meetei > <[email protected]>, > 05/09/2013 09:19 cc > AM "[email protected]" > <[email protected]> > Subject > Re: Unloading a CMPI provider > > > > > > > > > > >Hi Dev, > >I checked both the cases and there seems to be no valid reason why the >provider is not getting unload . >Is it possible that during registration of this provider , i may have set >some property to avoid unloading ? > >Thanks, >Viji > >On Wed, May 8, 2013 at 10:00 AM, Devchandra L Meetei <[email protected]> >wrote: > By Default, idle providers unload when it is idle for 5 minutes, By idle, > we mean, It is not processing any request. > > Another case where module will not unload is when group of provider > module is *cimserver*. > > So you might like to verify above two cases also. > > > On Wed, May 8, 2013 at 9:45 AM, Vijayalakshmi Subramanyam < > [email protected]> wrote: > Hi All, > > I have three CMPI providers in my system. Two of them unload > automatially when idle. > > One provider fails to unload. I do not see the terminate() call come > into the provider itself. I am sure there are no open subscriptions. > > I also checked that the provider is not returning CMPI_RC_DO_NOT_UNLOAD > or CMPI_RC_NEVER_UNLOAD in any condition. > > This is the log message that i see in the cimtrace file for this > provider - > > [2876:18446744073709551614:CMPILocalProviderManager.cpp:256]: > CMPILocalProviderManager::_provider_ctrl: > UNLOAD_IDLE_PROVIDERS > 1367898721s-801162us: ProviderManager > [2876:18446744073709551614:CMPILocalProviderManager.cpp:309]: Checking > timeout data for CMPIProvider: arcRAIDProvider15 > 1367898721s-801162us: ProviderManager > [2876:18446744073709551614:CMPILocalProviderManager.cpp:318]: > provider->unload_ok() returns: false > 1367898721s-801162us: Thread > [2876:18446744073709551614:ThreadPool.cpp:224]: Work finished. > > Is there something I am missing ? > > Regards, > Viji > > > > -- > Warm Regards > --Dev > OpenPegasus Developer/Committer > > (\__/) > (='.'=) This is Bunny. Copy and paste bunny > (")_(") to help him gain world domination. > > > > > >