Ignore:
Timestamp:
12/05/16 17:47:54 (7 years ago)
Author:
oabramkina
Message:

First working version with compression by secondary servers.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_olga/src/node/context.cpp

    r992 r1009  
    2727      , calendar(), hasClient(false), hasServer(false) 
    2828      , isPostProcessed(false), finalized(false) 
    29       , idServer_(), client(0), server(0), clientPrimServer(0), serverPrimServer(0) 
     29      , idServer_(), client(0), server(0) 
     30//        , clientPrimServer(0), serverPrimServer(0) 
    3031   { /* Ne rien faire de plus */ } 
    3132 
     
    3435      , calendar(), hasClient(false), hasServer(false) 
    3536      , isPostProcessed(false), finalized(false) 
    36       , idServer_(), client(0), server(0), clientPrimServer(0), serverPrimServer(0) 
     37      , idServer_(), client(0), server(0) 
     38//        , clientPrimServer(0), serverPrimServer(0) 
    3739   { /* Ne rien faire de plus */ } 
    3840 
     
    4143     delete client; 
    4244     delete server; 
    43      delete clientPrimServer; 
    44      delete serverPrimServer; 
     45//     delete clientPrimServer; 
     46//     delete serverPrimServer; 
    4547   } 
    4648 
     
    252254     else                         // initClient is called by primary server pool 
    253255     { 
    254        clientPrimServer = new CContextClient(this, intraComm, interComm); 
    255        serverPrimServer = new CContextServer(this, 1, intraComm, interComm);  // just some int parameter to distinguish server from serverPrimServer on server1 
     256//       clientPrimServer = new CContextClient(this, intraComm, interComm); 
     257//       serverPrimServer = new CContextServer(this, 1, intraComm, interComm);  // just some int parameter to distinguish server from serverPrimServer on server1 
     258       clientPrimServer.push_back(new CContextClient(this, intraComm, interComm)); 
     259       serverPrimServer.push_back(new CContextServer(this, intraComm, interComm)); 
    256260     } 
    257261 
     
    320324     if (hasClient && hasServer) 
    321325     { 
    322        if (clientPrimServer->isServerLeader()) 
    323        { 
    324          const std::list<int>& ranks = clientPrimServer->getRanksServerLeader(); 
    325          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    326            if (!bufferSize.count(*itRank)) bufferSize[*itRank] = maxEventSize[*itRank] = minBufferSize; 
    327        } 
    328        clientPrimServer->setBufferSize(bufferSize, maxEventSize); 
    329      } 
    330  
     326       for (int i = 0; i < clientPrimServer.size(); ++i) 
     327       { 
     328         if (clientPrimServer[i]->isServerLeader()) 
     329         { 
     330           const std::list<int>& ranks = clientPrimServer[i]->getRanksServerLeader(); 
     331           for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     332             if (!bufferSize.count(*itRank)) bufferSize[*itRank] = maxEventSize[*itRank] = minBufferSize; 
     333         } 
     334         clientPrimServer[i]->setBufferSize(bufferSize, maxEventSize); 
     335       } 
     336     } 
    331337   } 
    332338 
     
    377383     { 
    378384       bool serverFinished = server->eventLoop(); 
    379        bool serverPrimFinished = serverPrimServer->eventLoop(); 
     385       bool serverPrimFinished = true; 
     386       for (int i = 0; i < serverPrimServer.size(); ++i) 
     387       { 
     388         serverPrimFinished *= serverPrimServer[i]->eventLoop(); 
     389       } 
    380390       return ( serverFinished && serverPrimFinished); 
    381391     } 
     
    397407     { 
    398408       client->checkBuffers(); 
    399        clientPrimServer->checkBuffers(); 
     409       for (int i = 0; i < clientPrimServer.size(); ++i) 
     410         clientPrimServer[i]->checkBuffers(); 
    400411       bool serverFinished = server->eventLoop(); 
    401        bool serverPrimFinished = serverPrimServer->eventLoop(); 
     412       bool serverPrimFinished = true; 
     413       for (int i = 0; i < serverPrimServer.size(); ++i) 
     414       { 
     415         serverPrimFinished *= serverPrimServer[i]->eventLoop(); 
     416       } 
    402417       return ( serverFinished && serverPrimFinished); 
    403418     } 
     
    412427   void CContext::finalize(void) 
    413428   { 
    414       if (!finalized) 
    415       { 
    416         finalized = true; 
     429     if (!finalized) 
     430     { 
     431       finalized = true; 
    417432//        if (hasClient) sendRegistry() ; 
    418433 
    419 /*        if (CXios::serverLevel == 0) 
    420         { 
    421           client->finalize(); 
    422           while (!server->hasFinished()) 
    423           { 
    424             server->eventLoop(); 
    425           } 
    426         } 
    427         else if (CXios::serverLevel == 1) 
    428         { 
    429           clientPrimServer->finalize(); 
    430           while (!serverPrimServer->hasFinished()) 
    431           { 
    432             serverPrimServer->eventLoop(); 
    433           } 
    434           client->finalize(); 
    435           while (!server->hasFinished()) 
    436           { 
    437             server->eventLoop(); 
    438           } 
    439         } 
    440         else if (CXios::serverLevel == 2) 
    441         { 
    442           client->finalize(); 
    443           while (!server->hasFinished()) 
    444           { 
    445             server->eventLoop(); 
    446           } 
    447         }*/ 
    448  
    449         if ((hasClient) && (hasServer)) 
    450         { 
    451           clientPrimServer->finalize(); 
    452           while (!serverPrimServer->hasFinished()) 
    453           { 
    454             serverPrimServer->eventLoop(); 
    455             CServer::eventScheduler->checkEvent() ; 
    456           } 
    457         } 
    458  
    459         client->finalize(); 
    460         while (!server->hasFinished()) 
    461         { 
    462           server->eventLoop(); 
    463         } 
    464  
    465  
    466         if (hasServer) 
    467         { 
    468           closeAllFile(); 
    469           registryOut->hierarchicalGatherRegistry() ; 
    470           if (server->intraCommRank==0) CXios::globalRegistry->mergeRegistry(*registryOut) ; 
    471         } 
    472  
    473         for (std::list<MPI_Comm>::iterator it = comms.begin(); it != comms.end(); ++it) 
    474           MPI_Comm_free(&(*it)); 
    475         comms.clear(); 
     434       if ((hasClient) && (hasServer)) 
     435       { 
     436         for (int i = 0; i < clientPrimServer.size(); ++i) 
     437           clientPrimServer[i]->finalize(); 
     438 
     439         for (int i = 0; i < serverPrimServer.size(); ++i) 
     440         { 
     441           while (!serverPrimServer[i]->hasFinished()) 
     442           { 
     443             serverPrimServer[i]->eventLoop(); 
     444             CServer::eventScheduler->checkEvent() ; 
     445           } 
     446         } 
     447       } 
     448 
     449       client->finalize(); 
     450       while (!server->hasFinished()) 
     451       { 
     452         server->eventLoop(); 
     453       } 
     454 
     455       if (hasServer) 
     456       { 
     457         closeAllFile(); 
     458         registryOut->hierarchicalGatherRegistry() ; 
     459         if (server->intraCommRank==0) CXios::globalRegistry->mergeRegistry(*registryOut) ; 
     460       } 
     461 
     462       for (std::vector<CContextClient*>::iterator it = clientPrimServer.begin(); it != clientPrimServer.end(); it++) 
     463         delete *it; 
     464 
     465       for (std::vector<CContextServer*>::iterator it = serverPrimServer.begin(); it != serverPrimServer.end(); it++) 
     466         delete *it; 
     467 
     468       for (std::list<MPI_Comm>::iterator it = comms.begin(); it != comms.end(); ++it) 
     469         MPI_Comm_free(&(*it)); 
     470       comms.clear(); 
     471 
     472 
    476473      } 
    477474   } 
     
    508505 
    509506      // We have enough information to send to server 
    510       // First of all, send all enabled files 
     507      if (!hasServer) 
     508      { 
     509        // First of all, send all enabled files 
    511510       sendEnabledFiles(); 
    512  
    513       // Then, send all enabled fields 
     511       // Then, send all enabled fields 
    514512       sendEnabledFields(); 
     513      } 
     514      else 
     515      { 
     516        sendEnabledFiles(clientPrimServer.size()); 
     517        sendEnabledFields(clientPrimServer.size()); 
     518      } 
    515519 
    516520      // At last, we have all info of domain and axis, then send them 
    517521       sendRefDomainsAxis(); 
    518  
    519522      // After that, send all grid (if any) 
    520523       sendRefGrid(); 
    521  
    522524       // We have a xml tree on the server side and now, it should be also processed 
    523525       sendPostProcessing(); 
     
    539541      this->solveAllRefOfEnabledFields(true); 
    540542    } 
    541  
    542  
    543543 
    544544//    // Now tell server that it can process all messages from client 
     
    769769   { 
    770770     // Use correct context client to send message 
    771      CContextClient* contextClientTmp = (0 != clientPrimServer) ? clientPrimServer : client; 
    772      CEventClient event(getType(),EVENT_ID_CLOSE_DEFINITION); 
    773  
    774      if (contextClientTmp->isServerLeader()) 
    775      { 
    776        CMessage msg; 
    777        msg<<this->getIdServer(); 
    778        const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
    779        for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    780          event.push(*itRank,1,msg); 
    781        contextClientTmp->sendEvent(event); 
    782      } 
    783      else contextClientTmp->sendEvent(event); 
    784  
    785      // if (!hasServer) 
    786      // { 
    787      //   if (client->isServerLeader()) 
    788      //   { 
    789      //     CMessage msg; 
    790      //     msg<<this->getIdServer(); 
    791      //     const std::list<int>& ranks = client->getRanksServerLeader(); 
    792      //     for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    793      //       event.push(*itRank,1,msg); 
    794      //     client->sendEvent(event); 
    795      //   } 
    796      //   else client->sendEvent(event); 
    797      // } 
    798      // else 
    799      // { 
    800      //   if (clientPrimServer->isServerLeader()) 
    801      //   { 
    802      //     CMessage msg; 
    803      //     msg<<this->getIdServer(); 
    804      //     const std::list<int>& ranks = clientPrimServer->getRanksServerLeader(); 
    805      //     for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    806      //       event.push(*itRank,1,msg); 
    807      //     clientPrimServer->sendEvent(event); 
    808      //   } 
    809      //   else clientPrimServer->sendEvent(event); 
    810  
    811      // } 
     771//     CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[0] : client; 
     772     int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     773     for (int i = 0; i < nbSrvPools; ++i) 
     774     { 
     775       CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; 
     776       CEventClient event(getType(),EVENT_ID_CLOSE_DEFINITION); 
     777       if (contextClientTmp->isServerLeader()) 
     778       { 
     779         CMessage msg; 
     780         if (hasServer) 
     781           msg<<this->getIdServer(i); 
     782         else 
     783           msg<<this->getIdServer(); 
     784         const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
     785         for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     786           event.push(*itRank,1,msg); 
     787         contextClientTmp->sendEvent(event); 
     788       } 
     789       else contextClientTmp->sendEvent(event); 
     790     } 
    812791   } 
    813792 
     
    829808   { 
    830809     // Use correct context client to send message 
    831      CContextClient* contextClientTmp = (0 != clientPrimServer) ? clientPrimServer : client; 
    832      CEventClient event(getType(),EVENT_ID_UPDATE_CALENDAR); 
    833  
    834        if (contextClientTmp->isServerLeader()) 
    835        { 
    836          CMessage msg; 
    837          msg<<this->getIdServer()<<step; 
    838          const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
    839          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    840            event.push(*itRank,1,msg); 
    841          contextClientTmp->sendEvent(event); 
    842        } 
    843        else contextClientTmp->sendEvent(event); 
     810//     CContextClient* contextClientTmp = (0 != clientPrimServer) ? clientPrimServer : client; 
     811     int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     812     for (int i = 0; i < nbSrvPools; ++i) 
     813     { 
     814       CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; 
     815       CEventClient event(getType(),EVENT_ID_UPDATE_CALENDAR); 
     816 
     817         if (contextClientTmp->isServerLeader()) 
     818         { 
     819           CMessage msg; 
     820           if (hasServer) 
     821             msg<<this->getIdServer(i)<<step; 
     822           else 
     823             msg<<this->getIdServer()<<step; 
     824           const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
     825           for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     826             event.push(*itRank,1,msg); 
     827           contextClientTmp->sendEvent(event); 
     828         } 
     829         else contextClientTmp->sendEvent(event); 
     830     } 
    844831 
    845832     // if (!hasServer) 
     
    896883   { 
    897884     // Use correct context client to send message 
    898      CContextClient* contextClientTmp = (0 != clientPrimServer) ? clientPrimServer : client; 
    899      CEventClient event(getType(),EVENT_ID_CREATE_FILE_HEADER); 
    900  
    901      if (contextClientTmp->isServerLeader()) 
    902      { 
    903        CMessage msg; 
    904        msg<<this->getIdServer(); 
    905        const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
    906        for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    907          event.push(*itRank,1,msg) ; 
    908        contextClientTmp->sendEvent(event); 
    909      } 
    910      else contextClientTmp->sendEvent(event); 
    911  
     885//     CContextClient* contextClientTmp = (0 != clientPrimServer) ? clientPrimServer : client; 
     886     int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     887     for (int i = 0; i < nbSrvPools; ++i) 
     888     { 
     889       CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; 
     890       CEventClient event(getType(),EVENT_ID_CREATE_FILE_HEADER); 
     891 
     892       if (contextClientTmp->isServerLeader()) 
     893       { 
     894         CMessage msg; 
     895         if (hasServer) 
     896           msg<<this->getIdServer(i); 
     897         else 
     898           msg<<this->getIdServer(); 
     899         const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
     900         for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     901           event.push(*itRank,1,msg) ; 
     902         contextClientTmp->sendEvent(event); 
     903       } 
     904       else contextClientTmp->sendEvent(event); 
     905     } 
    912906     // if (!hasServer) 
    913907     // { 
     
    964958   { 
    965959      // Use correct context client to send message 
    966      CContextClient* contextClientTmp = (0 != clientPrimServer) ? clientPrimServer : client; 
    967      CEventClient event(getType(),EVENT_ID_POST_PROCESS); 
    968  
    969      if (contextClientTmp->isServerLeader()) 
    970      { 
    971        CMessage msg; 
    972        msg<<this->getIdServer(); 
    973        const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
    974        for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     960//     CContextClient* contextClientTmp = (0 != clientPrimServer) ? clientPrimServer : client; 
     961     int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     962     for (int i = 0; i < nbSrvPools; ++i) 
     963     { 
     964       CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; 
     965       CEventClient event(getType(),EVENT_ID_POST_PROCESS); 
     966       if (contextClientTmp->isServerLeader()) 
     967       { 
     968         CMessage msg; 
     969         if (hasServer) 
     970           msg<<this->getIdServer(i); 
     971         else 
     972           msg<<this->getIdServer(); 
     973         const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
     974         for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    975975         event.push(*itRank,1,msg); 
    976        contextClientTmp->sendEvent(event); 
    977      } 
    978      else contextClientTmp->sendEvent(event); 
     976         contextClientTmp->sendEvent(event); 
     977       } 
     978       else contextClientTmp->sendEvent(event); 
     979     } 
    979980 
    980981     // if (hasClient) 
     
    10381039   } 
    10391040 
     1041   const StdString& CContext::getIdServer(const int i) 
     1042   { 
     1043     idServer_ = this->getId(); 
     1044     idServer_ += "_server_"; 
     1045     idServer_ += boost::lexical_cast<string>(i); 
     1046     return idServer_; 
     1047   } 
     1048 
     1049 
    10401050   /*! 
    10411051   \brief Do some simple post processings after parsing xml file 
     
    11921202     StdString fileDefRoot("file_definition"); 
    11931203     CFileGroup* cfgrpPtr = CFileGroup::get(fileDefRoot); 
    1194  
    11951204     for (int i = 0; i < size; ++i) 
    11961205     { 
     
    12011210   } 
    12021211 
     1212   //! Client side: Send infomation of active files (files are enabled to write out) 
     1213   void CContext::sendEnabledFiles(const int nbPools) 
     1214   { 
     1215     int size = this->enabledFiles.size(); 
     1216 
     1217     // In a context, each type has a root definition, e.g: axis, domain, field. 
     1218     // Every object must be a child of one of these root definition. In this case 
     1219     // all new file objects created on server must be children of the root "file_definition" 
     1220     StdString fileDefRoot("file_definition"); 
     1221     CFileGroup* cfgrpPtr = CFileGroup::get(fileDefRoot); 
     1222 
     1223     { 
     1224       for (int i = 0; i < size; ++i) 
     1225       { 
     1226         int srvId = i % nbPools; 
     1227         cfgrpPtr->sendCreateChild(this->enabledFiles[i]->getId(), srvId); 
     1228         this->enabledFiles[i]->sendAllAttributesToServer(srvId); 
     1229         this->enabledFiles[i]->sendAddAllVariables(srvId); 
     1230       } 
     1231     } 
     1232   } 
     1233 
    12031234   //! Client side: Send information of active fields (ones are written onto files) 
    12041235   void CContext::sendEnabledFields() 
     
    12081239     { 
    12091240       this->enabledFiles[i]->sendEnabledFields(); 
     1241     } 
     1242   } 
     1243 
     1244   void CContext::sendEnabledFields(const int nbPools) 
     1245   { 
     1246     int size = this->enabledFiles.size(); 
     1247     for (int i = 0; i < size; ++i) 
     1248     { 
     1249       int srvId = i % nbPools; 
     1250       this->enabledFiles[i]->sendEnabledFields(srvId); 
    12101251     } 
    12111252   } 
     
    13201361   //! Client side: Send information of reference domain and axis of active fields 
    13211362   void CContext::sendRefDomainsAxis() 
     1363   { 
     1364     std::set<StdString> domainIds, axisIds, scalarIds; 
     1365 
     1366     // Find all reference domain and axis of all active fields 
     1367     int numEnabledFiles = this->enabledFiles.size(); 
     1368     for (int i = 0; i < numEnabledFiles; ++i) 
     1369     { 
     1370       std::vector<CField*> enabledFields = this->enabledFiles[i]->getEnabledFields(); 
     1371       int numEnabledFields = enabledFields.size(); 
     1372       for (int j = 0; j < numEnabledFields; ++j) 
     1373       { 
     1374         const std::vector<StdString>& prDomAxisScalarId = enabledFields[j]->getRefDomainAxisIds(); 
     1375         if ("" != prDomAxisScalarId[0]) domainIds.insert(prDomAxisScalarId[0]); 
     1376         if ("" != prDomAxisScalarId[1]) axisIds.insert(prDomAxisScalarId[1]); 
     1377         if ("" != prDomAxisScalarId[2]) scalarIds.insert(prDomAxisScalarId[2]); 
     1378       } 
     1379     } 
     1380 
     1381     // Create all reference axis on server side 
     1382     std::set<StdString>::iterator itDom, itAxis, itScalar; 
     1383     std::set<StdString>::const_iterator itE; 
     1384 
     1385     StdString scalarDefRoot("scalar_definition"); 
     1386     CScalarGroup* scalarPtr = CScalarGroup::get(scalarDefRoot); 
     1387     itE = scalarIds.end(); 
     1388     for (itScalar = scalarIds.begin(); itScalar != itE; ++itScalar) 
     1389     { 
     1390       if (!itScalar->empty()) 
     1391       { 
     1392         scalarPtr->sendCreateChild(*itScalar); 
     1393         CScalar::get(*itScalar)->sendAllAttributesToServer(); 
     1394       } 
     1395     } 
     1396 
     1397     StdString axiDefRoot("axis_definition"); 
     1398     CAxisGroup* axisPtr = CAxisGroup::get(axiDefRoot); 
     1399     itE = axisIds.end(); 
     1400     for (itAxis = axisIds.begin(); itAxis != itE; ++itAxis) 
     1401     { 
     1402       if (!itAxis->empty()) 
     1403       { 
     1404         axisPtr->sendCreateChild(*itAxis); 
     1405         CAxis::get(*itAxis)->sendAllAttributesToServer(); 
     1406       } 
     1407     } 
     1408 
     1409     // Create all reference domains on server side 
     1410     StdString domDefRoot("domain_definition"); 
     1411     CDomainGroup* domPtr = CDomainGroup::get(domDefRoot); 
     1412     itE = domainIds.end(); 
     1413     for (itDom = domainIds.begin(); itDom != itE; ++itDom) 
     1414     { 
     1415       if (!itDom->empty()) { 
     1416          domPtr->sendCreateChild(*itDom); 
     1417          CDomain::get(*itDom)->sendAllAttributesToServer(); 
     1418       } 
     1419     } 
     1420   } 
     1421 
     1422   //! Client side: Send information of reference domain and axis of active fields 
     1423   void CContext::sendRefDomainsAxis(const int nbPools) 
    13221424   { 
    13231425     std::set<StdString> domainIds, axisIds, scalarIds; 
     
    14661568    registryOut->hierarchicalGatherRegistry() ; 
    14671569 
    1468           // Use correct context client to send message 
    1469      CContextClient* contextClientTmp = (0 != clientPrimServer) ? clientPrimServer : client; 
    1470     CEventClient event(CContext::GetType(), CContext::EVENT_ID_SEND_REGISTRY); 
    1471           if (contextClientTmp->isServerLeader()) 
    1472       { 
    1473          CMessage msg ; 
    1474          msg<<this->getIdServer(); 
    1475          if (contextClientTmp->clientRank==0) msg<<*registryOut ; 
    1476          const std::list<int>& ranks = client->getRanksServerLeader(); 
    1477          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    1478            event.push(*itRank,1,msg); 
    1479          contextClientTmp->sendEvent(event); 
    1480        } 
    1481        else contextClientTmp->sendEvent(event); 
     1570    // Use correct context client to send message 
     1571//    CContextClient* contextClientTmp = (0 != clientPrimServer) ? clientPrimServer : client; 
     1572    int nbSrvPools = (hasServer) ? clientPrimServer.size() : 1; 
     1573    for (int i = 0; i < nbSrvPools; ++i) 
     1574    { 
     1575      CContextClient* contextClientTmp = (hasServer) ? clientPrimServer[i] : client; 
     1576      CEventClient event(CContext::GetType(), CContext::EVENT_ID_SEND_REGISTRY); 
     1577            if (contextClientTmp->isServerLeader()) 
     1578        { 
     1579           CMessage msg ; 
     1580           if (hasServer) 
     1581             msg<<this->getIdServer(i); 
     1582           else 
     1583             msg<<this->getIdServer(); 
     1584           if (contextClientTmp->clientRank==0) msg<<*registryOut ; 
     1585           const std::list<int>& ranks = client->getRanksServerLeader(); 
     1586           for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     1587             event.push(*itRank,1,msg); 
     1588           contextClientTmp->sendEvent(event); 
     1589         } 
     1590         else contextClientTmp->sendEvent(event); 
     1591    } 
    14821592 
    14831593    // if (!hasServer) 
Note: See TracChangeset for help on using the changeset viewer.