Changeset 1318 for XIOS/dev/XIOS_DEV_CMIP6
- Timestamp:
- 10/26/17 10:23:17 (7 years ago)
- Location:
- XIOS/dev/XIOS_DEV_CMIP6/src/node
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/dev/XIOS_DEV_CMIP6/src/node/context.cpp
r1316 r1318 783 783 } 784 784 785 void CContext:: checkPrefetchingOfEnabledReadModeFiles()785 void CContext::doPostTimestepOperationsForEnabledReadModeFiles() 786 786 { 787 787 int size = enabledReadModeFiles.size(); 788 788 for (int i = 0; i < size; ++i) 789 789 { 790 enabledReadModeFiles[i]-> prefetchEnabledReadModeFieldsIfNeeded();790 enabledReadModeFiles[i]->doPostTimestepOperationsForEnabledReadModeFields(); 791 791 } 792 792 } … … 1709 1709 if (hasClient && !hasServer) // For now we only use server level 1 to read data 1710 1710 { 1711 checkPrefetchingOfEnabledReadModeFiles();1711 doPostTimestepOperationsForEnabledReadModeFiles(); 1712 1712 garbageCollector.invalidate(calendar->getCurrentDate()); 1713 1713 } -
XIOS/dev/XIOS_DEV_CMIP6/src/node/context.hpp
r1239 r1318 121 121 void buildFilterGraphOfEnabledFields(); 122 122 void startPrefetchingOfEnabledReadModeFiles(); 123 void checkPrefetchingOfEnabledReadModeFiles();123 void doPostTimestepOperationsForEnabledReadModeFiles(); 124 124 void findFieldsWithReadAccess(void); 125 125 void solveAllRefOfFieldsWithReadAccess(); -
XIOS/dev/XIOS_DEV_CMIP6/src/node/field.cpp
r1315 r1318 40 40 , hasTimeInstant(false) 41 41 , hasTimeCentered(false) 42 , wasDataRequestedFromServer(false) 42 43 , wasDataAlreadyReceivedFromServer(false) 43 44 , isEOF(false), nstepMaxRead(false) … … 55 56 , hasTimeInstant(false) 56 57 , hasTimeCentered(false) 58 , wasDataRequestedFromServer(false) 57 59 , wasDataAlreadyReceivedFromServer(false) 58 60 , isEOF(false), nstepMaxRead(false) … … 291 293 lastDataRequestedFromServer = tsDataRequested; 292 294 293 if (!isEOF) // No need to send the request if we already know we are at EOF 295 // No need to send the request if we are sure that we are already at EOF 296 if (!isEOF || context->getCalendar()->getCurrentDate() <= dateEOF) 294 297 { 295 298 CEventClient event(getType(), EVENT_ID_READ_DATA); … … 307 310 else 308 311 serverSourceFilter->signalEndOfStream(tsDataRequested); 312 313 wasDataRequestedFromServer = true; 309 314 310 315 return !isEOF; … … 520 525 { 521 526 CContext* context = CContext::getCurrent(); 522 int record;523 527 std::map<int, CArray<double,1> > data; 528 const bool wasEOF = isEOF; 524 529 525 530 for (int i = 0; i < ranks.size(); i++) 526 531 { 527 532 int rank = ranks[i]; 533 int record; 528 534 *buffers[i] >> record; 529 535 isEOF = (record == int(-1)); … … 544 550 545 551 if (isEOF) 552 { 553 if (!wasEOF) 554 dateEOF = lastDataReceivedFromServer; 555 546 556 serverSourceFilter->signalEndOfStream(lastDataReceivedFromServer); 557 } 547 558 else 548 559 serverSourceFilter->streamDataFromServer(lastDataReceivedFromServer, data); 560 } 561 562 void CField::checkForLateDataFromServer(void) 563 { 564 CContext* context = CContext::getCurrent(); 565 const CDate& currentDate = context->getCalendar()->getCurrentDate(); 566 567 // Check if data previously requested has been received as expected 568 if (wasDataRequestedFromServer && (!isEOF || context->getCalendar()->getCurrentDate() <= dateEOF)) 569 { 570 CTimer timer("CField::checkForLateDataFromServer"); 571 572 bool isDataLate = !wasDataAlreadyReceivedFromServer || lastDataReceivedFromServer + file->output_freq < currentDate; 573 while (isDataLate && timer.getCumulatedTime() < CXios::recvFieldTimeout) 574 { 575 timer.resume(); 576 577 context->checkBuffersAndListen(); 578 579 timer.suspend(); 580 581 isDataLate = !wasDataAlreadyReceivedFromServer || lastDataReceivedFromServer + file->output_freq < currentDate; 582 } 583 584 if (isDataLate) 585 ERROR("void CField::checkForLateDataFromServer(void)", 586 << "Late data at timestep = " << currentDate); 587 } 549 588 } 550 589 -
XIOS/dev/XIOS_DEV_CMIP6/src/node/field.hpp
r1294 r1318 172 172 static void recvReadDataReady(CEventServer& event); 173 173 void recvReadDataReady(vector<int> ranks, vector<CBufferIn*> buffers); 174 void checkForLateDataFromServer(void); 174 175 void outputField(CArray<double,3>& fieldOut); 175 176 void outputField(CArray<double,2>& fieldOut); … … 217 218 bool isEOF; 218 219 CDate lastlast_Write_srv, last_Write_srv, last_operation_srv; 219 CDate lastDataRequestedFromServer, lastDataReceivedFromServer ;220 bool wasData AlreadyReceivedFromServer;220 CDate lastDataRequestedFromServer, lastDataReceivedFromServer, dateEOF; 221 bool wasDataRequestedFromServer, wasDataAlreadyReceivedFromServer; 221 222 222 223 map<int,boost::shared_ptr<func::CFunctor> > foperation_srv; -
XIOS/dev/XIOS_DEV_CMIP6/src/node/file.cpp
r1316 r1318 867 867 868 868 /*! 869 Prefetching the data for enabled fields read from file whose data is out-of-date. 870 */ 871 void CFile::prefetchEnabledReadModeFieldsIfNeeded(void) 869 Do all post timestep operations for enabled fields in read mode: 870 - Prefetch the data read from file when needed 871 - Check that the data excepted from server has been received 872 */ 873 void CFile::doPostTimestepOperationsForEnabledReadModeFields(void) 872 874 { 873 875 if (mode.isEmpty() || mode.getValue() != mode_attr::read) … … 876 878 int size = this->enabledFields.size(); 877 879 for (int i = 0; i < size; ++i) 880 { 881 this->enabledFields[i]->checkForLateDataFromServer(); 878 882 this->enabledFields[i]->sendReadDataRequestIfNeeded(); 883 } 879 884 } 880 885 -
XIOS/dev/XIOS_DEV_CMIP6/src/node/file.hpp
r1239 r1318 111 111 void buildFilterGraphOfEnabledFields(CGarbageCollector& gc); 112 112 void prefetchEnabledReadModeFields(); 113 void prefetchEnabledReadModeFieldsIfNeeded();113 void doPostTimestepOperationsForEnabledReadModeFields(); 114 114 115 115 void solveAllRefOfEnabledFieldsAndTransform(bool sendToServer);
Note: See TracChangeset
for help on using the changeset viewer.