Changeset 1853 for XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.cpp
- Timestamp:
- 01/20/20 17:55:12 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.cpp
r1848 r1853 432 432 server = new CContextServer(this,intraComm_, interCommServer); // check if we need to dupl. intraComm_ ? 433 433 client = new CContextClient(this,intraCommClient,interCommClient); 434 client->setAssociatedServer(server) ; 435 server->setAssociatedClient(client) ; 434 436 435 437 } … … 492 494 client = new CContextClient(this, intraCommClient, interCommClient); 493 495 server = new CContextServer(this, intraCommServer, interCommServer); 494 496 client->setAssociatedServer(server) ; 497 server->setAssociatedClient(client) ; 495 498 } 496 499 … … 526 529 MPI_Comm_dup(intraComm_, &intraCommServer) ; 527 530 528 529 clientPrimServer.push_back(new CContextClient(this, intraCommClient, interCommClient)); 530 serverPrimServer.push_back(new CContextServer(this, intraCommServer, interCommServer)); 531 CContextClient* client = new CContextClient(this, intraCommClient, interCommClient) ; 532 CContextServer* server = new CContextServer(this, intraCommServer, interCommServer) ; 533 client->setAssociatedServer(server) ; 534 server->setAssociatedClient(client) ; 535 clientPrimServer.push_back(client); 536 serverPrimServer.push_back(server); 537 531 538 532 539 } … … 592 599 CContextClient* client = new CContextClient(this, intraCommClient, interCommClient); 593 600 CContextServer* server = new CContextServer(this, intraCommServer, interCommServer); 601 client->setAssociatedServer(server) ; 602 server->setAssociatedClient(client) ; 594 603 } 595 604 else … … 599 608 CContextServer* server = new CContextServer(this, intraCommServer, interCommServer); 600 609 CContextClient* client = new CContextClient(this, intraCommClient, interCommClient); 610 client->setAssociatedServer(server) ; 611 server->setAssociatedClient(client) ; 601 612 } 602 613 MPI_Comm_free(&interComm) ; … … 633 644 if (server->intraCommRank==0) CXios::globalRegistry->mergeRegistry(*registryOut) ; 634 645 635 if ( hasClient && !hasServer)646 if (serviceType_==CServicesManager::CLIENT) 636 647 { 637 648 doPreTimestepOperationsForEnabledReadModeFiles(); // For now we only use server level 1 to read data … … 650 661 info(100)<<"DEBUG: context "<<getId()<<" release client ok"<<endl ; 651 662 } 652 else if ( hasClient && hasServer)663 else if (serviceType_==CServicesManager::GATHERER) 653 664 { 654 665 for (int i = 0; i < clientPrimServer.size(); ++i) … … 672 683 673 684 } 674 else if ( !hasClient && hasServer)685 else if (serviceType_==CServicesManager::IO_SERVER || serviceType_==CServicesManager::OUT_SERVER) 675 686 { 676 687 closeAllFile(); … … 724 735 checkGridEnabledFields(); 725 736 726 setClientServerBuffer(client, ( hasClient && !hasServer));737 setClientServerBuffer(client, (serviceType_==CServicesManager::CLIENT) ) ; 727 738 for (int i = 0; i < clientPrimServer.size(); ++i) 728 739 setClientServerBuffer(clientPrimServer[i], true); 729 740 730 741 731 if ( hasClient)742 if (serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER) 732 743 { 733 if ( hasServer)744 if (serviceType_==CServicesManager::GATHERER) 734 745 { 735 746 for (auto it=clientPrimServer.begin(); it!=clientPrimServer.end();++it) … … 739 750 } 740 751 } 741 else 752 else 742 753 { 743 754 this->sendAllAttributesToServer(client); // Send all attributes of current context to server … … 750 761 sendEnabledFiles(this->enabledWriteModeFiles); 751 762 // We only use server-level 1 (for now) to read data 752 if (!hasServer) 753 sendEnabledFiles(this->enabledReadModeFiles); 763 if (serviceType_==CServicesManager::CLIENT) sendEnabledFiles(this->enabledReadModeFiles); 754 764 755 765 // Then, send all enabled fields 756 766 sendEnabledFieldsInFiles(this->enabledWriteModeFiles); 757 if (!hasServer)758 767 768 if (serviceType_==CServicesManager::CLIENT) sendEnabledFieldsInFiles(this->enabledReadModeFiles); 759 769 760 770 // Then, check whether we have domain_ref, axis_ref or scalar_ref attached to the enabled fields 761 771 // If any, so send them to server 762 sendRefDomainsAxisScalars(this->enabledWriteModeFiles); 763 if (!hasServer)764 772 sendRefDomainsAxisScalars(this->enabledWriteModeFiles); 773 774 if (serviceType_==CServicesManager::CLIENT) sendRefDomainsAxisScalars(this->enabledReadModeFiles); 765 775 766 776 // Check whether enabled fields have grid_ref, if any, send this info to server … … 780 790 // Finally, we send information of grid itself to server 781 791 sendGridEnabledFieldsInFiles(this->enabledWriteModeFiles); 782 if (!hasServer) 783 sendGridEnabledFieldsInFiles(this->enabledReadModeFiles); 792 793 if (serviceType_==CServicesManager::CLIENT) sendGridEnabledFieldsInFiles(this->enabledReadModeFiles); 794 784 795 } 785 796 allProcessed = true; … … 790 801 TRY 791 802 { 792 // Use correct context client to send message 793 // int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 794 int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 795 for (int i = 0; i < nbSrvPools; ++i) 796 { 797 CContextClient* contextClientTmp = (0 != clientPrimServer.size()) ? clientPrimServer[i] : client; 803 804 int nbSrvPools ; 805 if (serviceType_==CServicesManager::CLIENT) nbSrvPools = 1 ; 806 else if (serviceType_==CServicesManager::GATHERER) nbSrvPools = this->clientPrimServer.size() ; 807 else nbSrvPools = 0 ; 808 CContextClient* contextClientTmp ; 809 810 for (int i = 0; i < nbSrvPools; ++i) 811 { 812 if (serviceType_==CServicesManager::CLIENT) contextClientTmp = client ; 813 else if (serviceType_==CServicesManager::GATHERER ) contextClientTmp = clientPrimServer[i] ; 814 798 815 CEventClient event(getType(),EVENT_ID_POST_PROCESS_GLOBAL_ATTRIBUTES); 799 816 … … 844 861 postProcessingGlobalAttributes(); 845 862 846 if ( hasClient) sendPostProcessingGlobalAttributes();863 if (serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER) sendPostProcessingGlobalAttributes(); 847 864 848 865 // There are some processings that should be done after all of above. For example: check mask or index 849 866 this->buildFilterGraphOfEnabledFields(); 850 867 851 if ( hasClient && !hasServer)868 if (serviceType_==CServicesManager::CLIENT) 852 869 { 853 870 buildFilterGraphOfFieldsWithReadAccess(); … … 857 874 checkGridEnabledFields(); 858 875 859 if ( hasClient) this->sendProcessingGridOfEnabledFields();860 if ( hasClient) this->sendCloseDefinition();876 if (serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER) this->sendProcessingGridOfEnabledFields(); 877 if (serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER) this->sendCloseDefinition(); 861 878 862 879 // Nettoyage de l'arborescence 863 if (hasClient) CleanTree(); // Only on client side?? 864 865 if (hasClient) 866 { 867 sendCreateFileHeader(); 868 if (!hasServer) startPrefetchingOfEnabledReadModeFiles(); 869 } 880 if (serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER) CleanTree(); // Only on client side?? 881 882 if (serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER) sendCreateFileHeader(); 883 if (serviceType_==CServicesManager::CLIENT) startPrefetchingOfEnabledReadModeFiles(); 884 870 885 CTimer::get("Context : close definition").suspend() ; 871 886 } … … 1109 1124 const vector<CGrid*> allGrids= CGrid::getAll(); 1110 1125 1111 if (hasClient && !hasServer) 1112 //if (hasClient) 1126 if (serviceType_==CServicesManager::CLIENT) 1113 1127 { 1114 1128 for (unsigned int i = 0; i < allFiles.size(); i++) … … 1229 1243 double eps=std::numeric_limits<double>::epsilon()*10 ; 1230 1244 1231 // If primary server 1232 if (hasServer && hasClient) 1245 if (serviceType_==CServicesManager::GATHERER) 1233 1246 { 1234 1247 std::ofstream ofs(("distribute_file_"+getId()+".dat").c_str(), std::ofstream::out); … … 1310 1323 TRY 1311 1324 { 1312 // If primary server 1313 if (hasServer && hasClient) 1325 if (serviceType_==CServicesManager::GATHERER) 1314 1326 { 1315 1327 int nbPools = clientPrimServer.size(); … … 1502 1514 TRY 1503 1515 { 1504 // Use correct context client to send message 1505 int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 1506 for (int i = 0; i < nbSrvPools; ++i) 1507 { 1508 CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; 1516 int nbSrvPools ; 1517 if (serviceType_==CServicesManager::CLIENT) nbSrvPools = 1 ; 1518 else if (serviceType_==CServicesManager::GATHERER) nbSrvPools = this->clientPrimServer.size() ; 1519 else nbSrvPools = 0 ; 1520 CContextClient* contextClientTmp ; 1521 1522 for (int i = 0; i < nbSrvPools; ++i) 1523 { 1524 if (serviceType_==CServicesManager::CLIENT) contextClientTmp = client ; 1525 else if (serviceType_==CServicesManager::GATHERER ) contextClientTmp = clientPrimServer[i] ; 1509 1526 CEventClient event(getType(),EVENT_ID_CLOSE_DEFINITION); 1510 1527 if (contextClientTmp->isServerLeader()) … … 1534 1551 TRY 1535 1552 { 1536 // Use correct context client to send message 1537 int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 1538 for (int i = 0; i < nbSrvPools; ++i) 1539 { 1540 CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; 1553 int nbSrvPools ; 1554 if (serviceType_==CServicesManager::CLIENT) nbSrvPools = 1 ; 1555 else if (serviceType_==CServicesManager::GATHERER) nbSrvPools = this->clientPrimServer.size() ; 1556 else nbSrvPools = 0 ; 1557 CContextClient* contextClientTmp ; 1558 1559 for (int i = 0; i < nbSrvPools; ++i) 1560 { 1561 if (serviceType_==CServicesManager::CLIENT) contextClientTmp = client ; 1562 else if (serviceType_==CServicesManager::GATHERER ) contextClientTmp = clientPrimServer[i] ; 1541 1563 CEventClient event(getType(),EVENT_ID_UPDATE_CALENDAR); 1542 1564 … … 1544 1566 { 1545 1567 CMessage msg; 1546 if (hasServer) 1547 msg<<step; 1548 else 1549 msg<<step; 1568 msg<<step; 1550 1569 const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 1551 1570 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) … … 1574 1593 buffer>>step; 1575 1594 updateCalendar(step); 1576 if ( hasClient && hasServer)1595 if (serviceType_==CServicesManager::GATHERER) 1577 1596 { 1578 1597 sendUpdateCalendar(step); … … 1585 1604 TRY 1586 1605 { 1587 // Use correct context client to send message 1588 // int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 1589 int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 1606 int nbSrvPools ; 1607 if (serviceType_==CServicesManager::CLIENT) nbSrvPools = 1 ; 1608 else if (serviceType_==CServicesManager::GATHERER) nbSrvPools = this->clientPrimServer.size() ; 1609 else nbSrvPools = 0 ; 1610 CContextClient* contextClientTmp ; 1611 1590 1612 for (int i = 0; i < nbSrvPools; ++i) 1591 1613 { 1592 CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; 1614 if (serviceType_==CServicesManager::CLIENT) contextClientTmp = client ; 1615 else if (serviceType_==CServicesManager::GATHERER ) contextClientTmp = clientPrimServer[i] ; 1593 1616 CEventClient event(getType(),EVENT_ID_CREATE_FILE_HEADER); 1594 1617 … … 1619 1642 TRY 1620 1643 { 1621 if ( !hasClient && hasServer)1644 if (serviceType_==CServicesManager::IO_SERVER || serviceType_==CServicesManager::OUT_SERVER) 1622 1645 createFileHeader(); 1623 1646 } … … 1628 1651 TRY 1629 1652 { 1630 // Use correct context client to send message 1631 int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 1653 int nbSrvPools ; 1654 if (serviceType_==CServicesManager::CLIENT) nbSrvPools = 1 ; 1655 else if (serviceType_==CServicesManager::GATHERER) nbSrvPools = this->clientPrimServer.size() ; 1656 else nbSrvPools = 0 ; 1657 CContextClient* contextClientTmp ; 1658 1632 1659 for (int i = 0; i < nbSrvPools; ++i) 1633 1660 { 1634 CContextClient* contextClientTmp = (0 != clientPrimServer.size()) ? clientPrimServer[i] : client; 1661 if (serviceType_==CServicesManager::CLIENT) contextClientTmp = client ; 1662 else if (serviceType_==CServicesManager::GATHERER ) contextClientTmp = clientPrimServer[i] ; 1663 1635 1664 CEventClient event(getType(),EVENT_ID_PROCESS_GRID_ENABLED_FIELDS); 1636 1665 … … 1661 1690 TRY 1662 1691 { 1663 // Use correct context client to send message 1664 // int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 1665 int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 1692 int nbSrvPools ; 1693 if (serviceType_==CServicesManager::CLIENT) nbSrvPools = 1 ; 1694 else if (serviceType_==CServicesManager::GATHERER) nbSrvPools = this->clientPrimServer.size() ; 1695 else nbSrvPools = 0 ; 1696 CContextClient* contextClientTmp ; 1697 1666 1698 for (int i = 0; i < nbSrvPools; ++i) 1667 1699 { 1668 CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; 1700 if (serviceType_==CServicesManager::CLIENT) contextClientTmp = client ; 1701 else if (serviceType_==CServicesManager::GATHERER ) contextClientTmp = clientPrimServer[i] ; 1669 1702 CEventClient event(getType(),EVENT_ID_POST_PROCESS); 1670 1703 if (contextClientTmp->isServerLeader()) … … 1732 1765 1733 1766 // The timeseries should only be prepared in client 1734 if (hasClient && !hasServer) prepareTimeseries(); 1767 1768 if (serviceType_==CServicesManager::CLIENT) prepareTimeseries(); 1735 1769 1736 1770 //Initialisation du vecteur 'enabledFiles' contenant la liste des fichiers à sortir. … … 1754 1788 // findAllEnabledFieldsInFiles(this->enabledReadModeFiles); 1755 1789 1756 if ( hasClient && !hasServer)1790 if (serviceType_==CServicesManager::CLIENT) 1757 1791 { 1758 1792 initReadFiles(); … … 1768 1802 1769 1803 // Find all fields with read access from the public API 1770 if ( hasClient && !hasServer) findFieldsWithReadAccess();1804 if (serviceType_==CServicesManager::CLIENT) findFieldsWithReadAccess(); 1771 1805 // and solve the all reference for them 1772 if ( hasClient && !hasServer) solveAllRefOfFieldsWithReadAccess();1806 if (serviceType_==CServicesManager::CLIENT) solveAllRefOfFieldsWithReadAccess(); 1773 1807 1774 1808 isPostProcessed = true; … … 1920 1954 TRY 1921 1955 { 1922 if (! hasClient) return;1956 if (!(serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER)) return; 1923 1957 1924 1958 const vector<CAxis*> allAxis = CAxis::getAll(); … … 1940 1974 TRY 1941 1975 { 1942 if (! hasClient) return;1976 if (!(serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER)) return; 1943 1977 1944 1978 const std::vector<CFile*> allFiles = CFile::getAll(); … … 2146 2180 if (prevStep < step) 2147 2181 { 2148 if ( hasClient && !hasServer) // For now we only use server level 1 to read data2182 if (serviceType_==CServicesManager::CLIENT) // For now we only use server level 1 to read data 2149 2183 { 2150 2184 doPreTimestepOperationsForEnabledReadModeFiles(); … … 2158 2192 #endif 2159 2193 2160 if ( hasClient && !hasServer) // For now we only use server level 1 to read data2194 if (serviceType_==CServicesManager::CLIENT) // For now we only use server level 1 to read data 2161 2195 { 2162 2196 doPostTimestepOperationsForEnabledReadModeFiles(); … … 2268 2302 registryOut->hierarchicalGatherRegistry() ; 2269 2303 2270 // Use correct context client to send message 2271 int nbSrvPools = (this->hasServer) ? (this->hasClient ? this->clientPrimServer.size() : 0) : 1; 2304 int nbSrvPools ; 2305 if (serviceType_==CServicesManager::CLIENT) nbSrvPools = 1 ; 2306 else if (serviceType_==CServicesManager::GATHERER) nbSrvPools = this->clientPrimServer.size() ; 2307 else nbSrvPools = 0 ; 2308 CContextClient* contextClientTmp ; 2309 2272 2310 for (int i = 0; i < nbSrvPools; ++i) 2273 2311 { 2274 CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; 2312 if (serviceType_==CServicesManager::CLIENT) contextClientTmp = client ; 2313 else if (serviceType_==CServicesManager::GATHERER ) contextClientTmp = clientPrimServer[i] ; 2314 2275 2315 CEventClient event(CContext::GetType(), CContext::EVENT_ID_SEND_REGISTRY); 2276 2277 2278 2279 2280 2281 2316 if (contextClientTmp->isServerLeader()) 2317 { 2318 CMessage msg ; 2319 if (contextClientTmp->clientRank==0) msg<<*registryOut ; 2320 const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 2321 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 2282 2322 event.push(*itRank,1,msg); 2283 2284 2285 2323 contextClientTmp->sendEvent(event); 2324 } 2325 else contextClientTmp->sendEvent(event); 2286 2326 } 2287 2327 }
Note: See TracChangeset
for help on using the changeset viewer.