Changeset 1848
- Timestamp:
- 01/07/20 18:53:52 (3 years ago)
- Location:
- XIOS/dev/dev_ym/XIOS_COUPLING/src
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.cpp
r1784 r1848 37 37 , calendar(), hasClient(false), hasServer(false) 38 38 , isPostProcessed(false), finalized(false) 39 , idServer_(),client(nullptr), server(nullptr)39 , client(nullptr), server(nullptr) 40 40 , allProcessed(false), countChildContextFinalized_(0), isProcessingEvent_(false) 41 41 … … 46 46 , calendar(), hasClient(false), hasServer(false) 47 47 , isPostProcessed(false), finalized(false) 48 , idServer_(),client(nullptr), server(nullptr)48 , client(nullptr), server(nullptr) 49 49 , allProcessed(false), countChildContextFinalized_(0), isProcessingEvent_(false) 50 50 { /* Ne rien faire de plus */ } … … 280 280 TRY 281 281 { 282 // Estimated minimum event size for small events ( 10 is an arbitrary constant just for safety)283 const size_t minEventSize = CEventClient::headerSize + getIdServer().size() + 10 * sizeof(int);282 // Estimated minimum event size for small events (20 is an arbitrary constant just for safety) 283 const size_t minEventSize = CEventClient::headerSize + 20 * sizeof(int); 284 284 285 285 // Ensure there is at least some room for 20 of such events in the buffers … … 463 463 if (commRank==0) CXios::getServicesManager()->getServiceType(CClient::getPoolRessource()->getId(), CXios::defaultServerId, 0, type) ; 464 464 MPI_Bcast(&type,1,MPI_INT,0,intraComm_) ; 465 setIdServer(CXios::getContextsManager()->getServerContextName(CClient::getPoolRessource()->getId(), CXios::defaultServerId, 0, type, getContextId())) ;466 465 setCurrent(getId()) ; // getCurrent/setCurrent may be supress, it can cause a lot of trouble 467 466 } … … 474 473 if (commRank==0) CXios::getServicesManager()->getServiceType(CXios::defaultPoolId, CXios::defaultGathererId, 0, type) ; 475 474 MPI_Bcast(&type,1,MPI_INT,0,intraComm_) ; 476 setIdServer(CXios::getContextsManager()->getServerContextName(CXios::defaultPoolId, CXios::defaultGathererId, 0, type, getContextId())) ;477 475 } 478 476 else … … 484 482 if (commRank==0) CXios::getServicesManager()->getServiceType(CXios::defaultPoolId, CXios::defaultServerId, 0, type) ; 485 483 MPI_Bcast(&type,1,MPI_INT,0,intraComm_) ; 486 setIdServer(CXios::getContextsManager()->getServerContextName(CXios::defaultPoolId, CXios::defaultServerId, 0, type, getContextId())) ;487 484 } 488 485 … … 804 801 { 805 802 CMessage msg; 806 if (hasServer)807 msg<<this->getIdServer(i);808 else809 msg<<this->getIdServer();810 803 const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 811 804 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) … … 822 815 { 823 816 CBufferIn* buffer=event.subEvents.begin()->buffer; 824 string id; 825 *buffer>>id; 826 get(id)->recvPostProcessingGlobalAttributes(*buffer); 817 getCurrent()->recvPostProcessingGlobalAttributes(*buffer); 827 818 } 828 819 CATCH … … 1520 1511 { 1521 1512 CMessage msg; 1522 if (hasServer)1523 msg<<this->getIdServer(i);1524 else1525 msg<<this->getIdServer();1526 1513 const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 1527 1514 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) … … 1539 1526 { 1540 1527 CBufferIn* buffer=event.subEvents.begin()->buffer; 1541 string id; 1542 *buffer>>id; 1543 get(id)->closeDefinition(); 1528 getCurrent()->closeDefinition(); 1544 1529 } 1545 1530 CATCH … … 1560 1545 CMessage msg; 1561 1546 if (hasServer) 1562 msg<< this->getIdServer(i)<<step;1547 msg<<step; 1563 1548 else 1564 msg<< this->getIdServer()<<step;1549 msg<<step; 1565 1550 const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 1566 1551 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) … … 1578 1563 { 1579 1564 CBufferIn* buffer=event.subEvents.begin()->buffer; 1580 string id; 1581 *buffer>>id; 1582 get(id)->recvUpdateCalendar(*buffer); 1565 getCurrent()->recvUpdateCalendar(*buffer); 1583 1566 } 1584 1567 CATCH … … 1613 1596 { 1614 1597 CMessage msg; 1615 if (hasServer)1616 msg<<this->getIdServer(i);1617 else1618 msg<<this->getIdServer();1619 1598 const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 1620 1599 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) … … 1632 1611 { 1633 1612 CBufferIn* buffer=event.subEvents.begin()->buffer; 1634 string id; 1635 *buffer>>id; 1636 get(id)->recvCreateFileHeader(*buffer); 1613 getCurrent()->recvCreateFileHeader(*buffer); 1637 1614 } 1638 1615 CATCH … … 1661 1638 { 1662 1639 CMessage msg; 1663 if (hasServer)1664 msg<<this->getIdServer(i);1665 else1666 msg<<this->getIdServer();1667 1640 const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 1668 1641 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) … … 1680 1653 { 1681 1654 CBufferIn* buffer=event.subEvents.begin()->buffer; 1682 string id; 1683 *buffer>>id; 1655 // nothing to do, no call ??!! 1684 1656 } 1685 1657 CATCH … … 1699 1671 { 1700 1672 CMessage msg; 1701 if (hasServer)1702 msg<<this->getIdServer(i);1703 else1704 msg<<this->getIdServer();1705 1673 const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 1706 1674 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) … … 1718 1686 { 1719 1687 CBufferIn* buffer=event.subEvents.begin()->buffer; 1720 string id; 1721 *buffer>>id; 1722 get(id)->recvPostProcessing(*buffer); 1688 getCurrent()->recvPostProcessing(*buffer); 1723 1689 } 1724 1690 CATCH … … 1733 1699 CATCH_DUMP_ATTR 1734 1700 1735 void CContext::setIdServer(const StdString& idServer) 1736 TRY 1737 { 1738 idServer_=idServer ; 1739 } 1740 CATCH_DUMP_ATTR 1741 1742 1743 const StdString& CContext::getIdServer() 1744 TRY 1745 { 1746 return idServer_; 1747 } 1748 CATCH_DUMP_ATTR 1749 1750 const StdString& CContext::getIdServer(const int i) 1751 TRY 1752 { 1753 // return idServer_ + std::to_string(static_cast<unsigned long long>(i)); 1754 return primServerId_[i] ; 1755 } 1756 CATCH_DUMP_ATTR 1757 1758 /* 1759 const StdString& CContext::getIdServer() 1760 TRY 1761 { 1762 if (hasClient) 1763 { 1764 idServer_ = this->getId(); 1765 idServer_ += "_server"; 1766 return idServer_; 1767 } 1768 if (hasServer) return (this->getId()); 1769 } 1770 CATCH_DUMP_ATTR 1771 1772 const StdString& CContext::getIdServer(const int i) 1773 TRY 1774 { 1775 idServer_ = this->getId(); 1776 idServer_ += "_server_"; 1777 idServer_ += std::to_string(static_cast<unsigned long long>(i)); 1778 return idServer_; 1779 } 1780 CATCH_DUMP_ATTR 1781 */ 1782 1783 1701 1784 1702 /*! 1785 1703 \brief Do some simple post processings after parsing xml file … … 2329 2247 { 2330 2248 CBufferIn* buffer=event.subEvents.begin()->buffer; 2331 string id; 2332 *buffer>>id; 2333 get(id)->recvRegistry(*buffer); 2249 getCurrent()->recvRegistry(*buffer); 2334 2250 } 2335 2251 CATCH … … 2361 2277 { 2362 2278 CMessage msg ; 2363 if (hasServer)2364 msg<<this->getIdServer(i);2365 else2366 msg<<this->getIdServer();2367 2279 if (contextClientTmp->clientRank==0) msg<<*registryOut ; 2368 2280 const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.hpp
r1784 r1848 176 176 void sendFinalizeClient(CContextClient* contextClient, const string& contextClientId); 177 177 178 179 const StdString& getIdServer();180 void setIdServer(const StdString& idServer);181 const StdString& getIdServer(const int srvPoolNb);182 178 std::string getContextId() {return contextId_;} 183 179 … … 303 299 bool finalized; 304 300 int countChildContextFinalized_; //!< Counter of child contexts (for now it is the number of secondary server pools) 305 StdString idServer_;306 301 CGarbageCollector garbageCollector; 307 302 std::list<MPI_Comm> comms; //!< Communicators allocated internally -
XIOS/dev/dev_ym/XIOS_COUPLING/src/object.cpp
r1761 r1848 25 25 26 26 const StdString& CObject::getId(void) const 27 {28 return this->id;29 }30 31 const StdString& CObject::getIdServer()32 {33 return this->id;34 }35 36 const StdString& CObject::getIdServer(int nSrvpool)37 27 { 38 28 return this->id; -
XIOS/dev/dev_ym/XIOS_COUPLING/src/object.hpp
r1761 r1848 17 17 /// Accesseurs /// 18 18 const StdString& getId(void) const; 19 virtual const StdString& getIdServer() ;20 virtual const StdString& getIdServer(int nsrvPool) ;21 19 22 20 virtual StdString dumpClassAttributes(void); -
XIOS/dev/dev_ym/XIOS_COUPLING/src/object_template_impl.hpp
r1784 r1848 205 205 { 206 206 // Account for extra header info 207 minimumSize += CEventClient::headerSize + getId Server().size() + sizeof(size_t);207 minimumSize += CEventClient::headerSize + getId().size() + sizeof(size_t); 208 208 209 209 const std::list<int>& ranks = client->getRanksServerLeader(); … … 241 241 { 242 242 CMessage msg; 243 msg<<this->getIdServer(); // pb with context attribute -> to check : for now seem to be never used for context... 243 msg<<this->getId(); 244 msg << attr.getName(); 245 msg << attr; 246 const std::list<int>& ranks = client->getRanksServerLeader(); 247 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 248 event.push(*itRank,1,msg); 249 client->sendEvent(event); 250 } 251 else client->sendEvent(event); 252 } 253 254 /* specialisation for context, because context Id on client is not the same on server, and no need to transfer context Id */ 255 template <> 256 void CObjectTemplate<CContext>::sendAttributToServer(CAttribute& attr, CContextClient* client) 257 { 258 CEventClient event(getType(),EVENT_ID_SEND_ATTRIBUTE); 259 if (client->isServerLeader()) 260 { 261 CMessage msg; 244 262 msg << attr.getName(); 245 263 msg << attr; … … 296 314 } 297 315 316 /* specialisation for context, because context Id on client is not the same on server and no need to transfer context Id */ 317 template <> 318 void CObjectTemplate<CContext>::recvAttributFromClient(CEventServer& event) 319 { 320 321 CBufferIn* buffer=event.subEvents.begin()->buffer; 322 string attrId; 323 CAttributeMap & attrMap = *CContext::getCurrent(); 324 *buffer>>attrId; 325 CAttribute* attr=attrMap[attrId]; 326 info(50) << "attribut recu " << attrId << " "; 327 if (attr->isEmpty()) info(50) << "--> empty" << endl; 328 else info(50) /*<attr->getValue()*/ << endl; 329 *buffer>>*attr; 330 info(50) << "attribut recu " << attrId << " "; 331 if (attr->isEmpty()) info(50) << "--> empty" << endl; 332 else info(50) /*attr->getValue()*/ << endl; 333 } 334 335 298 336 template <class T> 299 337 bool CObjectTemplate<T>::dispatchEvent(CEventServer& event)
Note: See TracChangeset
for help on using the changeset viewer.