Changeset 1460 for XIOS/dev/branch_openmp/src/group_template_impl.hpp
- Timestamp:
- 03/22/18 10:43:20 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/branch_openmp/src/group_template_impl.hpp
r595 r1460 373 373 void CGroupTemplate<U, V, W>::sendCreateChild(const string& id) 374 374 { 375 CContext* context=CContext::getCurrent() ; 376 377 if (context->hasClient) 378 // if (!context->hasServer ) 379 { 380 // Use correct context client to send message 381 // CContextClient* contextClientTmp = (0 != context->clientPrimServer) ? context->clientPrimServer : context->client; 382 int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 383 for (int i = 0; i < nbSrvPools; ++i) 384 { 385 CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] : context->client; 386 387 CEventClient event(this->getType(),EVENT_ID_CREATE_CHILD) ; 388 if (contextClientTmp->isServerLeader()) 389 { 390 CMessage msg ; 391 msg<<this->getId() ; 392 msg<<id ; 393 const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 394 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 395 event.push(*itRank,1,msg) ; 396 contextClientTmp->sendEvent(event) ; 397 } 398 else contextClientTmp->sendEvent(event) ; 399 } 400 } 401 402 } 403 404 template <class U, class V, class W> 405 void CGroupTemplate<U, V, W>::sendCreateChild(const string& id, CContextClient* client) 406 { 407 408 CEventClient event(this->getType(),EVENT_ID_CREATE_CHILD) ; 409 if (client->isServerLeader()) 410 { 411 CMessage msg ; 412 msg<<this->getId() ; 413 msg<<id ; 414 const std::list<int>& ranks = client->getRanksServerLeader(); 415 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 416 event.push(*itRank,1,msg) ; 417 client->sendEvent(event) ; 418 } 419 else client->sendEvent(event) ; 420 } 421 422 423 template <class U, class V, class W> 424 void CGroupTemplate<U, V, W>::sendCreateChildGroup(const string& id) 425 { 375 426 CContext* context=CContext::getCurrent() ; 376 377 if (! context->hasServer ) 427 if (context->hasClient) 378 428 { 379 CContextClient* client=context->client ; 380 381 CEventClient event(this->getType(),EVENT_ID_CREATE_CHILD) ; 382 if (client->isServerLeader()) 383 { 384 CMessage msg ; 385 msg<<this->getId() ; 386 msg<<id ; 387 const std::list<int>& ranks = client->getRanksServerLeader(); 388 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 389 event.push(*itRank,1,msg) ; 390 client->sendEvent(event) ; 391 } 392 else client->sendEvent(event) ; 429 // Use correct context client to send message 430 // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 431 int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 1) : 1; 432 for (int i = 0; i < nbSrvPools; ++i) 433 { 434 CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] : context->client; 435 CEventClient event(this->getType(),EVENT_ID_CREATE_CHILD_GROUP) ; 436 if (contextClientTmp->isServerLeader()) 437 { 438 CMessage msg ; 439 msg<<this->getId() ; 440 msg<<id ; 441 const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 442 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 443 event.push(*itRank,1,msg) ; 444 contextClientTmp->sendEvent(event) ; 445 } 446 else contextClientTmp->sendEvent(event) ; 447 } 393 448 } 394 395 }396 397 template <class U, class V, class W>398 void CGroupTemplate<U, V, W>::sendCreateChildGroup(const string& id)399 {400 CContext* context=CContext::getCurrent() ;401 if (! context->hasServer )402 {403 CContextClient* client=context->client ;404 405 CEventClient event(this->getType(),EVENT_ID_CREATE_CHILD_GROUP) ;406 if (client->isServerLeader())407 {408 CMessage msg ;409 msg<<this->getId() ;410 msg<<id ;411 const std::list<int>& ranks = client->getRanksServerLeader();412 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank)413 event.push(*itRank,1,msg) ;414 client->sendEvent(event) ;415 }416 else client->sendEvent(event) ;417 }418 419 449 } 420 450 … … 422 452 void CGroupTemplate<U, V, W>::recvCreateChild(CEventServer& event) 423 453 { 424 425 454 CBufferIn* buffer=event.subEvents.begin()->buffer; 426 455 string id;
Note: See TracChangeset
for help on using the changeset viewer.