Changeset 2493


Ignore:
Timestamp:
04/21/23 20:51:36 (15 months ago)
Author:
ymipsl
Message:

Bug fix in service Manager when waiting for service registration.

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS3/dev/XIOS_ATTACHED/src/manager/services_manager.cpp

    r2489 r2493  
    227227    int leader ; 
    228228 
    229     services_.clear() ; 
    230229    int nbServices ; 
    231230    buffer>>nbServices ; 
     231    bool newServices = nbServices != services_.size() ;  
     232 
     233    services_.clear() ; 
     234 
    232235    for(int i=0;i<nbServices;i++)  
    233236    { 
    234237      buffer>>poolId>>serviceId>>partitionId>>type>>size>>nbPartitions>>leader ; 
    235238      services_[std::tuple<std::string,std::string,int>(poolId,serviceId,partitionId)]=std::make_tuple(type,size,nbPartitions,leader) ; 
     239      if (newServices) 
     240        info(40)<<"Receive new services informations : "<<poolId<<"::"<<serviceId<<"::"<<partitionId<<" => type : "<<type<<"  size : "<<size<<"  nbPartitions : "<<nbPartitions<<"  leader : "<<leader<<endl ; 
    236241    } 
    237242  } 
     
    255260                                        int& size, int& nbPartitions, int& leader, bool wait) 
    256261  { 
    257      
    258262    winServices_->lockWindowShared(managerGlobalLeader_) ; 
    259263    winServices_->updateFromLockedWindow(managerGlobalLeader_, this, &CServicesManager::servicesDumpIn) ; 
    260264    winServices_->unlockWindow(managerGlobalLeader_) ; 
    261  
     265     
     266    if (wait) waitServiceRegistration(poolId, serviceId, partitionId) ; 
    262267    auto it=services_.find(std::tuple<std::string,std::string,int>(poolId,serviceId,partitionId)) ; 
    263     if ( it == services_.end() && !wait) return false ; 
     268    if ( it == services_.end()) return false ; 
    264269    else 
    265270    { 
    266       if (wait) waitServiceRegistration(poolId, serviceId, partitionId) ; 
    267271      type= std::get<0>(it->second);  
    268272      size= std::get<1>(it->second);  
     
    299303  bool CServicesManager::hasService(const std::string& poolId, const std::string& serviceId, const int& partitionId) 
    300304  { 
    301     winServices_->lockWindow(managerGlobalLeader_,0) ; 
    302     winServices_->updateFromWindow(managerGlobalLeader_, this, &CServicesManager::servicesDumpIn) ; 
    303     winServices_->unlockWindow(managerGlobalLeader_,0) ; 
     305    winServices_->lockWindowShared(managerGlobalLeader_) ; 
     306    winServices_->updateFromLockedWindow(managerGlobalLeader_, this, &CServicesManager::servicesDumpIn) ; 
     307    winServices_->unlockWindow(managerGlobalLeader_) ; 
    304308    auto it=services_.find(std::tuple<std::string, std::string, int>(poolId, serviceId, partitionId)) ; 
    305309    if ( it == services_.end()) return false ; 
Note: See TracChangeset for help on using the changeset viewer.