Ignore:
Timestamp:
11/05/19 16:02:34 (5 years ago)
Author:
ymipsl
Message:

Some Update on XIOS services
Seems to work on Irène for :

  • first level of servers
  • fisrt + second level of servers
  • attached mode

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_ym/XIOS_SERVICES/src/context_server.cpp

    r1761 r1764  
    3030  using namespace std ; 
    3131 
    32   CContextServer::CContextServer(CContext* parent,MPI_Comm intraComm_,MPI_Comm interComm_) 
     32  CContextServer::CContextServer(CContext* parent,MPI_Comm intraComm_,MPI_Comm interComm_) : eventScheduler_(nullptr), isProcessingEvent_(false) 
    3333  { 
    3434    context=parent; 
     
    5353    if (contextInfo.serviceType != CServicesManager::CLIENT) // we must have an event scheduler => to be retrieve from the associated services 
    5454    { 
    55       eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ; 
     55      if (!isAttachedModeEnabled()) eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ; 
    5656    } 
    5757 
     
    321321    CEventServer* event; 
    322322     
    323     if (context->isProcessingEvent()) return ; 
     323//    if (context->isProcessingEvent()) return ; 
     324    if (isProcessingEvent_) return ; 
    324325 
    325326    it=events.find(currentTimeLine); 
     
    330331      if (event->isFull()) 
    331332      { 
    332         if (!scheduled && CServer::eventScheduler) // Skip event scheduling for attached mode and reception on client side 
     333        if (!scheduled && eventScheduler_) // Skip event scheduling for attached mode and reception on client side 
    333334        { 
    334           CServer::eventScheduler->registerEvent(currentTimeLine,hashId); 
     335          eventScheduler_->registerEvent(currentTimeLine,hashId); 
    335336          scheduled=true; 
    336337        } 
    337         else if (!CServer::eventScheduler || CServer::eventScheduler->queryEvent(currentTimeLine,hashId) ) 
     338        else if (!eventScheduler_ || eventScheduler_->queryEvent(currentTimeLine,hashId) ) 
    338339        { 
    339340         // When using attached mode, synchronise the processes to avoid that differents event be scheduled by differents processes 
    340341         // The best way to properly solve this problem will be to use the event scheduler also in attached mode 
    341342         // for now just set up a MPI barrier 
    342          if (!CServer::eventScheduler && CXios::isServer) MPI_Barrier(intraComm) ; 
    343  
    344          context->setProcessingEvent() ; 
     343         if (!eventScheduler_ && CXios::isServer) MPI_Barrier(intraComm) ; 
     344 
     345//         context->setProcessingEvent() ; 
     346         isProcessingEvent_=true ; 
    345347         CTimer::get("Process events").resume(); 
    346348         dispatchEvent(*event); 
    347349         CTimer::get("Process events").suspend(); 
    348          context->unsetProcessingEvent() ; 
     350         isProcessingEvent_=false ; 
     351//         context->unsetProcessingEvent() ; 
    349352         pendingEvent=false; 
    350353         delete event; 
Note: See TracChangeset for help on using the changeset viewer.