Ignore:
Timestamp:
11/24/17 15:13:47 (6 years ago)
Author:
oabramkina
Message:

In addition to r1294: all domain/axis attributes are only sent to secondary-server pools that need them (and not to all pools).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/XIOS_DEV_CMIP6/src/node/domain.cpp

    r1337 r1345  
    3333      , lonvalue(), latvalue(), bounds_lonvalue(), bounds_latvalue() 
    3434      , globalLocalIndexMap_(), computedWrittenIndex_(false) 
     35          , clients() 
    3536   { 
    3637   } 
     
    4445      , lonvalue(), latvalue(), bounds_lonvalue(), bounds_latvalue() 
    4546      , globalLocalIndexMap_(), computedWrittenIndex_(false) 
     47          , clients() 
    4648   { 
    4749    } 
     
    20652067  { 
    20662068    int ns, n, i, j, ind, nv, idx; 
    2067     CContext* context = CContext::getCurrent(); 
    2068  
    2069     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    2070     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    2071     for (int p = 0; p < nbSrvPools; ++p) 
     2069    std::set<CContextClient*>::iterator it; 
     2070    for (it=clients.begin(); it!=clients.end(); ++it) 
    20722071    { 
    2073       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
     2072      CContextClient* client = *it; 
     2073 
    20742074      int serverSize = client->serverSize; 
    20752075      CEventClient eventIndex(getType(), EVENT_ID_INDEX); 
     
    21152115  void CDomain::sendDistributionAttributes(void) 
    21162116  { 
    2117     CContext* context = CContext::getCurrent(); 
    2118      // Use correct context client to send message 
    2119     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    2120     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    2121     for (int i = 0; i < nbSrvPools; ++i) 
     2117    std::set<CContextClient*>::iterator it; 
     2118    for (it=clients.begin(); it!=clients.end(); ++it) 
    21222119    { 
    2123       CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] 
    2124                                                                          : context->client;     
    2125       int nbServer = contextClientTmp->serverSize; 
     2120      CContextClient* client = *it; 
     2121      int nbServer = client->serverSize; 
    21262122      std::vector<int> nGlobDomain(2); 
    21272123      nGlobDomain[0] = this->ni_glo; 
     
    21362132 
    21372133      CEventClient event(getType(),EVENT_ID_SERVER_ATTRIBUT); 
    2138       if (contextClientTmp->isServerLeader()) 
     2134      if (client->isServerLeader()) 
    21392135      { 
    21402136        std::list<CMessage> msgs; 
    21412137 
    2142         const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
     2138        const std::list<int>& ranks = client->getRanksServerLeader(); 
    21432139        for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    21442140        { 
     
    21582154          event.push(*itRank,1,msg); 
    21592155        } 
    2160         contextClientTmp->sendEvent(event); 
    2161       } 
    2162       else contextClientTmp->sendEvent(event); 
     2156        client->sendEvent(event); 
     2157      } 
     2158      else client->sendEvent(event); 
    21632159    } 
    21642160  } 
     
    21702166  { 
    21712167    int ns, n, i, j, ind, nv, idx; 
    2172     CContext* context = CContext::getCurrent(); 
    2173  
    2174     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    2175     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    2176     for (int p = 0; p < nbSrvPools; ++p) 
     2168    std::set<CContextClient*>::iterator it; 
     2169    for (it=clients.begin(); it!=clients.end(); ++it) 
    21772170    { 
    2178       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
     2171      CContextClient* client = *it; 
    21792172      int serverSize = client->serverSize; 
    21802173 
     
    22192212 
    22202213    int ns, n, i, j, ind, nv, idx; 
    2221     CContext* context = CContext::getCurrent(); 
    2222  
    2223     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    2224     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    2225     for (int p = 0; p < nbSrvPools; ++p) 
     2214    std::set<CContextClient*>::iterator it; 
     2215 
     2216    for (it=clients.begin(); it!=clients.end(); ++it) 
    22262217    { 
    2227       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
     2218      CContextClient* client = *it; 
    22282219      int serverSize = client->serverSize; 
    22292220 
     
    22712262 
    22722263    int ns, n, i, j, ind, nv, idx; 
    2273     CContext* context = CContext::getCurrent(); 
    2274  
    2275     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    2276     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    2277     for (int p = 0; p < nbSrvPools; ++p) 
     2264    std::set<CContextClient*>::iterator it; 
     2265    for (it=clients.begin(); it!=clients.end(); ++it) 
    22782266    { 
    2279       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
     2267      CContextClient* client = *it; 
    22802268      int serverSize = client->serverSize; 
    22812269 
     
    23682356  { 
    23692357    int ns, n, i, j, ind, nv, idx; 
    2370     CContext* context = CContext::getCurrent(); 
    2371  
    2372     // int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
    2373     int nbSrvPools = (context->hasServer) ? (context->hasClient ? context->clientPrimServer.size() : 0) : 1; 
    2374     for (int p = 0; p < nbSrvPools; ++p) 
     2358    std::set<CContextClient*>::iterator it; 
     2359    for (it=clients.begin(); it!=clients.end(); ++it) 
    23752360    { 
    2376       CContextClient* client = (0 != context->clientPrimServer.size()) ? context->clientPrimServer[p] : context->client; 
     2361      CContextClient* client = *it; 
     2362 
    23772363      int serverSize = client->serverSize; 
    23782364 
     
    31283114  } 
    31293115 
     3116  void CDomain::setContextClient(CContextClient* contextClient) 
     3117  { 
     3118    clients.insert(contextClient); 
     3119  } 
     3120 
    31303121  /*! 
    31313122    Parse children nodes of a domain in xml file. 
Note: See TracChangeset for help on using the changeset viewer.