Re: Unloading a CMPI provider

Vijayalakshmi Subramanyam <[email protected]> Fri, 10 May 2013 11:29:49 +0530
Newsgroups gmane.network.open-pegasus.general
Message-ID <CAKsVTZQB7CGR4iMSkiE=CUU9aLttYMgeKpxVqtLbht87AJ2bfQ@mail.gmail.com>
Thanks for the information Kirk. I am having the exact opposite problem. I
want the provider to unload but it is not unloading.




On Thu, May 9, 2013 at 9:20 PM, Kirk Augustin <[email protected]>wrote:

>  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.
>
>
>
>
>
>