- Timestamp:
- 08/25/21 19:31:05 (3 years ago)
- Location:
- XIOS/dev/dev_ym/XIOS_COUPLING/src
- Files:
-
- 2 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/dev_ym/XIOS_COUPLING/src/client.cpp
r2146 r2209 174 174 else CXios::setNotUsingServer() ; 175 175 176 177 CXios::setGlobalRegistry(new CRegistry(clientsComm_)) ;178 176 ///////////////////////////////////////// 179 177 ///////////// PART 3 //////////////////// … … 476 474 if (commRank==0) CXios::getRessourcesManager()->finalize() ; 477 475 478 auto globalRegistry=CXios::getGlobalRegistry() ;479 globalRegistry->hierarchicalGatherRegistry() ;480 481 if (commRank==0)482 {483 info(80)<<"Write data base Registry"<<endl<<globalRegistry->toString()<<endl ;484 globalRegistry->toFile("xios_registry.bin") ;485 }486 delete globalRegistry ;487 488 476 CTimer::get("XIOS init/finalize",false).suspend() ; 489 477 CTimer::get("XIOS").suspend() ; -
XIOS/dev/dev_ym/XIOS_COUPLING/src/cxios.cpp
r2176 r2209 56 56 CContextsManager* CXios::contextsManager_=nullptr ; 57 57 CCouplerManager* CXios::couplerManager_=nullptr ; 58 CRegistryManager* CXios::registryManager_=nullptr ; 58 59 59 60 //! Parse configuration file and create some objects from it … … 217 218 } 218 219 220 void CXios::launchRegistryManager(bool isXiosServer) 221 { 222 registryManager_ = new CRegistryManager(isXiosServer) ; 223 } 224 219 225 void CXios::launchRessourcesManager(bool isXiosServer) 220 226 { … … 243 249 244 250 251 void CXios::finalizeRegistryManager() 252 { 253 delete registryManager_; 254 } 255 245 256 void CXios::finalizeRessourcesManager() 246 257 { -
XIOS/dev/dev_ym/XIOS_COUPLING/src/cxios.hpp
r1878 r2209 10 10 #include "daemons_manager.hpp" 11 11 #include "coupler_manager.hpp" 12 #include "registry_manager.hpp" 12 13 13 14 namespace xios … … 68 69 69 70 71 static CRegistryManager* registryManager_ ; 70 72 static CRessourcesManager* ressourcesManager_ ; 71 73 static CCouplerManager* couplerManager_ ; … … 93 95 static void launchRessourcesManager(bool isXiosServer) ; 94 96 static void launchCouplerManager(bool isXiosServer) ; 97 static void launchRegistryManager(bool isXiosServer) ; 95 98 96 99 static void finalizeServicesManager() ; … … 99 102 static void finalizeRessourcesManager() ; 100 103 static void finalizeCouplerManager() ; 104 static void finalizeRegistryManager() ; 101 105 106 static CRegistryManager* getRegistryManager(void) { return registryManager_ ;} 102 107 static CRessourcesManager* getRessourcesManager(void) { return ressourcesManager_ ;} 103 108 static CCouplerManager* getCouplerManager(void) { return couplerManager_ ;} -
XIOS/dev/dev_ym/XIOS_COUPLING/src/manager/daemons_manager.cpp
r1878 r2209 19 19 MPI_Comm_split(xiosComm,isXiosServer,commRank,&splitComm) ; 20 20 21 CXios::launchRegistryManager(isXiosServer) ; 21 22 CXios::launchRessourcesManager(isXiosServer) ; 22 23 CXios::launchServicesManager(isXiosServer) ; 23 24 CXios::launchContextsManager(isXiosServer) ; 24 25 CXios::launchCouplerManager(isXiosServer) ; 25 26 26 27 if (isXiosServer) CServer::launchServersRessource(splitComm) ; 28 MPI_Barrier(xiosComm) ; 27 29 MPI_Comm_free(&splitComm) ; 28 30 } … … 34 36 CXios::finalizeServicesManager() ; 35 37 CXios::finalizeRessourcesManager() ; 38 CXios::finalizeRegistryManager() ; 36 39 } 37 40 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.cpp
r2199 r2209 428 428 429 429 string contextRegistryId=getId() ; 430 registryIn=new CRegistry( intraComm);430 registryIn=new CRegistry(CXios::getRegistryManager()->getRegistryIn()); 431 431 registryIn->setPath(contextRegistryId) ; 432 432 433 int commRank ;434 MPI_Comm_rank(intraComm_,&commRank) ;435 if (commRank==0) registryIn->fromFile("xios_registry.bin") ;436 registryIn->bcastRegistry() ;437 433 registryOut=new CRegistry(intraComm_) ; 438 434 registryOut->setPath(contextRegistryId) ; … … 465 461 CXios::getContextsManager()->getContextId(getId(), contextId_, intraComm) ; 466 462 467 registryIn=new CRegistry(intraComm); 468 registryIn->setPath(contextId_) ; 469 470 int commRank ; 471 MPI_Comm_rank(intraComm_,&commRank) ; 472 if (commRank==0) registryIn->fromFile("xios_registry.bin") ; 473 474 registryIn->bcastRegistry() ; 475 registryOut=new CRegistry(intraComm) ; 476 registryOut->setPath(contextId_) ; 463 string contextRegistryId=getId() ; 464 registryIn=new CRegistry(CXios::getRegistryManager()->getRegistryIn()); 465 registryIn->setPath(contextRegistryId) ; 466 467 registryOut=new CRegistry(intraComm_) ; 468 registryOut->setPath(contextRegistryId) ; 477 469 478 470 } … … 715 707 { 716 708 registryOut->hierarchicalGatherRegistry() ; 717 if (server->intraCommRank==0) CXios::g lobalRegistry->mergeRegistry(*registryOut) ;709 if (server->intraCommRank==0) CXios::getRegistryManager()->merge(*registryOut) ; 718 710 719 711 if (serviceType_==CServicesManager::CLIENT) … … 1574 1566 return true; 1575 1567 break; 1576 case EVENT_ID_SEND_REGISTRY:1577 recvRegistry(event);1578 return true;1579 break;1580 1568 case EVENT_ID_COUPLER_IN_READY: 1581 1569 recvCouplerInReady(event); … … 2106 2094 CATCH 2107 2095 2108 //! Server side: Receive a message to do some post processing2109 void CContext::recvRegistry(CEventServer& event)2110 TRY2111 {2112 CBufferIn* buffer=event.subEvents.begin()->buffer;2113 getCurrent()->recvRegistry(*buffer);2114 }2115 CATCH2116 2117 void CContext::recvRegistry(CBufferIn& buffer)2118 TRY2119 {2120 if (server->intraCommRank==0)2121 {2122 CRegistry registry(server->intraComm) ;2123 registry.fromBuffer(buffer) ;2124 registryOut->mergeRegistry(registry) ;2125 }2126 }2127 CATCH_DUMP_ATTR2128 2129 void CContext::sendRegistry(void)2130 TRY2131 {2132 registryOut->hierarchicalGatherRegistry() ;2133 2134 int nbSrvPools ;2135 if (serviceType_==CServicesManager::CLIENT) nbSrvPools = 1 ;2136 else if (serviceType_==CServicesManager::GATHERER) nbSrvPools = this->clientPrimServer.size() ;2137 else nbSrvPools = 0 ;2138 CContextClient* contextClientTmp ;2139 2140 for (int i = 0; i < nbSrvPools; ++i)2141 {2142 if (serviceType_==CServicesManager::CLIENT) contextClientTmp = client ;2143 else if (serviceType_==CServicesManager::GATHERER ) contextClientTmp = clientPrimServer[i] ;2144 2145 CEventClient event(CContext::GetType(), CContext::EVENT_ID_SEND_REGISTRY);2146 if (contextClientTmp->isServerLeader())2147 {2148 CMessage msg ;2149 if (contextClientTmp->clientRank==0) msg<<*registryOut ;2150 const std::list<int>& ranks = contextClientTmp->getRanksServerLeader();2151 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank)2152 event.push(*itRank,1,msg);2153 contextClientTmp->sendEvent(event);2154 }2155 else contextClientTmp->sendEvent(event);2156 }2157 }2158 CATCH_DUMP_ATTR2159 2160 2096 2161 2097 void CContext::sendFinalizeClient(CContextClient* contextClient, const string& contextClientId) -
XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.hpp
r2204 r2209 55 55 EVENT_ID_CLOSE_DEFINITION,EVENT_ID_UPDATE_CALENDAR, 56 56 EVENT_ID_CREATE_FILE_HEADER,EVENT_ID_CONTEXT_FINALIZE, 57 EVENT_ID_SEND_REGISTRY,58 57 EVENT_ID_CONTEXT_FINALIZE_CLIENT, 59 58 EVENT_ID_COUPLER_IN_READY, … … 170 169 void sendRefDomainsAxisScalars(const std::vector<CFile*>& activeFiles); 171 170 //!< after be gathered to the root process of the context, merged registry is sent to the root process of the servers 172 void sendRegistry(void) ;173 171 void sendFinalizeClient(CContextClient* contextClient, const string& contextClientId); 174 172 … … 189 187 static void recvSolveInheritanceContext(CEventServer& event); 190 188 void recvSolveInheritanceContext(CBufferIn& buffer); 191 static void recvRegistry(CEventServer& event) ;192 void recvRegistry(CBufferIn& buffer) ; //!< registry is received by the servers193 189 static void recvFinalizeClient(CEventServer& event) ; 194 190 void recvFinalizeClient(CBufferIn& buffer); -
XIOS/dev/dev_ym/XIOS_COUPLING/src/registry.cpp
r1639 r2209 51 51 } 52 52 53 void CRegistry::getKey_(const string& key_, CBaseType& value) 53 void CRegistry::getKey_(const string& key_, CBaseType& value) const 54 54 { 55 55 const string key=path+key_ ; 56 56 size_t size=value.size(); 57 57 58 map<string,pair<size_t,char*> >:: iterator it=registry.find(key) ;58 map<string,pair<size_t,char*> >::const_iterator it=registry.find(key) ; 59 59 60 60 if (it!=registry.end()) … … 258 258 void CRegistry::hierarchicalGatherRegistry(void) 259 259 { 260 hierarchicalGatherRegistry(communicator) ; 260 int color; 261 if (isEmpty()) color=0 ; 262 else color=1 ; 263 int rank ; 264 MPI_Comm_rank(communicator,&rank); 265 if (rank==0) color=1 ; 266 MPI_Comm newComm ; 267 MPI_Comm_split(communicator,color,rank,&newComm) ; 268 if (color==1) hierarchicalGatherRegistry(newComm) ; 269 MPI_Comm_free(&newComm) ; 261 270 } 262 271 -
XIOS/dev/dev_ym/XIOS_COUPLING/src/registry.hpp
r1639 r2209 38 38 39 39 /** retrieve a value from a key */ 40 void getKey(const std::string& key, CBaseType& value) { this->getKey_(key,value); }40 void getKey(const std::string& key, CBaseType& value) const { this->getKey_(key,value); } 41 41 42 42 /** retrieve a value from a key */ 43 43 template<typename T> typename boost::enable_if_c<!boost::is_convertible<T&, CBaseType&>::value>::type 44 getKey(const std::string& key, T& value) { CType_ref<T> valRef(value); this->getKey_(key,valRef); }44 getKey(const std::string& key, T& value) const { CType_ref<T> valRef(value); this->getKey_(key,valRef); } 45 45 46 46 … … 103 103 104 104 /** retrieve a value from a key (internal use)*/ 105 void getKey_(const std::string& key, CBaseType& value) ;105 void getKey_(const std::string& key, CBaseType& value) const ; 106 106 107 107 /** use internally for recursivity */
Note: See TracChangeset
for help on using the changeset viewer.