Ignore:
Timestamp:
01/03/23 19:06:42 (18 months ago)
Author:
ymipsl
Message:

Implementation of files service on dev branch

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS3/dev/XIOS_FILE_SERVICES/src/manager/ressources_manager.cpp

    r2260 r2453  
    163163    buffer.realloc(maxBufferSize_) ; 
    164164     
    165     buffer<<serverLeader_ ;   
     165    buffer<<ressourcesSize_<<freeRessourcesSize_<<serverLeader_ ;   
    166166    buffer<<(int) pools_.size(); 
    167167    for(auto it=pools_.begin();it!=pools_.end(); ++it) 
     
    169169      auto key = it->first ; 
    170170      auto val = it->second ;  
    171       buffer << key<<std::get<0>(val) << std::get<1>(val)  ; 
     171      buffer << key<<std::get<0>(val)  << std::get<1>(val)  << std::get<2>(val); 
    172172    } 
    173173  } 
     
    177177    std::string poolId ; 
    178178    int size ; 
     179    int freeSize ; 
    179180    int leader ; 
    180181    
    181     buffer>>serverLeader_ ; 
     182    buffer>>ressourcesSize_>>freeRessourcesSize_>>serverLeader_ ; 
    182183    pools_.clear() ; 
    183184    int nbPools ; 
     
    185186    for(int i=0;i<nbPools;i++)  
    186187    { 
    187       buffer>>poolId>>size>>leader ; 
    188       pools_[poolId]=std::make_tuple(size,leader) ; 
     188      buffer>>poolId>>size>>freeSize>>leader ; 
     189      pools_[poolId]=std::make_tuple(size, freeSize, leader) ; 
    189190    } 
    190191  } 
     
    210211 
    211212  
    212   void CRessourcesManager::registerPool(const string& poolId, int size, int leader) 
    213   { 
    214     winRessources_->lockWindow(managerGlobalLeader_,0) ; 
    215     winRessources_->updateFromWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpIn) ; 
    216     pools_[poolId] = make_tuple(size,leader) ; 
     213  void CRessourcesManager::registerPoolClient(const string& poolId, int size, int leader) 
     214  { 
     215    winRessources_->lockWindow(managerGlobalLeader_,0) ; 
     216    winRessources_->updateFromWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpIn) ; 
     217    pools_[poolId] = make_tuple(size, size, leader) ; 
     218    winRessources_->updateToWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpOut) ; 
     219    winRessources_->unlockWindow(managerGlobalLeader_,0) ;     
     220  } 
     221 
     222  void CRessourcesManager::registerPoolServer(const string& poolId, int size, int leader) 
     223  { 
     224    winRessources_->lockWindow(managerGlobalLeader_,0) ; 
     225    winRessources_->updateFromWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpIn) ; 
     226    pools_[poolId] = make_tuple(size, size, leader) ; 
    217227    freeRessourcesSize_-=size ; 
    218228    winRessources_->updateToWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpOut) ; 
     
    220230  } 
    221231 
    222  
    223   bool CRessourcesManager::getPoolInfo(const string& poolId, int& size, int& leader) 
     232  bool CRessourcesManager::getPoolInfo(const string& poolId, int& size, int& freeSize, int& leader) 
    224233  { 
    225234    winRessources_->lockWindow(managerGlobalLeader_,0) ; 
     
    232241    { 
    233242      size=get<0>(it->second) ; 
    234       leader=get<1>(it->second) ; 
     243      freeSize=get<1>(it->second) ; 
     244      leader=get<2>(it->second) ; 
    235245      return true ; 
    236246    } 
     247  } 
     248 
     249  bool CRessourcesManager::decreasePoolFreeSize(const string& poolId, int size) 
     250  { 
     251    int ret ; 
     252 
     253    winRessources_->lockWindow(managerGlobalLeader_,0) ; 
     254    winRessources_->updateFromWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpIn) ; 
     255    
     256 
     257    auto it=pools_.find(poolId) ; 
     258     
     259    if ( it == pools_.end()) ret=false ; 
     260    else  
     261    { 
     262      get<1>(it->second)-=size ; 
     263      ret=true ; 
     264    } 
     265    winRessources_->updateToWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpOut) ; 
     266    winRessources_->unlockWindow(managerGlobalLeader_,0) ;     
    237267  } 
    238268 
     
    257287  bool CRessourcesManager::getPoolLeader(const string& poolId, int& leader) 
    258288  { 
    259     int size ; 
    260     return getPoolInfo(poolId, size, leader) ; 
     289    int size, freeSize ; 
     290    return getPoolInfo(poolId, size, freeSize, leader) ; 
    261291  } 
    262292 
    263293  bool CRessourcesManager::getPoolSize(const string& poolId, int& size) 
    264294  { 
    265     int leader ; 
    266     return getPoolInfo(poolId, size, leader) ; 
     295    int leader,freeSize ; 
     296    return getPoolInfo(poolId, size, freeSize, leader) ; 
     297  } 
     298 
     299  bool CRessourcesManager::getPoolFreeSize(const string& poolId, int& freeSize) 
     300  { 
     301    int leader,size ; 
     302    return getPoolInfo(poolId, size, freeSize, leader) ; 
    267303  } 
    268304 
    269305  bool CRessourcesManager::hasPool(const string& poolId) 
    270306  { 
    271     int leader,size ; 
    272     return getPoolInfo(poolId, size, leader) ; 
     307    int leader,size,freeSize ; 
     308    return getPoolInfo(poolId, size, freeSize, leader) ; 
     309  } 
     310 
     311  void CRessourcesManager::waitPoolRegistration(const string& poolId) 
     312  { 
     313    while(!hasPool(poolId)) CXios::getDaemonsManager()->servicesEventLoop() ; 
    273314  } 
    274315} 
Note: See TracChangeset for help on using the changeset viewer.