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

Diff for /pegasus/src/Pegasus/ProviderManager2/Attic/ProviderManagerService.cpp between version 1.70.6.1 and 1.79

version 1.70.6.1, 2005/10/21 17:34:42 version 1.79, 2006/05/09 19:09:36
Line 1 
Line 1 
 //%2005////////////////////////////////////////////////////////////////////////  //%2006////////////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
Line 8 
Line 8 
 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 // EMC Corporation; VERITAS Software Corporation; The Open Group. // EMC Corporation; VERITAS Software Corporation; The Open Group.
   // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; Symantec Corporation; The Open Group.
 // //
 // Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
Line 39 
Line 41 
 //              Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com) //              Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
 //              Seema Gupta (gseema@in.ibm.com for PEP135) //              Seema Gupta (gseema@in.ibm.com for PEP135)
 //              Jim Wunderlich (Jim_Wunderlich@prodigy.net) //              Jim Wunderlich (Jim_Wunderlich@prodigy.net)
   //              Aruran, IBM (ashanmug@in.ibm.com)for Bug# 3881
 // //
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
Line 52 
Line 55 
 #include <Pegasus/Common/Tracer.h> #include <Pegasus/Common/Tracer.h>
 #include <Pegasus/Common/Logger.h> #include <Pegasus/Common/Logger.h>
 #include <Pegasus/Common/AutoPtr.h> #include <Pegasus/Common/AutoPtr.h>
 #include <Pegasus/Common/Constants.h>  
  
 #include <Pegasus/Config/ConfigManager.h> #include <Pegasus/Config/ConfigManager.h>
  
Line 113 
Line 115 
 #ifdef PEGASUS_DISABLE_PROV_USERCTXT #ifdef PEGASUS_DISABLE_PROV_USERCTXT
     if (forceProviderProcesses)     if (forceProviderProcesses)
     {     {
         _oopProviderManagerRouter =          _oopProviderManagerRouter = new OOPProviderManagerRouter(
             new OOPProviderManagerRouter(indicationCallback);              indicationCallback, responseChunkCallback,
               providerModuleFailureCallback);
     }     }
     else     else
     {     {
         _basicProviderManagerRouter =          _basicProviderManagerRouter = new BasicProviderManagerRouter(
             new BasicProviderManagerRouter(indicationCallback);              indicationCallback, responseChunkCallback);
     }     }
 #else #else
     _oopProviderManagerRouter =      _oopProviderManagerRouter = new OOPProviderManagerRouter(
         new OOPProviderManagerRouter(indicationCallback);          indicationCallback, responseChunkCallback,
           providerModuleFailureCallback);
  
     if (!forceProviderProcesses)     if (!forceProviderProcesses)
     {     {
         _basicProviderManagerRouter =          _basicProviderManagerRouter = new BasicProviderManagerRouter(
             new BasicProviderManagerRouter(indicationCallback);              indicationCallback, responseChunkCallback);
     }     }
 #endif #endif
 } }
Line 208 
Line 212 
                Tracer::trace(TRC_PROVIDERMANAGER, Tracer::LEVEL2,                Tracer::trace(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
                         "Could not allocate thread for %s.",                         "Could not allocate thread for %s.",
                          getQueueName());                          getQueueName());
                   break;
            }            }
         }         }
     }     }
Line 289 
Line 294 
  
             if (msg != 0)             if (msg != 0)
             {             {
                 AcceptLanguages* langs = new AcceptLanguages(                  AcceptLanguageList* langs = new AcceptLanguageList(
                     ((AcceptLanguageListContainer)msg->operationContext.get(                     ((AcceptLanguageListContainer)msg->operationContext.get(
                         AcceptLanguageListContainer::NAME)).getLanguages());                         AcceptLanguageListContainer::NAME)).getLanguages());
                 Thread::setLanguages(langs);                 Thread::setLanguages(langs);
Line 463 
Line 468 
                     .getValue();                     .getValue();
             itValue.get(operationalStatus);             itValue.get(operationalStatus);
  
             if (response != 0)  
             {  
                 delete response;                 delete response;
             }  
  
             response = new CIMEnableModuleResponseMessage(             response = new CIMEnableModuleResponseMessage(
                 request->messageId,                 request->messageId,
Line 530 
Line 532 
                     .getValue();                     .getValue();
             itValue.get(operationalStatus);             itValue.get(operationalStatus);
  
             if (response != 0)  
             {  
                 delete response;                 delete response;
             }  
  
             response = new CIMDisableModuleResponseMessage(             response = new CIMDisableModuleResponseMessage(
                 request->messageId,                 request->messageId,
Line 559 
Line 558 
     PEG_METHOD_EXIT();     PEG_METHOD_EXIT();
 } }
  
 void  void ProviderManagerService::responseChunkCallback(
 ProviderManagerService::handleCimResponse(CIMRequestMessage &request,      CIMRequestMessage* request,
                                                                                                                                                                         CIMResponseMessage &response)      CIMResponseMessage* response)
 { {
         CIMStatusCode code = CIM_ERR_SUCCESS;      PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
         String message;          "ProviderManagerService::responseChunkCallback");
  
         try         try
         {         {
                 // only incomplete messages are processed because the caller ends up                 // only incomplete messages are processed because the caller ends up
                 // sending the complete() stage                 // sending the complete() stage
                 PEGASUS_ASSERT(response.isComplete() == false);          PEGASUS_ASSERT(response->isComplete() == false);
  
                 AsyncLegacyOperationStart *requestAsync =                 AsyncLegacyOperationStart *requestAsync =
                         dynamic_cast<AsyncLegacyOperationStart *>(request._async);              dynamic_cast<AsyncLegacyOperationStart *>(request->_async);
                 PEGASUS_ASSERT(requestAsync);                 PEGASUS_ASSERT(requestAsync);
                 AsyncOpNode *op = requestAsync->op;                 AsyncOpNode *op = requestAsync->op;
                 PEGASUS_ASSERT(op);                 PEGASUS_ASSERT(op);
                 PEGASUS_ASSERT(! response._async);          PEGASUS_ASSERT(!response->_async);
                 response._async = new AsyncLegacyOperationResult          response->_async = new AsyncLegacyOperationResult(
                         (requestAsync->getKey(), requestAsync->getRouting(), op, &response);              requestAsync->getKey(), requestAsync->getRouting(), op, response);
  
                 // set the destination                 // set the destination
                 op->_op_dest = op->_callback_response_q;                 op->_op_dest = op->_callback_response_q;
Line 597 
Line 596 
  
                 op->_async_callback(op, service, op->_callback_ptr);                 op->_async_callback(op, service, op->_callback_ptr);
         }         }
   
         catch(CIMException &e)  
         {  
                 code = e.getCode();  
                 message = e.getMessage();  
         }  
         catch(Exception &e)         catch(Exception &e)
         {         {
                 code = CIM_ERR_FAILED;          PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,
                 message = e.getMessage();              "Exception in ProviderManagerService::responseChunkCallback: " +
                   e.getMessage() + ".  Chunk not delivered.");
         }         }
         catch(...)         catch(...)
         {         {
                 code = CIM_ERR_FAILED;          PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,
                 message = cimStatusCodeToString(code);              "Exception in ProviderManagerService::responseChunkCallback.  "
                   "Chunk not delivered.");
         }         }
  
         if (code !=  CIM_ERR_SUCCESS)      PEG_METHOD_EXIT();
                 response.cimException = PEGASUS_CIM_EXCEPTION(code, message);  
 } }
  
 Message* ProviderManagerService::_processMessage(CIMRequestMessage* request) Message* ProviderManagerService::_processMessage(CIMRequestMessage* request)
Line 636 
Line 630 
         {         {
             // Note: These responses do not contain interesting data, so just             // Note: These responses do not contain interesting data, so just
             // use the last one.             // use the last one.
             if (response)  
             {  
                 delete response;                 delete response;
             }  
  
             response = _oopProviderManagerRouter->processMessage(request);             response = _oopProviderManagerRouter->processMessage(request);
         }         }
Line 667 
Line 658 
             providerModule = pidc.getModule();             providerModule = pidc.getModule();
         }         }
  
         Uint16 userContext = 0;          Uint16 userContext = PEGASUS_DEFAULT_PROV_USERCTXT;
         Uint32 pos = providerModule.findProperty(         Uint32 pos = providerModule.findProperty(
             PEGASUS_PROPERTYNAME_MODULE_USERCONTEXT);             PEGASUS_PROPERTYNAME_MODULE_USERCONTEXT);
         if (pos != PEG_NOT_FOUND)         if (pos != PEG_NOT_FOUND)
Line 788 
Line 779 
 } }
  
 // Updates the providerModule instance and the ProviderRegistrationManager // Updates the providerModule instance and the ProviderRegistrationManager
   //
   // This method is used to update the provider module status when the module is
   // disabled or enabled.  If a Degraded status has been set (appended) to the
   // OperationalStatus, it is cleared (removed) when the module is disabled or
   // enabled.
   //
 void ProviderManagerService::_updateProviderModuleStatus( void ProviderManagerService::_updateProviderModuleStatus(
     CIMInstance& providerModule,     CIMInstance& providerModule,
     Uint16 fromStatus,     Uint16 fromStatus,
Line 825 
Line 822 
         {         {
             operationalStatus.remove(i-1);             operationalStatus.remove(i-1);
         }         }
   
           //
           //  If operationalStatus includes Degraded, it is removed when status is
           //  updated
           //
           else if (operationalStatus [i-1] == CIM_MSE_OPSTATUS_VALUE_DEGRADED)
           {
               operationalStatus.remove (i-1);
           }
     }     }
  
     operationalStatus.append(toStatus);     operationalStatus.append(toStatus);
Line 853 
Line 859 
                 AcceptLanguageListContainer cntr = request->operationContext.get(AcceptLanguageListContainer::NAME);                 AcceptLanguageListContainer cntr = request->operationContext.get(AcceptLanguageListContainer::NAME);
         }catch(const Exception &)         }catch(const Exception &)
         {         {
                 request->operationContext.insert(AcceptLanguageListContainer(AcceptLanguages::EMPTY));          request->operationContext.insert(AcceptLanguageListContainer(AcceptLanguageList()));
         }         }
  
         if (_indicationServiceQueueId == PEG_NOT_FOUND)         if (_indicationServiceQueueId == PEG_NOT_FOUND)
Line 948 
Line 954 
  
 } }
  
   void ProviderManagerService::providerModuleFailureCallback
       (const String & moduleName,
        const String & userName,
        Uint16 userContext)
   {
       PEG_METHOD_ENTER (TRC_PROVIDERMANAGER,
           "ProviderManagerService::providerModuleFailureCallback");
   
       if (userContext == PG_PROVMODULE_USERCTXT_REQUESTOR)
       {
           Logger::put_l (
               Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING,
               "ProviderManager.OOPProviderManagerRouter."
                   "OOP_PROVIDER_MODULE_USER_CTXT_FAILURE_DETECTED",
               "A failure was detected in provider module $0 with"
                   " user context $1.",
               moduleName, userName);
       }
       else  //  not requestor context
       {
           Logger::put_l (
               Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING,
               "ProviderManager.OOPProviderManagerRouter."
                   "OOP_PROVIDER_MODULE_FAILURE_DETECTED",
               "A failure was detected in provider module $0.",
               moduleName);
       }
   
       //
       //  Create Notify Provider Fail request message
       //
       CIMNotifyProviderFailRequestMessage * request =
           new CIMNotifyProviderFailRequestMessage
               (XmlWriter::getNextMessageId (),
               moduleName,
               userName,
               QueueIdStack ());
   
       //
       //  Send Notify Provider Fail request message to Indication Service
       //
       if (_indicationServiceQueueId == PEG_NOT_FOUND)
       {
           Array <Uint32> serviceIds;
   
           providerManagerService->find_services
               (PEGASUS_QUEUENAME_INDICATIONSERVICE, 0, 0, &serviceIds);
           PEGASUS_ASSERT (serviceIds.size () != 0);
   
           _indicationServiceQueueId = serviceIds [0];
       }
   
       request->queueIds = QueueIdStack
           (_indicationServiceQueueId, providerManagerService->getQueueId ());
   
       AsyncLegacyOperationStart * asyncRequest = new AsyncLegacyOperationStart
           (providerManagerService->get_next_xid (),
           0,
           _indicationServiceQueueId,
           request,
           _indicationServiceQueueId);
   
       AutoPtr <AsyncReply> asyncReply
           (providerManagerService->SendWait (asyncRequest));
   
       AutoPtr <CIMNotifyProviderFailResponseMessage> response
           (reinterpret_cast <CIMNotifyProviderFailResponseMessage *>
               ((dynamic_cast <AsyncLegacyOperationResult *>
               (asyncReply.get ()))->get_result ()));
   
       if (response->cimException.getCode () != CIM_ERR_SUCCESS)
       {
           PEG_TRACE_STRING (TRC_DISCARDED_DATA, Tracer::LEVEL2,
               "Unexpected exception in providerModuleFailureCallback: " +
               response->cimException.getMessage ());
       }
       else
       {
           //
           //  Successful response
           //  Examine result to see if any subscriptions were affected
           //
           if (response->numSubscriptionsAffected > 0)
           {
               //
               //  Subscriptions were affected
               //
   
               //
               //  Update the provider module status to Degraded
               //  First get the current provider module status
               //
               Array <Uint16> moduleStatus;
               moduleStatus =
                   providerManagerService->_providerRegistrationManager->
                   getProviderModuleStatus (moduleName);
   
               //
               //  Examine the current status
               //  If the current status does not already include Degraded,
               //  append Degraded to the status
               //  If the current status includes OK,
               //  remove OK from the status
               //
               Boolean degradedStatus = false;
               for (Uint32 i = 0; i < moduleStatus.size (); i++)
               {
                   if (moduleStatus [i] == CIM_MSE_OPSTATUS_VALUE_DEGRADED)
                   {
                       degradedStatus = true;
                   }
                   else if (moduleStatus [i] == CIM_MSE_OPSTATUS_VALUE_OK)
                   {
                       moduleStatus.remove (i);
                       i--;
                   }
               }
   
               if (!degradedStatus)
               {
                   moduleStatus.append (CIM_MSE_OPSTATUS_VALUE_DEGRADED);
               }
   
               //
               //  Update the provider module status
               //
               providerManagerService->_providerRegistrationManager->
                   setProviderModuleStatus (moduleName, moduleStatus);
   
               //
               //  Log a warning message since subscriptions were affected
               //
               Logger::put_l (
                   Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING,
                   "ProviderManager.OOPProviderManagerRouter."
                       "OOP_PROVIDER_MODULE_SUBSCRIPTIONS_AFFECTED",
                   "The generation of indications by providers in module $0 "
                   "may be affected.  To ensure these providers are serving "
                   "active subscriptions, disable and then re-enable this "
                   "module using the cimprovider command.");
           }
       }
   }
   
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END


Legend:
Removed from v.1.70.6.1  
changed lines
  Added in v.1.79

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2