Changeset 1017
- Timestamp:
- 01/09/17 14:58:44 (6 years ago)
- Location:
- XIOS/trunk/src/node
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/node/field.cpp
r1013 r1017 39 39 , hasTimeCentered(false) 40 40 , wasDataAlreadyReceivedFromServer(false) 41 , isEOF(false) 41 42 { setVirtualVariableGroup(CVariableGroup::create(getId() + "_virtual_variable_group")); } 42 43 … … 52 53 , hasTimeCentered(false) 53 54 , wasDataAlreadyReceivedFromServer(false) 55 , isEOF(false) 54 56 { setVirtualVariableGroup(CVariableGroup::create(getId() + "_virtual_variable_group")); } 55 57 … … 251 253 } 252 254 253 voidCField::sendReadDataRequest(const CDate& tsDataRequested)255 bool CField::sendReadDataRequest(const CDate& tsDataRequested) 254 256 { 255 257 CContext* context = CContext::getCurrent(); … … 258 260 lastDataRequestedFromServer = tsDataRequested; 259 261 260 CEventClient event(getType(), EVENT_ID_READ_DATA); 261 if (client->isServerLeader()) 262 { 263 CMessage msg; 264 msg << getId(); 265 const std::list<int>& ranks = client->getRanksServerLeader(); 266 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 267 event.push(*itRank, 1, msg); 268 client->sendEvent(event); 269 } 270 else client->sendEvent(event); 262 if (!isEOF) // No need to send the request if we already know we are at EOF 263 { 264 CEventClient event(getType(), EVENT_ID_READ_DATA); 265 if (client->isServerLeader()) 266 { 267 CMessage msg; 268 msg << getId(); 269 const std::list<int>& ranks = client->getRanksServerLeader(); 270 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 271 event.push(*itRank, 1, msg); 272 client->sendEvent(event); 273 } 274 else client->sendEvent(event); 275 } 276 else 277 serverSourceFilter->signalEndOfStream(tsDataRequested); 278 279 return !isEOF; 271 280 } 272 281 … … 288 297 info(20) << "lastDataRequestedFromServer + file->output_freq.getValue() : " << lastDataRequestedFromServer + file->output_freq << endl ; 289 298 290 sendReadDataRequest(lastDataRequestedFromServer + file->output_freq); 291 292 dataRequested = true; 299 dataRequested |= sendReadDataRequest(lastDataRequestedFromServer + file->output_freq); 293 300 } 294 301 … … 428 435 std::map<int, CArray<double,1> > data; 429 436 430 bool isEOF = false;431 432 437 for (int i = 0; i < ranks.size(); i++) 433 438 { -
XIOS/trunk/src/node/field.hpp
r1013 r1017 143 143 void recvUpdateData(vector<int>& ranks, vector<CBufferIn*>& buffers); 144 144 void writeField(void); 145 voidsendReadDataRequest(const CDate& tsDataRequested);145 bool sendReadDataRequest(const CDate& tsDataRequested); 146 146 bool sendReadDataRequestIfNeeded(void); 147 147 static void recvReadDataRequest(CEventServer& event);
Note: See TracChangeset
for help on using the changeset viewer.