version 1.69, 2006/08/23 20:01:46
|
version 1.70, 2006/08/25 18:00:06
|
|
|
#include <Pegasus/Query/QueryExpression/QueryExpression.h> | #include <Pegasus/Query/QueryExpression/QueryExpression.h> |
#include <Pegasus/ProviderManager2/QueryExpressionFactory.h> | #include <Pegasus/ProviderManager2/QueryExpressionFactory.h> |
| |
#include <Pegasus/ProviderManager2/Default/Provider.h> |
#include <Pegasus/ProviderManager2/Default/ProviderFacade.h> |
#include <Pegasus/ProviderManager2/OperationResponseHandler.h> | #include <Pegasus/ProviderManager2/OperationResponseHandler.h> |
#include <Pegasus/ProviderManager2/AutoPThreadSecurity.h> | #include <Pegasus/ProviderManager2/AutoPThreadSecurity.h> |
| |
|
|
// auto variable to protect provider during operations | // auto variable to protect provider during operations |
class pm_service_op_lock | class pm_service_op_lock |
{ | { |
private: |
|
pm_service_op_lock(void); |
|
|
|
public: | public: |
pm_service_op_lock(Provider *provider) : _provider(provider) |
pm_service_op_lock(ProviderStatus *providerStatus) |
|
: _providerStatus(providerStatus) |
{ | { |
_provider->protect(); |
_providerStatus->protect(); |
} | } |
| |
~pm_service_op_lock(void) |
~pm_service_op_lock() |
{ | { |
_provider->unprotect(); |
_providerStatus->unprotect(); |
} | } |
| |
Provider * _provider; |
private: |
|
pm_service_op_lock(); |
|
pm_service_op_lock(const pm_service_op_lock&); |
|
pm_service_op_lock& operator=(const pm_service_op_lock&); |
|
|
|
ProviderStatus* _providerStatus; |
}; | }; |
| |
// | // |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&ph.GetProvider()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&ph.GetProvider()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&ph.GetProvider()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&ph.GetProvider()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&ph.GetProvider()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&ph.GetProvider()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&ph.GetProvider()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
|
|
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
pm_service_op_lock op_lock(&ph.GetProvider()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
| |
ph.GetProvider().associators( | ph.GetProvider().associators( |
context, | context, |
|
|
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
pm_service_op_lock op_lock(&ph.GetProvider()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
| |
ph.GetProvider().associatorNames( | ph.GetProvider().associatorNames( |
context, | context, |
|
|
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
pm_service_op_lock op_lock(&ph.GetProvider()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
| |
ph.GetProvider().references( | ph.GetProvider().references( |
context, | context, |
|
|
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
pm_service_op_lock op_lock(&ph.GetProvider()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
| |
ph.GetProvider().referenceNames( | ph.GetProvider().referenceNames( |
context, | context, |
|
|
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
// forward request | // forward request |
pm_service_op_lock op_lock(&ph.GetProvider()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
| |
ph.GetProvider().getProperty( | ph.GetProvider().getProperty( |
context, | context, |
|
|
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
// forward request | // forward request |
pm_service_op_lock op_lock(&ph.GetProvider()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
| |
ph.GetProvider().setProperty( | ph.GetProvider().setProperty( |
context, | context, |
|
|
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
pm_service_op_lock op_lock(&ph.GetProvider()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
| |
ph.GetProvider().invokeMethod( | ph.GetProvider().invokeMethod( |
context, | context, |
|
|
// | // |
// Save the provider instance from the request | // Save the provider instance from the request |
// | // |
ph.GetProvider ().setProviderInstance (req_provider); |
ph.GetProvider().status.setProviderInstance(req_provider); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&ph.GetProvider()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
| |
ph.GetProvider().createSubscription( | ph.GetProvider().createSubscription( |
context, | context, |
|
|
// | // |
// Increment count of current subscriptions for this provider | // Increment count of current subscriptions for this provider |
// | // |
if (ph.GetProvider ().testIfZeroAndIncrementSubscriptions ()) |
if (ph.GetProvider().status.testIfZeroAndIncrementSubscriptions()) |
{ | { |
// | // |
// If there were no current subscriptions before the increment, | // If there were no current subscriptions before the increment, |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&ph.GetProvider()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
| |
ph.GetProvider().modifySubscription( | ph.GetProvider().modifySubscription( |
context, | context, |
|
|
| |
AutoPThreadSecurity threadLevelSecurity(context); | AutoPThreadSecurity threadLevelSecurity(context); |
| |
pm_service_op_lock op_lock(&ph.GetProvider()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
| |
ph.GetProvider().deleteSubscription( | ph.GetProvider().deleteSubscription( |
context, | context, |
|
|
// | // |
// Decrement count of current subscriptions for this provider | // Decrement count of current subscriptions for this provider |
// | // |
if (ph.GetProvider ().decrementSubscriptionsAndTestIfZero ()) |
if (ph.GetProvider().status.decrementSubscriptionsAndTestIfZero()) |
{ | { |
// | // |
// If there are no current subscriptions after the decrement, | // If there are no current subscriptions after the decrement, |
|
|
| |
ph.GetProvider ().disableIndications (); | ph.GetProvider ().disableIndications (); |
| |
ph.GetProvider ().unprotect (); |
ph.GetProvider().status.unprotect(); |
| |
// | // |
// | // |
|
|
| |
StatProviderTimeMeasurement providerTime(response); | StatProviderTimeMeasurement providerTime(response); |
| |
pm_service_op_lock op_lock(&ph.GetProvider()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
| |
ph.GetProvider().consumeIndication(context, | ph.GetProvider().consumeIndication(context, |
request->destinationPath, | request->destinationPath, |
|
|
OpProviderHolder ph = providerManager.getProvider( | OpProviderHolder ph = providerManager.getProvider( |
physicalName, pName); | physicalName, pName); |
| |
ph.GetProvider ().resetSubscriptions (); |
ph.GetProvider().status.resetSubscriptions(); |
} | } |
| |
// | // |
|
|
// For each provider that has at least one subscription, call | // For each provider that has at least one subscription, call |
// provider's enableIndications method | // provider's enableIndications method |
// | // |
Array <Provider *> enableProviders; |
Array <ProviderFacade*> enableProviders; |
enableProviders = providerManager.getIndicationProvidersToEnable (); | enableProviders = providerManager.getIndicationProvidersToEnable (); |
| |
Uint32 numProviders = enableProviders.size (); | Uint32 numProviders = enableProviders.size (); |
|
|
try | try |
{ | { |
CIMInstance provider; | CIMInstance provider; |
provider = enableProviders [i]->getProviderInstance (); |
provider = enableProviders[i]->status.getProviderInstance(); |
| |
// | // |
// Get cached or load new provider module | // Get cached or load new provider module |
// | // |
OpProviderHolder ph = providerManager.getProvider( | OpProviderHolder ph = providerManager.getProvider( |
enableProviders[i]->getModule()->getFileName(), |
enableProviders[i]->status.getModule()->getFileName(), |
enableProviders[i]->getName()); | enableProviders[i]->getName()); |
| |
_callEnableIndications (provider, _indicationCallback, ph); | _callEnableIndications (provider, _indicationCallback, ph); |
|
|
} | } |
| |
void DefaultProviderManager::_insertEntry ( | void DefaultProviderManager::_insertEntry ( |
const Provider & provider, |
const ProviderFacade& provider, |
EnableIndicationsResponseHandler* handler) | EnableIndicationsResponseHandler* handler) |
{ | { |
PEG_METHOD_ENTER (TRC_PROVIDERMANAGER, | PEG_METHOD_ENTER (TRC_PROVIDERMANAGER, |
|
|
} | } |
| |
String DefaultProviderManager::_generateKey ( | String DefaultProviderManager::_generateKey ( |
const Provider & provider) |
const ProviderFacade & provider) |
{ | { |
String tableKey; | String tableKey; |
| |
|
|
// Append provider key values to key | // Append provider key values to key |
// | // |
String providerName = provider.getName(); | String providerName = provider.getName(); |
String providerFileName = provider.getModule()->getFileName(); |
String providerFileName = provider.status.getModule()->getFileName(); |
tableKey.append (providerName); | tableKey.append (providerName); |
tableKey.append (providerFileName); | tableKey.append (providerFileName); |
| |
|
|
"Calling provider.enableIndications: " + | "Calling provider.enableIndications: " + |
ph.GetProvider ().getName ()); | ph.GetProvider ().getName ()); |
| |
pm_service_op_lock op_lock (& ph.GetProvider ()); |
pm_service_op_lock op_lock(&ph.GetProvider().status); |
ph.GetProvider ().protect (); |
ph.GetProvider().status.protect(); |
ph.GetProvider ().enableIndications (* enableHandler); | ph.GetProvider ().enableIndications (* enableHandler); |
| |
// | // |