Changeset 1318 for XIOS/trunk/src
- Timestamp:
- 10/26/17 10:23:17 (7 years ago)
- Location:
- XIOS/trunk/src/node
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/node/context.cpp
r1200 r1318 514 514 } 515 515 516 void CContext:: checkPrefetchingOfEnabledReadModeFiles()516 void CContext::doPostTimestepOperationsForEnabledReadModeFiles() 517 517 { 518 518 int size = enabledReadModeFiles.size(); 519 519 for (int i = 0; i < size; ++i) 520 520 { 521 enabledReadModeFiles[i]-> prefetchEnabledReadModeFieldsIfNeeded();521 enabledReadModeFiles[i]->doPostTimestepOperationsForEnabledReadModeFields(); 522 522 } 523 523 } … … 1210 1210 if (hasClient) 1211 1211 { 1212 checkPrefetchingOfEnabledReadModeFiles();1212 doPostTimestepOperationsForEnabledReadModeFiles(); 1213 1213 garbageCollector.invalidate(calendar->getCurrentDate()); 1214 1214 } -
XIOS/trunk/src/node/context.hpp
r1033 r1318 115 115 void buildFilterGraphOfEnabledFields(); 116 116 void startPrefetchingOfEnabledReadModeFiles(); 117 void checkPrefetchingOfEnabledReadModeFiles();117 void doPostTimestepOperationsForEnabledReadModeFiles(); 118 118 void findFieldsWithReadAccess(void); 119 119 void solveAllRefOfFieldsWithReadAccess(); -
XIOS/trunk/src/node/field.cpp
r1315 r1318 38 38 , hasTimeInstant(false) 39 39 , hasTimeCentered(false) 40 , wasDataRequestedFromServer(false) 40 41 , wasDataAlreadyReceivedFromServer(false) 41 42 , isEOF(false) … … 52 53 , hasTimeInstant(false) 53 54 , hasTimeCentered(false) 55 , wasDataRequestedFromServer(false) 54 56 , wasDataAlreadyReceivedFromServer(false) 55 57 , isEOF(false) … … 261 263 lastDataRequestedFromServer = tsDataRequested; 262 264 263 if (!isEOF) // No need to send the request if we already know we are at EOF 265 // No need to send the request if we are sure that we are already at EOF 266 if (!isEOF || context->getCalendar()->getCurrentDate() <= dateEOF) 264 267 { 265 268 CEventClient event(getType(), EVENT_ID_READ_DATA); … … 277 280 else 278 281 serverSourceFilter->signalEndOfStream(tsDataRequested); 282 283 wasDataRequestedFromServer = true; 279 284 280 285 return !isEOF; … … 433 438 { 434 439 CContext* context = CContext::getCurrent(); 435 int record;436 440 std::map<int, CArray<double,1> > data; 441 const bool wasEOF = isEOF; 437 442 438 443 for (int i = 0; i < ranks.size(); i++) 439 444 { 440 445 int rank = ranks[i]; 446 int record; 441 447 *buffers[i] >> record; 442 448 isEOF = (record == int(-1)); … … 457 463 458 464 if (isEOF) 465 { 466 if (!wasEOF) 467 dateEOF = lastDataReceivedFromServer; 468 459 469 serverSourceFilter->signalEndOfStream(lastDataReceivedFromServer); 470 } 460 471 else 461 472 serverSourceFilter->streamDataFromServer(lastDataReceivedFromServer, data); 473 } 474 475 void CField::checkForLateDataFromServer(void) 476 { 477 CContext* context = CContext::getCurrent(); 478 const CDate& currentDate = context->getCalendar()->getCurrentDate(); 479 480 // Check if data previously requested has been received as expected 481 if (wasDataRequestedFromServer && (!isEOF || context->getCalendar()->getCurrentDate() <= dateEOF)) 482 { 483 CTimer timer("CField::checkForLateDataFromServer"); 484 485 bool isDataLate = !wasDataAlreadyReceivedFromServer || lastDataReceivedFromServer + file->output_freq < currentDate; 486 while (isDataLate && timer.getCumulatedTime() < CXios::recvFieldTimeout) 487 { 488 timer.resume(); 489 490 context->checkBuffersAndListen(); 491 492 timer.suspend(); 493 494 isDataLate = !wasDataAlreadyReceivedFromServer || lastDataReceivedFromServer + file->output_freq < currentDate; 495 } 496 497 if (isDataLate) 498 ERROR("void CField::checkForLateDataFromServer(void)", 499 << "Late data at timestep = " << currentDate); 500 } 462 501 } 463 502 -
XIOS/trunk/src/node/field.hpp
r1286 r1318 150 150 static void recvReadDataReady(CEventServer& event); 151 151 void recvReadDataReady(vector<int> ranks, vector<CBufferIn*> buffers); 152 void checkForLateDataFromServer(void); 152 153 void outputField(CArray<double,3>& fieldOut); 153 154 void outputField(CArray<double,2>& fieldOut); … … 197 198 bool isEOF; 198 199 CDate lastlast_Write_srv, last_Write_srv, last_operation_srv; 199 CDate lastDataRequestedFromServer, lastDataReceivedFromServer ;200 bool wasData AlreadyReceivedFromServer;200 CDate lastDataRequestedFromServer, lastDataReceivedFromServer, dateEOF; 201 bool wasDataRequestedFromServer, wasDataAlreadyReceivedFromServer; 201 202 202 203 map<int,boost::shared_ptr<func::CFunctor> > foperation_srv; -
XIOS/trunk/src/node/file.cpp
r1286 r1318 783 783 784 784 /*! 785 Prefetching the data for enabled fields read from file whose data is out-of-date. 786 */ 787 void CFile::prefetchEnabledReadModeFieldsIfNeeded(void) 785 Do all post timestep operations for enabled fields in read mode: 786 - Prefetch the data read from file when needed 787 - Check that the data excepted from server has been received 788 */ 789 void CFile::doPostTimestepOperationsForEnabledReadModeFields(void) 788 790 { 789 791 if (mode.isEmpty() || mode.getValue() != mode_attr::read) … … 792 794 int size = this->enabledFields.size(); 793 795 for (int i = 0; i < size; ++i) 796 { 797 this->enabledFields[i]->checkForLateDataFromServer(); 794 798 this->enabledFields[i]->sendReadDataRequestIfNeeded(); 799 } 795 800 } 796 801 -
XIOS/trunk/src/node/file.hpp
r1090 r1318 107 107 void buildFilterGraphOfEnabledFields(CGarbageCollector& gc); 108 108 void prefetchEnabledReadModeFields(); 109 void prefetchEnabledReadModeFieldsIfNeeded();109 void doPostTimestepOperationsForEnabledReadModeFields(); 110 110 111 111 // Add component into file
Note: See TracChangeset
for help on using the changeset viewer.