Changeset 2458 for XIOS3/trunk/src/manager/ressources_manager.cpp
- Timestamp:
- 01/25/23 16:59:46 (17 months ago)
- Location:
- XIOS3/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS3/trunk
-
Property
svn:mergeinfo
set to
False
/XIOS3/dev/XIOS_FILE_SERVICES merged eligible
-
Property
svn:mergeinfo
set to
False
-
XIOS3/trunk/src/manager/ressources_manager.cpp
r2260 r2458 2 2 #include "server.hpp" 3 3 #include "servers_ressource.hpp" 4 #include "token_manager.hpp" 4 5 #include "timer.hpp" 5 6 … … 21 22 if (commRank==0 && isXiosServer) MPI_Comm_rank(xiosComm_, &commRank) ; 22 23 else commRank=0 ; 24 tokenManager_ = new CTokenManager(xiosComm_,commRank) ; 25 23 26 MPI_Allreduce(&commRank, &managerGlobalLeader_, 1, MPI_INT, MPI_SUM, xiosComm_) ; 24 27 … … 163 166 buffer.realloc(maxBufferSize_) ; 164 167 165 buffer<< serverLeader_ ;168 buffer<<ressourcesSize_<<freeRessourcesSize_<<serverLeader_ ; 166 169 buffer<<(int) pools_.size(); 167 170 for(auto it=pools_.begin();it!=pools_.end(); ++it) … … 169 172 auto key = it->first ; 170 173 auto val = it->second ; 171 buffer << key<<std::get<0>(val) << std::get<1>(val);174 buffer << key<<std::get<0>(val) << std::get<1>(val) << std::get<2>(val); 172 175 } 173 176 } … … 177 180 std::string poolId ; 178 181 int size ; 182 int freeSize ; 179 183 int leader ; 180 184 181 buffer>> serverLeader_ ;185 buffer>>ressourcesSize_>>freeRessourcesSize_>>serverLeader_ ; 182 186 pools_.clear() ; 183 187 int nbPools ; … … 185 189 for(int i=0;i<nbPools;i++) 186 190 { 187 buffer>>poolId>>size>> leader ;188 pools_[poolId]=std::make_tuple(size, leader) ;191 buffer>>poolId>>size>>freeSize>>leader ; 192 pools_[poolId]=std::make_tuple(size, freeSize, leader) ; 189 193 } 190 194 } … … 210 214 211 215 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) ; 216 void CRessourcesManager::registerPoolClient(const string& poolId, int size, int leader) 217 { 218 winRessources_->lockWindow(managerGlobalLeader_,0) ; 219 winRessources_->updateFromWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpIn) ; 220 pools_[poolId] = make_tuple(size, size, leader) ; 221 winRessources_->updateToWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpOut) ; 222 winRessources_->unlockWindow(managerGlobalLeader_,0) ; 223 } 224 225 void CRessourcesManager::registerPoolServer(const string& poolId, int size, int leader) 226 { 227 winRessources_->lockWindow(managerGlobalLeader_,0) ; 228 winRessources_->updateFromWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpIn) ; 229 pools_[poolId] = make_tuple(size, size, leader) ; 217 230 freeRessourcesSize_-=size ; 218 231 winRessources_->updateToWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpOut) ; … … 220 233 } 221 234 222 223 bool CRessourcesManager::getPoolInfo(const string& poolId, int& size, int& leader) 235 bool CRessourcesManager::getPoolInfo(const string& poolId, int& size, int& freeSize, int& leader) 224 236 { 225 237 winRessources_->lockWindow(managerGlobalLeader_,0) ; … … 232 244 { 233 245 size=get<0>(it->second) ; 234 leader=get<1>(it->second) ; 246 freeSize=get<1>(it->second) ; 247 leader=get<2>(it->second) ; 235 248 return true ; 236 249 } 250 } 251 252 bool CRessourcesManager::decreasePoolFreeSize(const string& poolId, int size) 253 { 254 bool ret ; 255 256 winRessources_->lockWindow(managerGlobalLeader_,0) ; 257 winRessources_->updateFromWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpIn) ; 258 259 260 auto it=pools_.find(poolId) ; 261 262 if ( it == pools_.end()) ret=false ; 263 else 264 { 265 get<1>(it->second)-=size ; 266 ret=true ; 267 } 268 winRessources_->updateToWindow(managerGlobalLeader_, this, &CRessourcesManager::ressourcesDumpOut) ; 269 winRessources_->unlockWindow(managerGlobalLeader_,0) ; 270 271 return ret ; 237 272 } 238 273 … … 257 292 bool CRessourcesManager::getPoolLeader(const string& poolId, int& leader) 258 293 { 259 int size ;260 return getPoolInfo(poolId, size, leader) ;294 int size, freeSize ; 295 return getPoolInfo(poolId, size, freeSize, leader) ; 261 296 } 262 297 263 298 bool CRessourcesManager::getPoolSize(const string& poolId, int& size) 264 299 { 265 int leader ; 266 return getPoolInfo(poolId, size, leader) ; 300 int leader,freeSize ; 301 return getPoolInfo(poolId, size, freeSize, leader) ; 302 } 303 304 bool CRessourcesManager::getPoolFreeSize(const string& poolId, int& freeSize) 305 { 306 int leader,size ; 307 return getPoolInfo(poolId, size, freeSize, leader) ; 267 308 } 268 309 269 310 bool CRessourcesManager::hasPool(const string& poolId) 270 311 { 271 int leader,size ; 272 return getPoolInfo(poolId, size, leader) ; 312 int leader,size,freeSize ; 313 return getPoolInfo(poolId, size, freeSize, leader) ; 314 } 315 316 void CRessourcesManager::waitPoolRegistration(const string& poolId) 317 { 318 while(!hasPool(poolId)) CXios::getDaemonsManager()->servicesEventLoop() ; 273 319 } 274 320 }
Note: See TracChangeset
for help on using the changeset viewer.