(file) Return to DefaultProviderManager.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / ProviderManager2 / Default

Diff for /pegasus/src/Pegasus/ProviderManager2/Default/DefaultProviderManager.cpp between version 1.76 and 1.81.2.1

version 1.76, 2006/10/10 18:27:09 version 1.81.2.1, 2007/09/26 22:12:56
Line 40 
Line 40 
 #include <Pegasus/Common/StatisticalData.h> #include <Pegasus/Common/StatisticalData.h>
 #include <Pegasus/Common/Logger.h> #include <Pegasus/Common/Logger.h>
 #include <Pegasus/Common/MessageLoader.h> #include <Pegasus/Common/MessageLoader.h>
   #include <Pegasus/Common/FileSystem.h>
 #include <Pegasus/Common/PegasusVersion.h> #include <Pegasus/Common/PegasusVersion.h>
 #include <Pegasus/Common/Constants.h> #include <Pegasus/Common/Constants.h>
  
Line 114 
Line 115 
         case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:         case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:
         case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:         case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:
         {         {
               ProviderIdContainer providerId =
                   request->operationContext.get(ProviderIdContainer::NAME);
   
             // resolve provider name             // resolve provider name
             ProviderName name = _resolveProviderName(              ProviderName name = _resolveProviderName(providerId);
                 request->operationContext.get(ProviderIdContainer::NAME));  
  
             // get cached or load new provider module             // get cached or load new provider module
             ProviderOperationCounter poc(             ProviderOperationCounter poc(
                 _getProvider(name.getPhysicalName(), name.getLogicalName()));                  _getProvider(
                       name.getPhysicalName(),
                       name.getModuleName(),
                       name.getLogicalName()));
  
             response = poc.GetProvider().processMessage(request);             response = poc.GetProvider().processMessage(request);
             break;             break;
Line 148 
Line 154 
 #if 0 #if 0
         case CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE:         case CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE:
         {         {
               ProviderIdContainer providerId =
                   request->operationContext.get(ProviderIdContainer::NAME);
   
             // resolve provider name             // resolve provider name
             ProviderName name = _resolveProviderName(              ProviderName name = _resolveProviderName(providerId);
                 request->operationContext.get(ProviderIdContainer::NAME));  
  
             // get cached or load new provider module             // get cached or load new provider module
             ProviderOperationCounter poc(             ProviderOperationCounter poc(
                 _getProvider(name.getPhysicalName(), name.getLogicalName()));                  _getProvider(
                       name.getPhysicalName(),
                       name.getModuleName(),
                       name.getLogicalName()));
  
             break;             break;
         }         }
Line 183 
Line 194 
     }     }
     catch (...)     catch (...)
     {     {
         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,          PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
             "Exception: Unknown");             "Exception: Unknown");
         response = request->buildResponse();         response = request->buildResponse();
         response->cimException = PEGASUS_CIM_EXCEPTION(         response->cimException = PEGASUS_CIM_EXCEPTION(
Line 221 
Line 232 
         //         //
         Array<CIMInstance> providerInstances = request->providers;         Array<CIMInstance> providerInstances = request->providers;
  
         String physicalName = _resolvePhysicalName(  
             mInstance.getProperty(  
                 mInstance.findProperty("Location")).getValue().toString());  
   
         for (Uint32 i = 0, n = providerInstances.size(); i < n; i++)         for (Uint32 i = 0, n = providerInstances.size(); i < n; i++)
         {         {
             String pName;             String pName;
Line 232 
Line 239 
                 providerInstances[i].findProperty("Name")).                 providerInstances[i].findProperty("Name")).
                     getValue().get(pName);                     getValue().get(pName);
  
             Sint16 ret_value = _disableProvider(pName);              Sint16 ret_value = _disableProvider(moduleName, pName);
  
             if (ret_value == 0)             if (ret_value == 0)
             {             {
Line 267 
Line 274 
     }     }
     catch (...)     catch (...)
     {     {
         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,          PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
             "Exception: Unknown");             "Exception: Unknown");
         cimException = PEGASUS_CIM_EXCEPTION_L(         cimException = PEGASUS_CIM_EXCEPTION_L(
             CIM_ERR_FAILED,             CIM_ERR_FAILED,
Line 377 
Line 384 
 { {
     String providerName;     String providerName;
     String fileName;     String fileName;
     String interfaceName;      String moduleName;
     CIMValue genericValue;     CIMValue genericValue;
  
       genericValue = providerId.getModule().getProperty(
           providerId.getModule().findProperty("Name")).getValue();
       genericValue.get(moduleName);
   
     genericValue = providerId.getProvider().getProperty(     genericValue = providerId.getProvider().getProperty(
         providerId.getProvider().findProperty("Name")).getValue();         providerId.getProvider().findProperty("Name")).getValue();
     genericValue.get(providerName);     genericValue.get(providerName);
Line 387 
Line 398 
     genericValue = providerId.getModule().getProperty(     genericValue = providerId.getModule().getProperty(
         providerId.getModule().findProperty("Location")).getValue();         providerId.getModule().findProperty("Location")).getValue();
     genericValue.get(fileName);     genericValue.get(fileName);
     fileName = _resolvePhysicalName(fileName);  
  
     // ATTN: This attribute is probably not required      String resolvedFileName = _resolvePhysicalName(fileName);
   
       if (resolvedFileName == String::EMPTY)
       {
           // Provider library not found
           String moduleName;
     genericValue = providerId.getModule().getProperty(     genericValue = providerId.getModule().getProperty(
         providerId.getModule().findProperty("InterfaceType")).getValue();              providerId.getModule().findProperty("Name")).getValue();
     genericValue.get(interfaceName);          genericValue.get(moduleName);
   
           throw Exception(MessageLoaderParms(
               "ProviderManager.ProviderManagerService.PROVIDER_FILE_NOT_FOUND",
               "File \"$0\" was not found for provider module \"$1\".",
               FileSystem::buildLibraryFileName(fileName), moduleName));
       }
  
     return ProviderName(providerName, fileName, interfaceName, 0);      return ProviderName(moduleName, providerName, resolvedFileName);
 } }
  
 ProviderOperationCounter DefaultProviderManager::_getProvider( ProviderOperationCounter DefaultProviderManager::_getProvider(
     const String& moduleFileName,     const String& moduleFileName,
       const String& moduleName,
     const String& providerName)     const String& providerName)
 { {
     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
         "DefaultProviderManager::_getProvider");         "DefaultProviderManager::_getProvider");
  
     ProviderMessageHandler* pr = _lookupProvider(providerName);      ProviderMessageHandler* pr = _lookupProvider(moduleName, providerName);
  
     if (!pr->status.isInitialized())     if (!pr->status.isInitialized())
     {     {
Line 430 
Line 452 
 } }
  
 ProviderMessageHandler* DefaultProviderManager::_lookupProvider( ProviderMessageHandler* DefaultProviderManager::_lookupProvider(
       const String& moduleName,
     const String& providerName)     const String& providerName)
 { {
     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
Line 438 
Line 461 
     // lock the providerTable mutex     // lock the providerTable mutex
     AutoMutex lock(_providerTableMutex);     AutoMutex lock(_providerTableMutex);
  
       // Construct the lookup key. We need a compound key to differentiate
       // providers with the same name from different modules. The size field is
       // added to handle the unlikely case when moduleName+providerName
       // produce identical strings but define different providers.
       char buffer[12];
       sprintf(buffer, "%u:", providerName.size());
       const String key = buffer + moduleName + ":" + providerName;
   
     // look up provider in cache     // look up provider in cache
     ProviderMessageHandler* pr = 0;     ProviderMessageHandler* pr = 0;
     if (_providers.lookup(providerName, pr))      if (_providers.lookup(key, pr))
     {     {
         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
             "Found Provider " + providerName + " in Provider Manager Cache");             "Found Provider " + providerName + " in Provider Manager Cache");
Line 449 
Line 480 
     {     {
         // create provider         // create provider
         pr = new ProviderMessageHandler(         pr = new ProviderMessageHandler(
             providerName, 0, _indicationCallback, _responseChunkCallback,              moduleName, providerName,
               0, _indicationCallback, _responseChunkCallback,
             _subscriptionInitComplete);             _subscriptionInitComplete);
  
         // insert provider in provider table         // insert provider in provider table
         _providers.insert(providerName, pr);          _providers.insert(key, pr);
  
         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
             "Created provider " + pr->getName());             "Created provider " + pr->getName());
Line 473 
Line 505 
     ProviderModule* module = 0;     ProviderModule* module = 0;
     CIMProvider* base;     CIMProvider* base;
  
   /*
   BOOKMARK1:
   */
     // lookup provider module     // lookup provider module
     module = _lookupModule(moduleFileName);     module = _lookupModule(moduleFileName);
  
Line 578 
Line 613 
         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
             "Creating Provider Module " + moduleFileName);             "Creating Provider Module " + moduleFileName);
  
   /*
   BOOKMARK2:
   */
   std::cout << "MODULENAME[" << moduleFileName << "]" << std::endl;
   
         module = new ProviderModule(moduleFileName);         module = new ProviderModule(moduleFileName);
  
         // insert provider module in module table         // insert provider module in module table
Line 596 
Line 636 
     try     try
     {     {
         AutoMutex lock(_providerTableMutex);         AutoMutex lock(_providerTableMutex);
         Tracer::trace(TRC_PROVIDERMANAGER, Tracer::LEVEL4,          PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
             "Number of providers in _providers table = %d", _providers.size());              "Number of providers in _providers table = %d", _providers.size()));
  
         // Iterate through the _providers table looking for an active provider         // Iterate through the _providers table looking for an active provider
         for (ProviderTable::Iterator i = _providers.start(); i != 0; i++)         for (ProviderTable::Iterator i = _providers.start(); i != 0; i++)
Line 612 
Line 652 
     catch (...)     catch (...)
     {     {
         // Unexpected exception; do not assume that no providers are loaded         // Unexpected exception; do not assume that no providers are loaded
         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,          PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
             "Unexpected Exception in hasActiveProviders.");             "Unexpected Exception in hasActiveProviders.");
         PEG_METHOD_EXIT();         PEG_METHOD_EXIT();
         return true;         return true;
Line 673 
Line 713 
     }     }
     catch (...)     catch (...)
     {     {
         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,          PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
             "Caught unexpected exception in unloadIdleProviders.");             "Caught unexpected exception in unloadIdleProviders.");
     }     }
  
Line 689 
Line 729 
     {     {
         AutoMutex lock(_providerTableMutex);         AutoMutex lock(_providerTableMutex);
  
         Tracer::trace(TRC_PROVIDERMANAGER, Tracer::LEVEL4,          PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
             "providers in cache = %d", _providers.size());              "providers in cache = %d", _providers.size()));
  
         for (ProviderTable::Iterator i = _providers.start(); i != 0; i++)         for (ProviderTable::Iterator i = _providers.start(); i != 0; i++)
         {         {
Line 707 
Line 747 
     }     }
     catch (...)     catch (...)
     {     {
         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,          PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
             "Unexpected Exception in _shutdownAllProviders().");             "Unexpected Exception in _shutdownAllProviders().");
     }     }
  
     PEG_METHOD_EXIT();     PEG_METHOD_EXIT();
 } }
  
 Sint16 DefaultProviderManager::_disableProvider(const String& providerName)  Sint16 DefaultProviderManager::_disableProvider(
       const String& moduleName,
       const String& providerName)
 { {
     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
         "DefaultProviderManager::_disableProvider");         "DefaultProviderManager::_disableProvider");
  
     ProviderMessageHandler* pr = _lookupProvider(providerName);      ProviderMessageHandler* pr = _lookupProvider(moduleName, providerName);
     if (!pr->status.isInitialized())     if (!pr->status.isInitialized())
     {     {
         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
Line 746 
Line 788 
     // There are still pending requests, do not disable     // There are still pending requests, do not disable
     if (pr->status.numCurrentOperations() > 0)     if (pr->status.numCurrentOperations() > 0)
     {     {
         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,          PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
             "Disable failed since there are pending requests.");             "Disable failed since there are pending requests.");
         PEG_METHOD_EXIT();         PEG_METHOD_EXIT();
         return 0;         return 0;


Legend:
Removed from v.1.76  
changed lines
  Added in v.1.81.2.1

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2