diff --git a/.gitattributes b/.gitattributes index 75da45b796688b4249c36763f214b5705c33b074..949211191ecc7b7190250242a8cc84475c5b6501 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1681,6 +1681,7 @@ MAC/Deployment/data/StaticMetaData/CalTables/CalTable_017_mode6.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_017_mode7.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_021_mode1.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_021_mode3.dat -text +MAC/Deployment/data/StaticMetaData/CalTables/CalTable_021_mode5.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_024_mode1.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_024_mode3.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_024_mode5.dat -text @@ -1696,6 +1697,7 @@ MAC/Deployment/data/StaticMetaData/CalTables/CalTable_030_mode3.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_030_mode5.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_032_mode1.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_032_mode3.dat -text +MAC/Deployment/data/StaticMetaData/CalTables/CalTable_032_mode5.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_101_mode1.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_101_mode3.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_101_mode5.dat -text @@ -1744,6 +1746,8 @@ MAC/Deployment/data/StaticMetaData/CalTables/CalTable_401_mode1.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_401_mode5.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_401_mode6.dat -text svneol=unset#unset MAC/Deployment/data/StaticMetaData/CalTables/CalTable_401_mode7.dat -text +MAC/Deployment/data/StaticMetaData/CalTables/CalTable_406_mode1.dat -text +MAC/Deployment/data/StaticMetaData/CalTables/CalTable_406_mode3.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_501_mode1.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_501_mode3.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_503_mode1.dat -text @@ -1751,8 +1755,11 @@ MAC/Deployment/data/StaticMetaData/CalTables/CalTable_503_mode3.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_503_mode5.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_503_mode6.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_503_mode7.dat -text +MAC/Deployment/data/StaticMetaData/CalTables/CalTable_508_mode1.dat -text +MAC/Deployment/data/StaticMetaData/CalTables/CalTable_508_mode3.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_508_mode5.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_509_mode1.dat -text +MAC/Deployment/data/StaticMetaData/CalTables/CalTable_509_mode3.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_601_mode3.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_601_mode5.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_601_mode7.dat -text @@ -1761,6 +1768,8 @@ MAC/Deployment/data/StaticMetaData/CalTables/CalTable_602_mode5.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_603_mode3.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_603_mode5.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_603_mode6.dat -text +MAC/Deployment/data/StaticMetaData/CalTables/CalTable_604_mode5.dat -text +MAC/Deployment/data/StaticMetaData/CalTables/CalTable_605_mode3.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_605_mode5.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_606_mode3.dat -text MAC/Deployment/data/StaticMetaData/CalTables/CalTable_606_mode5.dat -text diff --git a/MAC/APL/MainCU/src/MACScheduler/MACScheduler.cc b/MAC/APL/MainCU/src/MACScheduler/MACScheduler.cc index 5a3cac41cc464e79184820be33a88e8acaf66112..f83f0cce5885de8e0a2c5a24dde9ec052d4c6509 100644 --- a/MAC/APL/MainCU/src/MACScheduler/MACScheduler.cc +++ b/MAC/APL/MainCU/src/MACScheduler/MACScheduler.cc @@ -85,10 +85,7 @@ MACScheduler::MACScheduler() : // Read the schedule periods for starting observations. itsQueuePeriod = globalParameterSet()->getTime("QueuePeriod"); - itsClaimPeriod = globalParameterSet()->getTime("ClaimPeriod"); - LOG_INFO_STR("Queueperiod = " << itsQueuePeriod << ", claimperiod = " << itsClaimPeriod); - ASSERTSTR(itsQueuePeriod > itsClaimPeriod, - "QueuePeriod must be longer than ClaimPeriod otherwise there is no time for the preparePeriod"); + LOG_INFO_STR("Queueperiod = " << itsQueuePeriod); // attach to child control task itsChildControl = ChildControl::instance(); diff --git a/MAC/APL/MainCU/src/MACScheduler/MACScheduler.conf.in b/MAC/APL/MainCU/src/MACScheduler/MACScheduler.conf.in index 3b9d30942b21a68a8d5b35548a9215f52c0e73fe..5346cf451415ea2b86bd5f4e06fa927ba510156b 100644 --- a/MAC/APL/MainCU/src/MACScheduler/MACScheduler.conf.in +++ b/MAC/APL/MainCU/src/MACScheduler/MACScheduler.conf.in @@ -9,7 +9,6 @@ OTDBpollInterval = 5s # startup periods of Observations QueuePeriod = 3m -ClaimPeriod = 2m # manage lists of observations pollIntervalPlanned = 5s # check if observations must be started diff --git a/MAC/APL/MainCU/src/MACScheduler/MACScheduler.h b/MAC/APL/MainCU/src/MACScheduler/MACScheduler.h index 672fc2103829bbdc5f85ead5a90f87310c67d3ca..b72775f0aeafe4c47be91e2bddfe7c2b3e17e6ab 100644 --- a/MAC/APL/MainCU/src/MACScheduler/MACScheduler.h +++ b/MAC/APL/MainCU/src/MACScheduler/MACScheduler.h @@ -145,7 +145,6 @@ private: // Scheduling settings uint32 itsQueuePeriod; // period between queueing and start - uint32 itsClaimPeriod; // period between claiming and start // OTDB related variables. OTDB::OTDBconnection* itsOTDBconnection; // connection to the database diff --git a/MAC/APL/MainCU/src/ObservationControl/ObservationControl.cc b/MAC/APL/MainCU/src/ObservationControl/ObservationControl.cc index d422e12412760d9cef7cc0e545d29ba91dad69c1..21ac4d867b35652c3ef338f77c78d77a097ff5a2 100644 --- a/MAC/APL/MainCU/src/ObservationControl/ObservationControl.cc +++ b/MAC/APL/MainCU/src/ObservationControl/ObservationControl.cc @@ -126,7 +126,7 @@ ObservationControl::ObservationControl(const string& cntlrName) : itsParentControl = ParentControl::instance(); // need port for timers. - itsTimerPort = new GCFTimerPort(*this, "TimerPort"); + itsTimerPort = new GCFTimerPort(*this, "ObservationControlTimer"); // create a datapoint service for setting runstates and so on itsDPservice = new DPservice(this); diff --git a/MAC/APL/PAC/ITRFBeamServer/src/BeamServer.cc b/MAC/APL/PAC/ITRFBeamServer/src/BeamServer.cc index 5bbcef9d8e3682417013502e1db9bf65905ceb98..717cebb6d6fafd94db58b27a7e6aba158a77907f 100644 --- a/MAC/APL/PAC/ITRFBeamServer/src/BeamServer.cc +++ b/MAC/APL/PAC/ITRFBeamServer/src/BeamServer.cc @@ -83,7 +83,7 @@ BeamServer::BeamServer(const string& name, long timestamp) : itsHBAUpdateInterval (0), itsTestSingleShotTimestamp(timestamp) { -// LOG_INFO(Version::getInfo<ITRFBeamServerVersion>("ITRFBeamServer")); + LOG_INFO(Version::getInfo<ITRFBeamServerVersion>("ITRFBeamServer")); // register protocols for debugging registerProtocol(IBS_PROTOCOL, IBS_PROTOCOL_STRINGS); @@ -1382,7 +1382,7 @@ complex<double> BeamServer::_getCalFactor(uint rcuMode, uint rcu, uint subbandNr break; } - LOG_DEBUG_STR("calFactor(" << rcuMode << "," << rcu << "," << subbandNr << ")=" << result); +// LOG_DEBUG_STR("calFactor(" << rcuMode << "," << rcu << "," << subbandNr << ")=" << result); return (result); } @@ -1490,11 +1490,11 @@ void BeamServer::compute_weights(Timestamp weightTime) LOG_DEBUG_STR("No antennas defined in this field"); continue; } - LOG_DEBUG_STR("ITRFRCUPos = " << rcuPosITRF); +// LOG_DEBUG_STR("ITRFRCUPos = " << rcuPosITRF); // Get geographical location of subarray in ITRF blitz::Array<double, 1> fieldCentreITRF = gAntField->Centre(fieldName); - LOG_DEBUG_STR("ITRF position antennaField: " << fieldCentreITRF); +// LOG_DEBUG_STR("ITRF position antennaField: " << fieldCentreITRF); // convert ITRF position of all antennas to J2000 for timestamp t blitz::Array<double,2> rcuJ2000Pos; // [rcu, xyz] @@ -1505,11 +1505,11 @@ void BeamServer::compute_weights(Timestamp weightTime) // Lengths of the vector of the antennaPosition i.r.t. the fieldCentre, blitz::Array<double,1> rcuPosLengths = gAntField->RCULengths(fieldName); - LOG_DEBUG_STR("rcuPosLengths = " << rcuPosLengths); +// LOG_DEBUG_STR("rcuPosLengths = " << rcuPosLengths); // denormalize length of vector rcuJ2000Pos = rcuJ2000Pos(tensor::i, tensor::j) * rcuPosLengths(tensor::i); - LOG_DEBUG_STR("J2000RCUPos@fullLength=" << rcuJ2000Pos); +// LOG_DEBUG_STR("J2000RCUPos@fullLength=" << rcuJ2000Pos); // for all beams using this field map<string, DigitalBeam*>::iterator beamIter = itsBeamPool.begin(); diff --git a/MAC/APL/PAC/ITRFBeamServer/src/CMakeLists.txt b/MAC/APL/PAC/ITRFBeamServer/src/CMakeLists.txt index 3175e7bb8ed7cc81e1cd9b9fc51d68fc42a39269..45bf2de6d4fc2d9c5fbcb0ee051872574701ce69 100644 --- a/MAC/APL/PAC/ITRFBeamServer/src/CMakeLists.txt +++ b/MAC/APL/PAC/ITRFBeamServer/src/CMakeLists.txt @@ -10,8 +10,8 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink # Add the directory where the generated C++ headers are stored to the -I path. #include_directories(${CMAKE_BINARY_DIR}/include/MAC) -#lofar_add_bin_program(versionitrfbeamserver versionitrfbeamserver.cc) -lofar_add_bin_program(BeamServer BeamServerMain.cc BeamServer.cc Beam.cc DigitalBeam.cc AnalogueBeam.cc AnaBeamMgr.cc StatCal.cc) +lofar_add_bin_program(versionitrfbeamserver versionitrfbeamserver.cc Package__Version.cc) +lofar_add_bin_program(BeamServer BeamServerMain.cc BeamServer.cc Beam.cc DigitalBeam.cc AnalogueBeam.cc AnaBeamMgr.cc StatCal.cc Package__Version.cc) lofar_add_bin_program(beamctl beamctl.cc) configure_file( diff --git a/MAC/APL/StationCU/src/BeamControl/BeamControl.cc b/MAC/APL/StationCU/src/BeamControl/BeamControl.cc index 6ca4a0549e3dadb2880c40f41457f6f1aec0cfa3..86a823209cd3710631256d84756ae18030346a7c 100644 --- a/MAC/APL/StationCU/src/BeamControl/BeamControl.cc +++ b/MAC/APL/StationCU/src/BeamControl/BeamControl.cc @@ -442,7 +442,7 @@ GCFEvent::TResult BeamControl::allocBeams_state(GCFEvent& event, GCFPortInterfac switch (event.signal) { case F_ENTRY: itsTimerPort->cancelAllTimers(); - itsTimerPort->setTimer(2.0); // give CalControl + CalServer some time to allocated the beams. + itsTimerPort->setTimer(0.2); // give CalControl + CalServer some time to allocated the beams. break; case F_TIMER: { diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_002_mode1.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_002_mode1.dat index 701bea31a017089c695d70a13d495d755208c939..b33352c4479153e46b14ac578d27cb702973a276 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_002_mode1.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_002_mode1.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_002_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_002_mode3.dat index 26ac8df798f937833c11c9c68310a0ef76f2e7e6..4b8593ff93d40b22054e47a8800cd85f150de45a 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_002_mode3.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_002_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_002_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_002_mode5.dat index e22d9816c8fa20d75d53ba67d650ebe396897276..5711e5b5f91c62bcea3c452a6008d3c525fc2682 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_002_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_002_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_003_mode1.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_003_mode1.dat index 2b620f54ce0bb16ae2411c65f988b2e41c0025e9..19639517a5aae671768189330ec637139620bc52 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_003_mode1.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_003_mode1.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_003_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_003_mode3.dat index ee850d241752fcb60623283cc9839c920db6d521..4eceac167f872cdfb5198e56d60de9aa041e8918 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_003_mode3.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_003_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_003_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_003_mode5.dat index de48235a91cdf2ff7dfd82cb8025291d41ec70d1..fdd02adddf82d072b69ea75df893e6a2b65aea7d 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_003_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_003_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_004_mode1.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_004_mode1.dat index 94f2aeb4052a33e2610c8eb50e8bd5b07daacae6..dd130598def14c5b7d8a1256e32aac6473501630 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_004_mode1.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_004_mode1.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_004_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_004_mode3.dat index e8db92167f5bc54f5a919b403e15915a8659456d..964dd562ca2a9958756d9113d3242bd6d4d92a4d 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_004_mode3.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_004_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_004_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_004_mode5.dat index 09e3cf5e41d0b43c44cc1d9ab0c57af7ff73053d..a31146e4b1fe88810f9ce80800e261a12c1decb3 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_004_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_004_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_005_mode1.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_005_mode1.dat index 8c5b6ca1ab97751e7fc2094138fb55ab17056a85..79e4534decb914bb98742b158ada6deb96cadd79 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_005_mode1.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_005_mode1.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_005_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_005_mode3.dat index 57cb15557dd4c96b39beaea8a231e5bcfd12e54f..9b520eb5a0db171cd15697b4e20b1cb332dd6c5e 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_005_mode3.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_005_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_005_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_005_mode5.dat index d1c5cb450ddf73c6314e57990b10b96d017a89f7..0e5c4f3fe1627fb711cab4c707f8821184e10a5b 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_005_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_005_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_006_mode1.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_006_mode1.dat index 78bfffc546d2aa4b3f8ec6f48ef7e3d67eb0d057..ec9274c3390f2171755da5167c8db69ac6dc3045 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_006_mode1.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_006_mode1.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_006_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_006_mode3.dat index 747e527b43d1dc63f862d364073cb489c225b162..b73150e0fdf8479c4a71b3c1e43b46dc4903c398 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_006_mode3.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_006_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_006_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_006_mode5.dat index bb05a5a37776efb5bbd401578f1e3de1d5d8f15a..16423d5dccc960487de22a4ed72f54faeb759f7b 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_006_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_006_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_007_mode1.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_007_mode1.dat index e358eff7fc5503a6117d61296921c4b64add5c92..9edbd1a2a8e05a885cdb312129c156591387b036 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_007_mode1.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_007_mode1.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_007_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_007_mode3.dat index 6d272e09bf4bb07fcae2dead4d6227232e7a7293..6bf2d0db5b75faa8530a25b125f0cc4fec76aa27 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_007_mode3.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_007_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_007_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_007_mode5.dat index 365b74af129ac7ec9f579600548dc34ab805518d..f72fd15fe21e9c1c6f26e813aa7e222130e5e51a 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_007_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_007_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_017_mode1.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_017_mode1.dat index 49544f88d2213f7bcbe802ccb06ced019778134e..6d244a156cba526c3f15916638893ad2fba5b224 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_017_mode1.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_017_mode1.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_017_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_017_mode5.dat index e584f5b5fa2f2473e1ed3fa54779c3375f3e9811..608c6061c13b7c8108fb26aff8b2b92210f22819 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_017_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_017_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_021_mode1.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_021_mode1.dat index 6ef1f38dde63c1a431b1e0a26a830f72d3a1c821..79d9b45d41b37016275476d92b257c9c0c7bd34c 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_021_mode1.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_021_mode1.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_021_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_021_mode5.dat new file mode 100644 index 0000000000000000000000000000000000000000..6e3d5e51e30865bbf41b8a59dc61a08c33c23ad3 Binary files /dev/null and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_021_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_024_mode1.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_024_mode1.dat index b9951f769a859eaa227d68ae9e0a9ea797baae26..fe92e8997923e07e764847de9d22a8195bd5a3f8 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_024_mode1.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_024_mode1.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_024_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_024_mode5.dat index 9f64d9166d7ab3e32099efebd4a6a21d6876d83a..7334905e4f3782c1d07599372a0e75de3110c6cd 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_024_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_024_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_026_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_026_mode5.dat index 69dac13ff26c9288fcfd32629a92a6cf6d1519cc..9017fece0b44a8ab8c3fed3ebd4aad380a230628 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_026_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_026_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_030_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_030_mode5.dat index 6da551946bd450875ded253acbacd68ec758d985..278dcb6f9176d3b8a9c667ea3fa4301367358df5 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_030_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_030_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_032_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_032_mode5.dat new file mode 100644 index 0000000000000000000000000000000000000000..2ba67b78bc3660d51eddbc726eb9bb724eeae019 Binary files /dev/null and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_032_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_101_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_101_mode5.dat index 9a15a081524e2e4729eef629d72c1693cdd711d3..da66990fe8bb6f614b8238bf8d5e470460f79e6c 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_101_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_101_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_103_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_103_mode5.dat index 63aa4a04226281000e2cac513e4300bf84d6c9c2..892b86188063f417909851749a2d60e69c3df6d8 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_103_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_103_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_106_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_106_mode3.dat index 89c169d5c542faeb6868e057b21bc2b1c4c7e6ad..738a86d993b1c26581525d338b89e78d8615ae8c 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_106_mode3.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_106_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_201_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_201_mode5.dat index 85167c09939dc64b3f2234cefa6885941c524838..f5d43d4c83b715fce1edad29cc9b3ed1bd6da46e 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_201_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_201_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_205_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_205_mode3.dat index 0db3b048b1acc192a42cd6c021f89bd8cd9b3b11..90cfb589b5910d987707996cbc0e1f6b67e00d4a 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_205_mode3.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_205_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_208_mode1.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_208_mode1.dat index d71487af21076e444d7687a9a919882c9947634e..2aae0a492e372f15b0d41a511cf5df46c79afdc6 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_208_mode1.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_208_mode1.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_301_mode1.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_301_mode1.dat index 7eb373511a461232a6f561c94e2b626fa0315fcc..4b8dd30cd0398ae7ef126023c5ca32111695b1c5 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_301_mode1.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_301_mode1.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_301_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_301_mode5.dat index 7031cd98e088d36f2216e6c73b78bebcdbf1279f..838d54dec959d2a92d48fbbc646787467786c4d7 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_301_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_301_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_302_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_302_mode3.dat index c2a528555a9717ea5024abd6adbdacd54a0ae63d..8dd880e58b08d37fc04a359f3d9141350c5bf834 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_302_mode3.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_302_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_302_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_302_mode5.dat index 6f53d72eec3de8edac9c46b717994c56c18954da..ecded8c6766f28031186ef795c27db71186b215e 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_302_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_302_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_306_mode1.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_306_mode1.dat index 89dc2fe0a8f1df6e0d167b2bf7bdb3d387b5544c..1f63dd7a0b2d9ebc014214e1213cd669ec6c7a44 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_306_mode1.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_306_mode1.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_307_mode1.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_307_mode1.dat index 5e7a65cf4eac17396fdcea2b6f786727682cc669..ae5eb75555200d92f15e0283f53d8571756bf645 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_307_mode1.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_307_mode1.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_307_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_307_mode3.dat index 2ff37635ddedf3802559019a928ed5cf1f18d781..8ac5c46ed1bfd8aaf02fd9ce8adaf6b915735a0d 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_307_mode3.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_307_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_401_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_401_mode5.dat index ecf06bfc85d1b3d4b2bc6f6172935ae274f51424..b39d359b7f4c626b542bd86aeea1947928803b42 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_401_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_401_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_406_mode1.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_406_mode1.dat new file mode 100644 index 0000000000000000000000000000000000000000..16073656a1729b1f1eabcb921d6a4abe56a17691 Binary files /dev/null and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_406_mode1.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_406_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_406_mode3.dat new file mode 100644 index 0000000000000000000000000000000000000000..65aba86c031adf10cf7d861aacc33ba1e4b3fe3f Binary files /dev/null and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_406_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_503_mode1.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_503_mode1.dat index 81c9c578f8d70a5394d04e647e986a1aa099488c..34b608abc8a2e53a5111a28ef213eb962f53a2a4 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_503_mode1.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_503_mode1.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_503_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_503_mode3.dat index 4c2f2728bd77c6768ec35e7c7209412947b7bc69..de07cafb8237ad41893f463a98db8f3dfed36a09 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_503_mode3.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_503_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_508_mode1.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_508_mode1.dat new file mode 100644 index 0000000000000000000000000000000000000000..5aa749dda03113d3b1310990c897334ae29d132b Binary files /dev/null and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_508_mode1.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_508_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_508_mode3.dat new file mode 100644 index 0000000000000000000000000000000000000000..4ac4137544e779467759114de1d188e66d46da50 Binary files /dev/null and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_508_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_509_mode1.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_509_mode1.dat index 7e9c9071771087d7d54d28a600fe3dfadd09f3fa..ea9a93355263bce7f0ad25492bd244076e07294d 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_509_mode1.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_509_mode1.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_509_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_509_mode3.dat new file mode 100644 index 0000000000000000000000000000000000000000..7f4c3c6805a4a8b4072889d7588d11b54dc32fdf Binary files /dev/null and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_509_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_602_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_602_mode3.dat index 3a41d1a64c8c7b6cf6f0e6b38cdc7a2d81567d29..a4d36738f7fcaa29252145255f5c7ad15fdbe9ac 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_602_mode3.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_602_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_602_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_602_mode5.dat index 817efaba4ca9598e0defb70ff0643bcbf0ea0ce9..ace64662536bb3dbff063d518072d49e974307d3 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_602_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_602_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_603_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_603_mode5.dat index 4f481d36c733069f4d0abf39e0ac54b1ccb18126..d6fd1cbb6bafc88385d60b6fcbdbe791a082a7a6 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_603_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_603_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_604_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_604_mode5.dat new file mode 100644 index 0000000000000000000000000000000000000000..341ff94a8107e76237fdc9fcfd28733a7b84ef1c Binary files /dev/null and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_604_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_605_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_605_mode3.dat new file mode 100644 index 0000000000000000000000000000000000000000..afa996cafeb0fa918737110bbd220841bb856cc4 Binary files /dev/null and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_605_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_605_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_605_mode5.dat index fa2832473461900dd19dc9d25efceff836adc44b..eab8cf77bdfc88391e6224850c5d396bfe116e77 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_605_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_605_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_606_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_606_mode3.dat index d56475049c4aa46487bba092f42b4856220d62d4..2e05093fec4d55215a4cf716f0cd57a462293774 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_606_mode3.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_606_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_606_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_606_mode5.dat index a68a7abab667d047d7692d7079d2ca2fdad0f7e3..2d12ce1d6caecb1273033d0a7e36b43ac4b96a17 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_606_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_606_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_607_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_607_mode3.dat index 0b19af9d88abb9fd84f75ad981c17b732fee2fcf..e77f7f5932ea2a6bd9edc760007e423b4c666f91 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_607_mode3.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_607_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_607_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_607_mode5.dat index ebce68f8695fdac61bc4d08d7a5c92e3ee91667f..51040ee60abcc23177b60479e5ba56ce6cde0ed4 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_607_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_607_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_608_mode3.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_608_mode3.dat index b5651a9e2f230eb4406c74542066be31ecd678c8..61ef38ae07f7c1ddf09bef1bdc8fe8eb774bfdce 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_608_mode3.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_608_mode3.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_608_mode5.dat b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_608_mode5.dat index 45456e54b50d6c27412c7ed5271cac358aa612db..1109f5aaa1b2066f11bda7b88a533e78867c2f74 100644 Binary files a/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_608_mode5.dat and b/MAC/Deployment/data/StaticMetaData/CalTables/CalTable_608_mode5.dat differ diff --git a/MAC/Deployment/data/StaticMetaData/HBADeltas/DE601-HBADeltas.conf b/MAC/Deployment/data/StaticMetaData/HBADeltas/DE601-HBADeltas.conf index b0647c15644eaeba3ddf7ad6fa6b5369ca86fc03..0754f98bb6288afd59072c2d7ae74cb4220449e0 100644 --- a/MAC/Deployment/data/StaticMetaData/HBADeltas/DE601-HBADeltas.conf +++ b/MAC/Deployment/data/StaticMetaData/HBADeltas/DE601-HBADeltas.conf @@ -1,22 +1,24 @@ # # HBADeltas.conf for DE601 # +# edited 2011 Jun 08 by James M Anderson +# as HBA tiles are rotated wrt to other LOFAR stations HBAdeltas 16 x 2 [ --1.285 2.319 --0.083 1.975 - 1.118 1.630 - 2.319 1.285 --1.630 1.118 --0.428 0.773 - 0.773 0.428 - 1.975 0.083 --1.975 -0.083 --0.773 -0.428 - 0.428 -0.773 - 1.630 -1.118 -2.319 -1.285 +-1.975 -0.083 +-1.630 1.118 +-1.285 2.319 -1.118 -1.630 +-0.773 -0.428 +-0.428 0.773 +-0.083 1.975 0.083 -1.975 + 0.428 -0.773 + 0.773 0.428 + 1.118 1.630 1.285 -2.319 -] \ No newline at end of file + 1.630 -1.118 + 1.975 0.083 + 2.319 1.285 +] diff --git a/MAC/Deployment/data/StaticMetaData/StationInfo.dat b/MAC/Deployment/data/StaticMetaData/StationInfo.dat index a388d64f73c92103aa2c7865b3711c710f62d2b4..1bf3bd0fff36656f9d88698cf908667556bf1e09 100644 --- a/MAC/Deployment/data/StaticMetaData/StationInfo.dat +++ b/MAC/Deployment/data/StaticMetaData/StationInfo.dat @@ -9,7 +9,7 @@ # in the file /etc/ntp.core.0 (for GPS). Units (deg, deg, m) # nrRSP, nrTBB, nrLBA, nrHBA are for RemoteStation.conf # HBAsplit indicates split HBA field (core stations only) -# LBAcal +# LBAcal # # name ID ring long lat height nrRSP nrTBB nrLBA nrHBA HBAsplit LBAcal #-------------------------------------------------------------------------------------------------------------- diff --git a/MAC/Deployment/data/StaticMetaData/Storage+MAC.dat b/MAC/Deployment/data/StaticMetaData/Storage+MAC.dat index 9f3c381bf13d4c49eb2d6d13b3a586cd7863387e..7ff233e5d5a799519be534b70f9a30ae8e199cf2 100644 --- a/MAC/Deployment/data/StaticMetaData/Storage+MAC.dat +++ b/MAC/Deployment/data/StaticMetaData/Storage+MAC.dat @@ -27,103 +27,103 @@ lse021 00:24:81:80:6a:a1 10.174.0.21 lse022 00:24:81:80:6e:3d 10.174.0.22 lse023 00:24:81:80:6e:c1 10.174.0.23 lse024 00:24:81:80:39:4d 10.174.0.24 -locus001 00:00:00:00:00:00 10.135.252.1 -locus002 00:00:00:00:00:00 10.135.252.2 -locus003 00:00:00:00:00:00 10.135.252.3 -locus004 00:00:00:00:00:00 10.135.252.4 -locus005 00:00:00:00:00:00 10.135.252.5 -locus006 00:00:00:00:00:00 10.135.252.6 -locus007 00:00:00:00:00:00 10.135.252.7 -locus008 00:00:00:00:00:00 10.135.252.8 -locus009 00:00:00:00:00:00 10.135.252.9 -locus010 00:00:00:00:00:00 10.135.252.10 -locus011 00:00:00:00:00:00 10.135.252.11 -locus012 00:00:00:00:00:00 10.135.252.12 -locus013 00:00:00:00:00:00 10.135.252.13 -locus014 00:00:00:00:00:00 10.135.252.14 -locus015 00:00:00:00:00:00 10.135.252.15 -locus016 00:00:00:00:00:00 10.135.252.16 -locus017 00:00:00:00:00:00 10.135.252.17 -locus018 00:00:00:00:00:00 10.135.252.18 -locus019 00:00:00:00:00:00 10.135.252.19 -locus020 00:00:00:00:00:00 10.135.252.20 -locus021 00:00:00:00:00:00 10.135.252.21 -locus022 00:00:00:00:00:00 10.135.252.22 -locus023 00:00:00:00:00:00 10.135.252.23 -locus024 00:00:00:00:00:00 10.135.252.24 -locus025 00:00:00:00:00:00 10.135.252.25 -locus026 00:00:00:00:00:00 10.135.253.1 -locus027 00:00:00:00:00:00 10.135.253.2 -locus028 00:00:00:00:00:00 10.135.253.3 -locus029 00:00:00:00:00:00 10.135.253.4 -locus030 00:00:00:00:00:00 10.135.253.5 -locus031 00:00:00:00:00:00 10.135.253.6 -locus032 00:00:00:00:00:00 10.135.253.7 -locus033 00:00:00:00:00:00 10.135.253.8 -locus034 00:00:00:00:00:00 10.135.253.9 -locus035 00:00:00:00:00:00 10.135.253.10 -locus036 00:00:00:00:00:00 10.135.253.11 -locus037 00:00:00:00:00:00 10.135.253.12 -locus038 00:00:00:00:00:00 10.135.253.13 -locus039 00:00:00:00:00:00 10.135.253.14 -locus040 00:00:00:00:00:00 10.135.253.15 -locus041 00:00:00:00:00:00 10.135.253.16 -locus042 00:00:00:00:00:00 10.135.253.17 -locus043 00:00:00:00:00:00 10.135.253.18 -locus044 00:00:00:00:00:00 10.135.253.19 -locus045 00:00:00:00:00:00 10.135.253.20 -locus046 00:00:00:00:00:00 10.135.253.21 -locus047 00:00:00:00:00:00 10.135.253.22 -locus048 00:00:00:00:00:00 10.135.253.23 -locus049 00:00:00:00:00:00 10.135.253.24 -locus050 00:00:00:00:00:00 10.135.253.25 -locus051 00:00:00:00:00:00 10.135.254.1 -locus052 00:00:00:00:00:00 10.135.254.2 -locus053 00:00:00:00:00:00 10.135.254.3 -locus054 00:00:00:00:00:00 10.135.254.4 -locus055 00:00:00:00:00:00 10.135.254.5 -locus056 00:00:00:00:00:00 10.135.254.6 -locus057 00:00:00:00:00:00 10.135.254.7 -locus058 00:00:00:00:00:00 10.135.254.8 -locus059 00:00:00:00:00:00 10.135.254.9 -locus060 00:00:00:00:00:00 10.135.254.10 -locus061 00:00:00:00:00:00 10.135.254.11 -locus062 00:00:00:00:00:00 10.135.254.12 -locus063 00:00:00:00:00:00 10.135.254.13 -locus064 00:00:00:00:00:00 10.135.254.14 -locus065 00:00:00:00:00:00 10.135.254.15 -locus066 00:00:00:00:00:00 10.135.254.16 -locus067 00:00:00:00:00:00 10.135.254.17 -locus068 00:00:00:00:00:00 10.135.254.18 -locus069 00:00:00:00:00:00 10.135.254.19 -locus070 00:00:00:00:00:00 10.135.254.20 -locus071 00:00:00:00:00:00 10.135.254.21 -locus072 00:00:00:00:00:00 10.135.254.22 -locus073 00:00:00:00:00:00 10.135.254.23 -locus074 00:00:00:00:00:00 10.135.254.24 -locus075 00:00:00:00:00:00 10.135.254.25 -locus076 00:00:00:00:00:00 10.135.255.1 -locus077 00:00:00:00:00:00 10.135.255.2 -locus078 00:00:00:00:00:00 10.135.255.3 -locus079 00:00:00:00:00:00 10.135.255.4 -locus080 00:00:00:00:00:00 10.135.255.5 -locus081 00:00:00:00:00:00 10.135.255.6 -locus082 00:00:00:00:00:00 10.135.255.7 -locus083 00:00:00:00:00:00 10.135.255.8 -locus084 00:00:00:00:00:00 10.135.255.9 -locus085 00:00:00:00:00:00 10.135.255.10 -locus086 00:00:00:00:00:00 10.135.255.11 -locus087 00:00:00:00:00:00 10.135.255.12 -locus088 00:00:00:00:00:00 10.135.255.13 -locus089 00:00:00:00:00:00 10.135.255.14 -locus090 00:00:00:00:00:00 10.135.255.15 -locus091 00:00:00:00:00:00 10.135.255.16 -locus092 00:00:00:00:00:00 10.135.255.17 -locus093 00:00:00:00:00:00 10.135.255.18 -locus094 00:00:00:00:00:00 10.135.255.19 -locus095 00:00:00:00:00:00 10.135.255.20 -locus096 00:00:00:00:00:00 10.135.255.21 -locus097 00:00:00:00:00:00 10.135.255.22 -locus098 00:00:00:00:00:00 10.135.255.23 -locus099 00:00:00:00:00:00 10.135.255.24 -locus100 00:00:00:00:00:00 10.135.255.25 +locus001 00:02:c9:0e:39:1e 10.135.252.1 +locus002 00:02:c9:0e:3a:65 10.135.252.2 +locus003 00:02:c9:0e:3a:64 10.135.252.3 +locus004 00:02:c9:0e:39:26 10.135.252.4 +locus005 00:02:c9:0e:39:27 10.135.252.5 +locus006 00:02:c9:0e:3a:6c 10.135.252.6 +locus007 00:02:c9:0e:39:1e 10.135.252.7 +locus008 00:02:c9:0e:3a:65 10.135.252.8 +locus009 00:02:c9:0e:3a:64 10.135.252.9 +locus010 00:02:c9:0e:39:26 10.135.252.10 +locus011 00:02:c9:0e:39:27 10.135.252.11 +locus012 00:02:c9:0e:3a:6c 10.135.252.12 +locus013 00:02:c9:0e:39:1e 10.135.252.13 +locus014 00:02:c9:0e:3a:65 10.135.252.14 +locus015 00:02:c9:0e:3a:64 10.135.252.15 +locus016 00:02:c9:0e:39:26 10.135.252.16 +locus017 00:02:c9:0e:39:27 10.135.252.17 +locus018 00:02:c9:0e:3a:6c 10.135.252.18 +locus019 00:02:c9:0e:39:1e 10.135.252.19 +locus020 00:02:c9:0e:3a:65 10.135.252.20 +locus021 00:02:c9:0e:3a:64 10.135.252.21 +locus022 00:02:c9:0e:39:26 10.135.252.22 +locus023 00:02:c9:0e:39:27 10.135.252.23 +locus024 00:02:c9:0e:3a:6c 10.135.252.24 +locus025 00:02:c9:0e:39:1e 10.135.252.25 +locus026 00:02:c9:0e:3a:65 10.135.253.1 +locus027 00:02:c9:0e:3a:64 10.135.253.2 +locus028 00:02:c9:0e:39:26 10.135.253.3 +locus029 00:02:c9:0e:39:27 10.135.253.4 +locus030 00:02:c9:0e:3a:6c 10.135.253.5 +locus031 00:02:c9:0e:39:1e 10.135.253.6 +locus032 00:02:c9:0e:3a:65 10.135.253.7 +locus033 00:02:c9:0e:3a:64 10.135.253.8 +locus034 00:02:c9:0e:39:26 10.135.253.9 +locus035 00:02:c9:0e:39:27 10.135.253.10 +locus036 00:02:c9:0e:3a:6c 10.135.253.11 +locus037 00:02:c9:0e:39:1e 10.135.253.12 +locus038 00:02:c9:0e:3a:65 10.135.253.13 +locus039 00:02:c9:0e:3a:64 10.135.253.14 +locus040 00:02:c9:0e:39:26 10.135.253.15 +locus041 00:02:c9:0e:39:27 10.135.253.16 +locus042 00:02:c9:0e:3a:6c 10.135.253.17 +locus043 00:02:c9:0e:39:1e 10.135.253.18 +locus044 00:02:c9:0e:3a:65 10.135.253.19 +locus045 00:02:c9:0e:3a:64 10.135.253.20 +locus046 00:02:c9:0e:39:26 10.135.253.21 +locus047 00:02:c9:0e:39:27 10.135.253.22 +locus048 00:02:c9:0e:3a:6c 10.135.253.23 +locus049 00:02:c9:0e:39:1e 10.135.253.24 +locus050 00:02:c9:0e:3a:65 10.135.253.25 +locus051 00:02:c9:0e:3a:64 10.135.254.1 +locus052 00:02:c9:0e:39:26 10.135.254.2 +locus053 00:02:c9:0e:39:27 10.135.254.3 +locus054 00:02:c9:0e:3a:6c 10.135.254.4 +locus055 00:02:c9:0e:39:1e 10.135.254.5 +locus056 00:02:c9:0e:3a:65 10.135.254.6 +locus057 00:02:c9:0e:3a:64 10.135.254.7 +locus058 00:02:c9:0e:39:26 10.135.254.8 +locus059 00:02:c9:0e:39:27 10.135.254.9 +locus060 00:02:c9:0e:3a:6c 10.135.254.10 +locus061 00:02:c9:0e:39:1e 10.135.254.11 +locus062 00:02:c9:0e:3a:65 10.135.254.12 +locus063 00:02:c9:0e:3a:64 10.135.254.13 +locus064 00:02:c9:0e:39:26 10.135.254.14 +locus065 00:02:c9:0e:39:27 10.135.254.15 +locus066 00:02:c9:0e:3a:6c 10.135.254.16 +locus067 00:02:c9:0e:39:1e 10.135.254.17 +locus068 00:02:c9:0e:3a:65 10.135.254.18 +locus069 00:02:c9:0e:3a:64 10.135.254.19 +locus070 00:02:c9:0e:39:26 10.135.254.20 +locus071 00:02:c9:0e:39:27 10.135.254.21 +locus072 00:02:c9:0e:3a:6c 10.135.254.22 +locus073 00:02:c9:0e:39:1e 10.135.254.23 +locus074 00:02:c9:0e:3a:65 10.135.254.24 +locus075 00:02:c9:0e:3a:64 10.135.254.25 +locus076 00:02:c9:0e:39:26 10.135.255.1 +locus077 00:02:c9:0e:39:27 10.135.255.2 +locus078 00:02:c9:0e:3a:6c 10.135.255.3 +locus079 00:02:c9:0e:39:1e 10.135.255.4 +locus080 00:02:c9:0e:3a:65 10.135.255.5 +locus081 00:02:c9:0e:3a:64 10.135.255.6 +locus082 00:02:c9:0e:39:26 10.135.255.7 +locus083 00:02:c9:0e:39:27 10.135.255.8 +locus084 00:02:c9:0e:3a:6c 10.135.255.9 +locus085 00:02:c9:0e:39:1e 10.135.255.10 +locus086 00:02:c9:0e:3a:65 10.135.255.11 +locus087 00:02:c9:0e:3a:64 10.135.255.12 +locus088 00:02:c9:0e:39:26 10.135.255.13 +locus089 00:02:c9:0e:39:27 10.135.255.14 +locus090 00:02:c9:0e:3a:6c 10.135.255.15 +locus091 00:02:c9:0e:39:1e 10.135.255.16 +locus092 00:02:c9:0e:3a:65 10.135.255.17 +locus093 00:02:c9:0e:3a:64 10.135.255.18 +locus094 00:02:c9:0e:39:26 10.135.255.19 +locus095 00:02:c9:0e:39:27 10.135.255.20 +locus096 00:02:c9:0e:3a:6c 10.135.255.21 +locus097 00:02:c9:0e:39:1e 10.135.255.22 +locus098 00:02:c9:0e:3a:65 10.135.255.23 +locus099 00:02:c9:0e:3a:64 10.135.255.24 +locus100 00:02:c9:0e:39:26 10.135.255.25 diff --git a/MAC/GCF/TM/include/GCF/TM/GCF_Fsm.h b/MAC/GCF/TM/include/GCF/TM/GCF_Fsm.h index bd505b328e210f65ef17eb94a0858186c6c34cc2..a903e121cdc189767bca2ea49931c609da55e3a1 100644 --- a/MAC/GCF/TM/include/GCF/TM/GCF_Fsm.h +++ b/MAC/GCF/TM/include/GCF/TM/GCF_Fsm.h @@ -80,6 +80,9 @@ public: return (this->*itsState)(event, port); } + // Save the given event on the task queue. It will be release by the scheduler on the next state transition. + void queueTaskEvent(GCFEvent& event, GCFPortInterface& port); + protected: // constructors && destructors // Define TRANEvent struct GCFTranEvent : public GCFEvent @@ -112,8 +115,6 @@ protected: // constructors && destructors // Allow the scheduler to manipulate my eventQueue. friend class GCFScheduler; - void queueTaskEvent(GCFEvent& event, GCFPortInterface& port); -// void handleTaskQueue(); bool unqueueTaskEvent(GCFEvent** eventPtr, GCFPortInterface**port); private: diff --git a/MAC/GCF/TM/include/GCF/TM/GCF_Scheduler.h b/MAC/GCF/TM/include/GCF/TM/GCF_Scheduler.h index ffb9490bfd0a9cd0c72ae80c11b40cf02a84a288..9826d124c286b0de6ec343d78a2f771ed3811d75 100644 --- a/MAC/GCF/TM/include/GCF/TM/GCF_Scheduler.h +++ b/MAC/GCF/TM/include/GCF/TM/GCF_Scheduler.h @@ -176,6 +176,7 @@ private: void _injectEvent(GCFFsm* task, GCFEvent& event, GCFPortInterface* port, bool deepCopy=true); GCFEvent::TResult _sendEvent (GCFFsm* task, GCFEvent& event, GCFPortInterface* port); bool _isInEventQueue(GCFEvent* someEvent, GCFPortInterface* somePort); + void _injectParkedEvents(); // Singleton GCFScheduler(); @@ -200,6 +201,7 @@ private: int seqNr; } waitingEvent_t; list<waitingEvent_t*> theEventQueue; + list<waitingEvent_t*> itsParkedQueue; // postponed events without a task // all registered handlers, which should be invoked (workProc) circulair typedef map<GCFHandler*, bool /*valid*/> HandlerMap_t; diff --git a/MAC/GCF/TM/src/GCF_Scheduler.cc b/MAC/GCF/TM/src/GCF_Scheduler.cc index 61a4009c7a207add7e40fceb530a66446214dd54..15cf765fe50b47a5510f9a581720d1e8554d48d6 100644 --- a/MAC/GCF/TM/src/GCF_Scheduler.cc +++ b/MAC/GCF/TM/src/GCF_Scheduler.cc @@ -47,6 +47,7 @@ int GCFScheduler::_argc = 0; char** GCFScheduler::_argv = 0; static const uint BATCH_SIZE = 3; // number of message handled before control is returned to other workProcs. +static const uint QUEUE_FACTOR = 5; // weight factor to increment the batch_size depending on the queuesize. #define MAX2(a,b) ((a) > (b)) ? (a) : (b) #define MIN2(a,b) ((a) < (b)) ? (a) : (b) @@ -331,8 +332,19 @@ void GCFScheduler::queueEvent(GCFFsm* task, GCFEvent& event, GCFPortInterface* break; case GCFEvent::NEXT_STATE: - LOG_DEBUG_STR("Moving event " << eventName(event) << " to eventQ of task, waiting there for state switch"); - task->queueTaskEvent(event, *port); + if (task) { + LOG_DEBUG_STR("Moving event " << eventName(event) << " to eventQ of task, waiting there for state switch"); + task->queueTaskEvent(event, *port); + } + else { + LOG_DEBUG_STR("Moving event " << eventName(event) << " to eventQ of port, waiting there for a state switch"); + waitingEvent_t* newWE = new waitingEvent_t; + newWE->task = task; + newWE->port = (port ? port : itsFrameworkPort); + newWE->seqNr = 0; + newWE->event = event.clone(); + itsParkedQueue.push_back(newWE); + } break; case GCFEvent::HANDLED: @@ -362,6 +374,22 @@ void GCFScheduler::_addEvent(GCFFsm* task, GCFEvent& event, theEventQueue.push_back(newWE); } +// +// _injectParkedEvents() +// +// Injects all parked (taskless) events in FRONT of the queue +// +void GCFScheduler::_injectParkedEvents() +{ + waitingEvent_t* parkedEvent; + while (!itsParkedQueue.empty()) { + parkedEvent = itsParkedQueue.back(); + LOG_TRACE_STAT_STR("theEventQueue.injectParked(" << eventName(*(parkedEvent->event)) << "@" << parkedEvent->port->getName() << ") => " << theEventQueue.size() + 1); + theEventQueue.push_front(parkedEvent); + itsParkedQueue.pop_back(); + } +} + // // _injectEvent(task, event, port) // @@ -394,7 +422,8 @@ void GCFScheduler::handleEventQueue() printEventQueue(); - int events2Handle = MIN2(BATCH_SIZE,theEventQueue.size()); // only handle the event that are in the queue NOW. + // only handle the event that are in the queue NOW. + int events2Handle = MIN2(BATCH_SIZE+(theEventQueue.size()/QUEUE_FACTOR), theEventQueue.size()); while(events2Handle > 0) { waitingEvent_t* theQueueEntry = theEventQueue.front(); @@ -420,6 +449,8 @@ void GCFScheduler::handleEventQueue() } // when this command was an entry in a new state, inject the task queue into the current queue if (theQueueEntry->event->signal == F_ENTRY) { + // inject port-events first (so that they are handled after the inserted task events). + _injectParkedEvents(); GCFFsm* task(theQueueEntry->task); GCFEvent* eventPtr; GCFPortInterface* portPtr; @@ -436,15 +467,22 @@ void GCFScheduler::handleEventQueue() case GCFEvent::NOT_HANDLED: LOG_TRACE_COND_STR("DELETING event " << eventName(*(theQueueEntry->event)) << - " because return status is NOT_HANDLED"); + " although return status is NOT_HANDLED"); handled = true; break; case GCFEvent::NEXT_STATE: - LOG_DEBUG_STR("Moving event " << eventName(*(theQueueEntry->event)) << + if (theQueueEntry->task) { + LOG_DEBUG_STR("Moving event " << eventName(*(theQueueEntry->event)) << " to eventQ of task, waiting there for state switch"); - theQueueEntry->task->queueTaskEvent(*(theQueueEntry->event), *(theQueueEntry->port)); - handled = false; + theQueueEntry->task->queueTaskEvent(*(theQueueEntry->event), *(theQueueEntry->port)); + } + else { + LOG_DEBUG_STR("Moving event " << eventName(*(theQueueEntry->event)) << + " to eventQ of port, waiting there for a state switch"); + itsParkedQueue.push_back(theQueueEntry); + handled = false; // do not delete it! + } break; } // switch } // else @@ -455,12 +493,14 @@ void GCFScheduler::handleEventQueue() events2Handle = MAX2(events2Handle, 3); } - // release memory - LOG_TRACE_STAT_STR("Event " << eventName(*(theQueueEntry->event)) << " in task " << taskName << + if (handled) { + // release memory + LOG_TRACE_STAT_STR("Event " << eventName(*(theQueueEntry->event)) << " in task " << taskName << " removed from queue"); - delete theQueueEntry->event; - theQueueEntry->event = 0; - delete theQueueEntry; + delete theQueueEntry->event; + theQueueEntry->event = 0; + delete theQueueEntry; + } // one less to go. events2Handle--; diff --git a/MAC/GCF/TM/src/PortImpl/GCF_ITCPort.cc b/MAC/GCF/TM/src/PortImpl/GCF_ITCPort.cc index 96fa0580d2031cf802ad6359efe950189866ce1d..cabd719f65c9174c0a8e5ae7f0cd26b05d3d3d91 100644 --- a/MAC/GCF/TM/src/PortImpl/GCF_ITCPort.cc +++ b/MAC/GCF/TM/src/PortImpl/GCF_ITCPort.cc @@ -154,8 +154,12 @@ GCFEvent::TResult GCFITCPort::dispatch(GCFEvent& event) if (pActualEvent!=0) { // client timer expired? dispatch to slave if (clientIt != itsToSlaveTimerId.end()) { - LOG_TRACE_CALC(formatString("GCFITCPort::dispatch calling clientTask.doEvent, event@%08X", pActualEvent)); + LOG_TRACE_CALC(formatString("GCFITCPort::dispatch:Calling clientTask.doEvent, event@%08X", pActualEvent)); status = itsSlaveTask.doEvent(*pActualEvent, *this); + if (status == GCFEvent::NEXT_STATE) { + LOG_TRACE_STAT_STR("GCFITCPort::dispatch:Task returned NEXT_STATE, queing " << eventName(*pActualEvent)); + itsSlaveTask.queueTaskEvent(*pActualEvent, *this); + } // extra check to see if it still exists: clientIt = itsToSlaveTimerId.find(timerEvent.id); if (clientIt != itsToSlaveTimerId.end()) { @@ -164,20 +168,20 @@ GCFEvent::TResult GCFITCPort::dispatch(GCFEvent& event) } // server timer expired? dispatch to server else if (serverIt != itsToContainerTimerId.end()) { - LOG_TRACE_CALC(formatString("GCFITCPort::dispatch calling serverTask.doEvent, event@%08X", pActualEvent)); + LOG_TRACE_CALC(formatString("GCFITCPort::dispatch:Calling serverTask.doEvent, event@%08X", pActualEvent)); LOG_TRACE_CALC_STR("event = " << *pActualEvent); status = _pTask->doEvent(*pActualEvent, *this); + if (status == GCFEvent::NEXT_STATE) { + LOG_TRACE_STAT_STR("GCFITCPort::dispatch:Task returned NEXT_STATE, queing " << eventName(*pActualEvent)); + _pTask->queueTaskEvent(*pActualEvent, *this); + } // extra check to see if it still exists: serverIt = itsToContainerTimerId.find(timerEvent.id); if (serverIt != itsToContainerTimerId.end()) { itsToContainerTimerId.erase(serverIt); } } - if (status == GCFEvent::NEXT_STATE) { - LOG_TRACE_CALC("GCFITCPort::dispatch task returned NEXT_STATE, informing scheduler"); - return (status); - } - LOG_TRACE_CALC(formatString("GCFITCPort::dispatch deleting event attached to timer (%08X)", pActualEvent)); + LOG_TRACE_CALC(formatString("GCFITCPort::dispatch:Deleting event attached to timer (%08X)", pActualEvent)); delete pActualEvent; // delete the buffer tied to the timer. LOG_TRACE_CALC("GCFITCPort::dispatch attached event deleted"); } // with attached event diff --git a/MAC/GCF/TM/src/PortImpl/GCF_TCPPort.cc b/MAC/GCF/TM/src/PortImpl/GCF_TCPPort.cc index 73df1fd1abafac3f29419a007bc2c0aa28a68cfb..ddf76912cd589b8d3683df5be6aa60dd9c5d7d03 100644 --- a/MAC/GCF/TM/src/PortImpl/GCF_TCPPort.cc +++ b/MAC/GCF/TM/src/PortImpl/GCF_TCPPort.cc @@ -61,6 +61,7 @@ GCFTCPPort::GCFTCPPort(GCFTask& task, itsAutoRetryTimer (0), itsAutoRetries (0), itsAutoRetryItv (0.0), + itsConnectTimer (0), _broker (0) { if (SPP == getType() || MSPP == getType()) { @@ -87,6 +88,7 @@ GCFTCPPort::GCFTCPPort() itsAutoRetryTimer (0), itsAutoRetries (0), itsAutoRetryItv (0.0), + itsConnectTimer (0), _broker (0) { } @@ -263,7 +265,9 @@ void GCFTCPPort::autoOpen(uint nrRetries, double timeout, double reconnectInterv // void GCFTCPPort::_handleDisconnect() { - LOG_TRACE_COND_STR("_handleDisco:autoOpen=" << (itsAutoOpen ? "Yes" : "No") << ", nrRetries=" << itsAutoRetries << ", retryTimer=" << itsAutoRetryTimer << ", maxTimer=" << itsAutoOpenTimer); + LOG_TRACE_STAT_STR("_handleDisco:autoOpen=" << (itsAutoOpen ? "Yes" : "No") << + ", nrRetries=" << itsAutoRetries << ", retryTimer=" << itsAutoRetryTimer << + ", maxTimer=" << itsAutoOpenTimer << ", connTimer=" << itsConnectTimer); setState(S_DISCONNECTED); LOG_TRACE_COND_STR("_state=" << _state); @@ -298,6 +302,10 @@ void GCFTCPPort::_handleDisconnect() // void GCFTCPPort::_handleConnect() { + LOG_TRACE_STAT_STR("_handleConn:autoOpen=" << (itsAutoOpen ? "Yes" : "No") << + ", nrRetries=" << itsAutoRetries << ", retryTimer=" << itsAutoRetryTimer << + ", maxTimer=" << itsAutoOpenTimer << ", connTimer=" << itsConnectTimer); + // stop all related timers. _pTimerHandler->cancelTimer(itsConnectTimer); itsConnectTimer = 0; diff --git a/MAC/GCF/TM/src/PortImpl/GTM_FileHandler.cc b/MAC/GCF/TM/src/PortImpl/GTM_FileHandler.cc index 008242b1bf477541c369777b00a26a77e6ac22d5..6182c16d195a06d137728016b219fd9824d0297f 100644 --- a/MAC/GCF/TM/src/PortImpl/GTM_FileHandler.cc +++ b/MAC/GCF/TM/src/PortImpl/GTM_FileHandler.cc @@ -81,7 +81,7 @@ void GTMFileHandler::workProc() TFiles testFiles; struct timeval select_timeout; - // + // // because select call changes the timeout value to // contain the remaining time we need to set it to 10ms // on every call to workProc diff --git a/MAC/GCF/TM/src/Timer/GTM_Timer.cc b/MAC/GCF/TM/src/Timer/GTM_Timer.cc index 37e9b81200449daaceaeab0ba0ebac05bfda55d5..3adb1ec7c73046bb3042df548315739aaff87995 100644 --- a/MAC/GCF/TM/src/Timer/GTM_Timer.cc +++ b/MAC/GCF/TM/src/Timer/GTM_Timer.cc @@ -56,13 +56,19 @@ GTMTimer::GTMTimer(GCFRawPort& port, void GTMTimer::decreaseTime() { int64 uSec = getElapsedTime(); + if (_port.getName() == "childControlTimer") { + LOG_TRACE_STAT(formatString("Timer %d(%s): Telapsed= %lld, Tleft=%llu", _id, _port.getName().c_str(), uSec, _timeLeft)); + } // REO: uSec < 0 ??? - if ((uint64) uSec < _timeLeft || uSec < 0) { + if ((uSec < (int64)(_timeLeft)) || (uSec < 0)) { _timeLeft -= uSec; if (uSec < 0) { LOG_WARN(formatString("Elapsed time of timer %d (%s) is NEGATIVE!: %llu", _id, _port.getName().c_str(), uSec)); } + if (_port.getName() == "childControlTimer") { + LOG_TRACE_STAT(formatString("Timer %d(%s): Tleft=>%llu", _id, _port.getName().c_str(), _timeLeft)); + } return; } @@ -79,6 +85,7 @@ void GTMTimer::decreaseTime() if (_intervalTime == 0) { _elapsed = true; + LOG_TRACE_STAT(formatString("Timer %d(%s): elapsed", _id, _port.getName().c_str())); return; } @@ -93,6 +100,7 @@ void GTMTimer::decreaseTime() } _timeLeft = _intervalTime - timeoverflow; + LOG_TRACE_STAT(formatString("RepTimer %d(%s): Tleft=>%llu", _id, _port.getName().c_str(), _timeLeft)); } void GTMTimer::saveTime() @@ -116,6 +124,16 @@ int64 GTMTimer::getElapsedTime() return (uSecDiff); } +#if 0 +void GTMTimer::cancel() +{ + _canceled = true; + if (_port.getName() == "childControlTimer") { + LOG_TRACE_STAT(formatString("Cancel timer %d(childControlTimer)", _id)); + } +} +#endif + } // namespace TM } // namespace GCF } // namespace LOFAR diff --git a/MAC/GCF/TM/src/Timer/GTM_TimerHandler.cc b/MAC/GCF/TM/src/Timer/GTM_TimerHandler.cc index 35ed740745385f4a95dab1fa9275bbe5e3048cb0..ebe46775238a1f4ad47cafc6169157e5fda6e9a7 100644 --- a/MAC/GCF/TM/src/Timer/GTM_TimerHandler.cc +++ b/MAC/GCF/TM/src/Timer/GTM_TimerHandler.cc @@ -22,6 +22,7 @@ #include <lofar_config.h> #include <Common/LofarLogger.h> +#include <Common/StringUtil.h> #define LOFARLOGGER_SUBPACKAGE "Timer" @@ -90,7 +91,8 @@ void GTMTimerHandler::workProc() pCurTimer = iter->second; ASSERT(pCurTimer); if (pCurTimer->isElapsed() || pCurTimer->isCanceled()) { - //LOG_DEBUG(formatString("Deleting timer %d of port %s", iter->first, pCurTimer->getPort().getName().c_str())); + LOG_TRACE_STAT(formatString("Deleting timer %d(%s),elapse=%c,cancel=%c", iter->first, pCurTimer->getPort().getName().c_str(), + (pCurTimer->isElapsed() ? 'Y' : 'N'), (pCurTimer->isCanceled() ? 'Y' : 'N'))); delete pCurTimer; _timers.erase(iter->first); } diff --git a/MAC/GCF/TM/test/tITCPort.cc b/MAC/GCF/TM/test/tITCPort.cc index 8dee09d1bde88068c94ba075273e189077bda74d..f16c67398ae03a90dfff3a9e4ee95eb0162d7b52 100644 --- a/MAC/GCF/TM/test/tITCPort.cc +++ b/MAC/GCF/TM/test/tITCPort.cc @@ -21,6 +21,11 @@ // // $Id$ +// The program has two tasks, a server task and a client task. They connect to each other +// by a TCP port and an ITC port. Once both connections are made the server starts sending +// messages over one of the ports, the client always send the answer back over the other port. + + #include <lofar_config.h> #include <Common/LofarLogger.h> @@ -32,14 +37,29 @@ namespace LOFAR { namespace TM { EchoPingEvent gPing; +EchoPingEvent gPing2; +EchoPingEvent gPing3; tClient* gClientTask; GCFITCPort* gITCPort; +#define ASSERT_NOT_EQUAL(a,b) \ + ASSERTSTR ((a).seqnr==(b).seqnr && \ + (a).ping_time.tv_sec==(b).ping_time.tv_sec && \ + (a).ping_time.tv_usec==(b).ping_time.tv_usec && \ + (a).someName==(b).someName, "Server: Returned message is different:" << endl << \ + "send.ping = " << (b).seqnr << endl << \ + "recv.ping = " << (a).seqnr << endl << \ + "send.time = " << (b).ping_time.tv_sec << "," << (b).ping_time.tv_usec << endl << \ + "recv.time = " << (a).ping_time.tv_sec << "," << (a).ping_time.tv_usec << endl << \ + "send.name = " << (b).someName << endl << \ + "recv.name = " << (a).someName); + // Constructors of both classes tServer::tServer(string name) : GCFTask ((State)&tServer::openITC, name), itsClientTCP (0), - itsTimerPort (0) + itsTimerPort (0), + itsSendCount (0) { registerProtocol(ECHO_PROTOCOL, ECHO_PROTOCOL_STRINGS); } @@ -62,7 +82,7 @@ GCFEvent::TResult tServer::openITC(GCFEvent& event, GCFPortInterface& port) switch (event.signal) { case F_ENTRY: { - itsTimerPort = new GCFTimerPort (*this, "timerPort"); + itsTimerPort = new GCFTimerPort (*this, "serverTimer"); LOG_DEBUG("Server: creating ITC stream"); gITCPort = new GCFITCPort(*this, *gClientTask, "ITC stream", GCFPortInterface::SAP, ECHO_PROTOCOL); ASSERTSTR(gITCPort, "Server: Failed to create an ITC port"); @@ -153,7 +173,7 @@ GCFEvent::TResult tServer::test1(GCFEvent& event, GCFPortInterface& port) // send the event itsClientTCP->send(gPing); - LOG_INFO_STR("Server: PING sent (seqnr=" << gPing.seqnr); + LOG_INFO_STR("### Server: PING sent over TCPport (seqnr=" << gPing.seqnr); itsTimerPort->setTimer(5.0); // max wait time for open } break; @@ -166,17 +186,7 @@ GCFEvent::TResult tServer::test1(GCFEvent& event, GCFPortInterface& port) itsTimerPort->cancelAllTimers(); EchoPingEvent ping(event); LOG_DEBUG_STR ("Server:PING received, seqnr=" << ping.seqnr << endl << ping); - ASSERTSTR (ping.seqnr==gPing.seqnr && - ping.ping_time.tv_sec==gPing.ping_time.tv_sec && - ping.ping_time.tv_usec==gPing.ping_time.tv_usec && - ping.someName==gPing.someName, "Server: Returned message is different:" << endl << - "send.ping = " << gPing.seqnr << endl << - "recv.ping = " << ping.seqnr << endl << - "send.time = " << gPing.ping_time.tv_sec << "," << gPing.ping_time.tv_usec << endl << - "recv.time = " << ping.ping_time.tv_sec << "," << ping.ping_time.tv_usec << endl << - "send.name = " << gPing.someName << endl << - "recv.name = " << ping.someName); - + ASSERT_NOT_EQUAL(ping, gPing); LOG_DEBUG ("Server: returned message is OK, going to test2"); TRAN(tServer::test2); } @@ -217,7 +227,7 @@ GCFEvent::TResult tServer::test2(GCFEvent& event, GCFPortInterface& port) // send the event gITCPort->send(gPing); - LOG_INFO_STR("Server: PING sent (seqnr=" << gPing.seqnr); + LOG_INFO_STR("### Server: PING sent over ITC port (seqnr=" << gPing.seqnr); itsTimerPort->setTimer(5.0); // max wait time for open } break; @@ -230,19 +240,9 @@ GCFEvent::TResult tServer::test2(GCFEvent& event, GCFPortInterface& port) itsTimerPort->cancelAllTimers(); EchoPingEvent ping(event); LOG_DEBUG_STR ("Server:PING received, seqnr=" << ping.seqnr); - ASSERTSTR (ping.seqnr==gPing.seqnr && - ping.ping_time.tv_sec==gPing.ping_time.tv_sec && - ping.ping_time.tv_usec==gPing.ping_time.tv_usec && - ping.someName==gPing.someName, "Server: Returned message is different:" << endl << - "send.ping = " << gPing.seqnr << endl << - "recv.ping = " << ping.seqnr << endl << - "send.time = " << gPing.ping_time.tv_sec << "," << gPing.ping_time.tv_usec << endl << - "recv.time = " << ping.ping_time.tv_sec << "," << ping.ping_time.tv_usec << endl << - "send.name = " << gPing.someName << endl << - "recv.name = " << ping.someName); - - LOG_DEBUG ("Server: returned message is OK, finished testing."); - GCFScheduler::instance()->stop(); + ASSERT_NOT_EQUAL (ping, gPing); + LOG_DEBUG ("Server: returned message is OK, going to TEST 3."); + TRAN(tServer::test3A); } break; @@ -258,6 +258,546 @@ GCFEvent::TResult tServer::test2(GCFEvent& event, GCFPortInterface& port) return status; } +// +// TEST 3A +// The server sends 2 messages over the ITC port and responses on the returned answers with NEXT_STATE +// When the task goes to the next state the answer must be inserted in the eventstack by the scheduler. +// +GCFEvent::TResult tServer::test3A(GCFEvent& event, GCFPortInterface& port) +{ + GCFEvent::TResult status = GCFEvent::HANDLED; + LOG_DEBUG_STR ("Server@test3A: " << eventName(event.signal) << "@" << port.getName()); + + switch (event.signal) { + case F_ENTRY: { + // create PingEvent + timeval ping_time; + gettimeofday(&ping_time, 0); + + gPing2.seqnr = 3021119; + gPing2.ping_time = ping_time; + gPing2.someName = "First ping message that will be postphoned to next state on a TCPport"; + + // send the event + gITCPort->send(gPing2); + LOG_INFO_STR("### Server: PING2 sent over ITC (seqnr=" << gPing2.seqnr); + itsSendCount = 1; + itsTimerPort->setTimer(5.0); // max wait time for open + } + break; + + case F_TIMER: + if (itsSendCount == 2) { + TRAN(tServer::test3B); + return (GCFEvent::HANDLED); + } + ASSERTSTR(false, "Server@test3A: client did not returned an answer over TCP"); + break; + + case ECHO_PING: { + itsTimerPort->cancelAllTimers(); + EchoPingEvent ping(event); + LOG_DEBUG_STR ("Server:PING received, seqnr=" << ping.seqnr); + if (itsSendCount == 1) { + ASSERT_NOT_EQUAL (ping, gPing2); + LOG_DEBUG ("Server: returned message is OK, Sending ping3 event"); + gPing3.seqnr = 20492186; + gPing3.ping_time = gPing2.ping_time; + gPing3.ping_time.tv_sec += 5467; + gPing3.someName = "Second ping message that will be postphoned to next state on a TCPport"; + + // send the event + gITCPort->send(gPing3); + LOG_INFO_STR("Server: PING3 sent (seqnr=" << gPing3.seqnr); + itsSendCount++; + itsTimerPort->setTimer(5.0); // max wait time for answer + return (GCFEvent::NEXT_STATE); + } + // pingevent 3 returned. + ASSERT_NOT_EQUAL (ping, gPing3); + LOG_DEBUG ("Server: returned message is OK, asking for postphone and switching to new state"); + itsTimerPort->setTimer(0.1); // do state switch on timer. + return (GCFEvent::NEXT_STATE); + + } + break; + + case F_DISCONNECTED: + ASSERTSTR(false, "Server: Received an DISCO"); + break; + + default: + LOG_DEBUG("Server@test3A: default"); + break; + } + + return status; +} + +// +// TEST 3B +// +// Expecting 2 messages of the previous test. +GCFEvent::TResult tServer::test3B(GCFEvent& event, GCFPortInterface& port) +{ + GCFEvent::TResult status = GCFEvent::HANDLED; + LOG_DEBUG_STR ("Server@test3B: " << eventName(event.signal) << "@" << port.getName()); + + switch (event.signal) { + case F_ENTRY: { + itsSendCount = 0; + LOG_INFO("### Server: waiting for postphoned ping-events over TCP ..."); + itsTimerPort->setTimer(5.0); // max wait time for open + } + break; + + case F_TIMER: + if (itsSendCount == 2) { + LOG_DEBUG("Postphonig over TCP is OK, trying the same over ITC..."); + TRAN(tServer::test4A); + return (GCFEvent::HANDLED); + } + ASSERTSTR(false, "Server@test3B: Scheduler did not inject requested messages"); + break; + + case ECHO_PING: { + itsTimerPort->cancelAllTimers(); + EchoPingEvent ping(event); + LOG_DEBUG_STR ("Server:PING received, seqnr=" << ping.seqnr); + if (itsSendCount == 0) { + ASSERT_NOT_EQUAL (ping, gPing2); + LOG_DEBUG ("Server: returned postphoned message is OK"); + itsTimerPort->setTimer(5.0); // max wait time for answer + itsSendCount++; + return (GCFEvent::HANDLED); + } + // pingevent 3 returned. + ASSERT_NOT_EQUAL (ping, gPing3); + LOG_DEBUG ("Server: returned message is OK, asking for postphone and switching to new state"); + itsTimerPort->setTimer(0.1); // do state switch on timer. + itsSendCount++; + return (GCFEvent::HANDLED); + } + break; + + case F_DISCONNECTED: + ASSERTSTR(false, "Server: Received an DISCO"); + break; + + default: + LOG_DEBUG("Server@test3A: default"); + break; + } + + return status; +} +// +// TEST 4A +// +// The server sends 2 messages over the TCP port and responses on the returned answers with NEXT_STATE +// When the task goes to the next state the answer must be inserted in the eventstack by the scheduler. +GCFEvent::TResult tServer::test4A(GCFEvent& event, GCFPortInterface& port) +{ + GCFEvent::TResult status = GCFEvent::HANDLED; + LOG_DEBUG_STR ("Server@test4A: " << eventName(event.signal) << "@" << port.getName()); + + switch (event.signal) { + case F_ENTRY: { + // create PingEvent + timeval ping_time; + gettimeofday(&ping_time, 0); + + gPing2.seqnr = 9111203; + gPing2.ping_time = ping_time; + gPing2.someName = "First ping message that will be postphoned to next state on a ITCport"; + + // send the event + itsClientTCP->send(gPing2); + LOG_INFO_STR("### Server: PING2 sent over TCP (seqnr=" << gPing2.seqnr); + itsSendCount = 1; + itsTimerPort->setTimer(5.0); // max wait time for open + } + break; + + case F_TIMER: + if (itsSendCount == 2) { + TRAN(tServer::test4B); + return (GCFEvent::HANDLED); + } + ASSERTSTR(false, "Server@test4A: client did not returned an answer over ITC"); + break; + + case ECHO_PING: { + itsTimerPort->cancelAllTimers(); + EchoPingEvent ping(event); + LOG_DEBUG_STR ("Server:PING received, seqnr=" << ping.seqnr); + if (itsSendCount == 1) { + ASSERT_NOT_EQUAL (ping, gPing2); + LOG_DEBUG ("Server: returned message is OK, Sending ping3 event"); + gPing3.seqnr = 68129402; + gPing3.someName = "Second ping message that will be postphoned to next state on a ITCport"; + + // send the event + itsClientTCP->send(gPing3); + LOG_INFO_STR("Server: PING3 sent (seqnr=" << gPing3.seqnr); + itsSendCount++; + itsTimerPort->setTimer(5.0); // max wait time for answer + return (GCFEvent::NEXT_STATE); + } + // pingevent 3 returned. + ASSERT_NOT_EQUAL (ping, gPing3); + LOG_DEBUG ("Server: returned message is OK, asking for postphone and switching to new state"); + itsTimerPort->setTimer(0.1); // do state switch on timer. + return (GCFEvent::NEXT_STATE); + + } + break; + + case F_DISCONNECTED: + ASSERTSTR(false, "Server: Received an DISCO"); + break; + + default: + LOG_DEBUG("Server@test3A: default"); + break; + } + + return status; +} + +// +// TEST 4B +// +// Expecting 2 messages of the previous test. +GCFEvent::TResult tServer::test4B(GCFEvent& event, GCFPortInterface& port) +{ + GCFEvent::TResult status = GCFEvent::HANDLED; + LOG_DEBUG_STR ("Server@test4B: " << eventName(event.signal) << "@" << port.getName()); + + switch (event.signal) { + case F_ENTRY: { + itsSendCount = 0; + LOG_INFO("### Server: waiting for postphoned ping-events over ITC ..."); + itsTimerPort->setTimer(5.0); // max wait time for open + } + break; + + case F_TIMER: + if (itsSendCount == 2) { + LOG_DEBUG("Test 4B passed, going to test 5A"); + TRAN(tServer::test5A); + return (GCFEvent::HANDLED); + } + ASSERTSTR(false, "Server@test4B: Scheduler did not inject requested messages"); + break; + + case ECHO_PING: { + itsTimerPort->cancelAllTimers(); + EchoPingEvent ping(event); + LOG_DEBUG_STR ("Server:PING received, seqnr=" << ping.seqnr); + if (itsSendCount == 0) { + ASSERT_NOT_EQUAL (ping, gPing2); + LOG_DEBUG ("Server: returned postphoned message is OK"); + itsTimerPort->setTimer(5.0); // max wait time for answer + itsSendCount++; + return (GCFEvent::HANDLED); + } + // pingevent 3 returned. + ASSERT_NOT_EQUAL (ping, gPing3); + LOG_DEBUG ("Server: returned message is OK, asking for postphone and switching to new state"); + itsTimerPort->setTimer(0.1); // do state switch on timer. + itsSendCount++; + return (GCFEvent::HANDLED); + } + break; + + case F_DISCONNECTED: + ASSERTSTR(false, "Server: Received an DISCO"); + break; + + default: + LOG_DEBUG("Server@test4A: default"); + break; + } + + return status; +} + +// +// TEST 5A +// The server generates 2 timer events on the TCPport timer and forwards them to the next state. +// +GCFEvent::TResult tServer::test5A(GCFEvent& event, GCFPortInterface& port) +{ + GCFEvent::TResult status = GCFEvent::HANDLED; + LOG_DEBUG_STR ("Server@test5A: " << eventName(event.signal) << "@" << port.getName()); + + switch (event.signal) { + case F_ENTRY: { + // create PingEvent + itsTimerPort->setTimer(0.1, 0.0, (void*)(&gPing2)); + itsTimerPort->setTimer(0.2, 0.0, (void*)(&gPing3)); + itsTimerPort->setTimer(1.0); + LOG_INFO_STR("### Server: initiated 2 timer events with a ping message connected to it, waiting for timers"); + itsSendCount = 0; + } + break; + + case F_TIMER: + itsSendCount++; + if (itsSendCount > 2) { + LOG_DEBUG("Postphoned 2 timer events, going to next state and wait there for them to receive them"); + TRAN(tServer::test5B); + return (GCFEvent::HANDLED); + } + LOG_DEBUG("Postphoning F_TIMER event..."); + return (GCFEvent::NEXT_STATE); + break; + + case F_DISCONNECTED: + ASSERTSTR(false, "Server: Received an DISCO"); + break; + + default: + LOG_DEBUG("Server@test5A: default"); + break; + } + + return status; +} + +// +// TEST 5B +// +// Expecting 2 TIMER messages of the previous test. +GCFEvent::TResult tServer::test5B(GCFEvent& event, GCFPortInterface& port) +{ + GCFEvent::TResult status = GCFEvent::HANDLED; + LOG_DEBUG_STR ("Server@test5B: " << eventName(event.signal) << "@" << port.getName()); + + switch (event.signal) { + case F_ENTRY: { + itsSendCount = 0; + itsTimerPort->setTimer(5.0); // max wait time for forwarded events + } + break; + + case F_TIMER: { + GCFTimerEvent& timerEvent=static_cast<GCFTimerEvent&>(event); + EchoPingEvent* pingPtr = (EchoPingEvent*)timerEvent.arg; + ASSERTSTR(pingPtr, "Expected an ping event attached to the timer event, bailing out..."); + LOG_DEBUG_STR ("Server:PING received, seqnr=" << pingPtr->seqnr); + if (itsSendCount == 0) { + ASSERT_NOT_EQUAL (*pingPtr, gPing2); + LOG_DEBUG ("Server: returned postphoned message is OK"); + itsSendCount++; + return (GCFEvent::HANDLED); + } + // pingevent 3 returned. + ASSERT_NOT_EQUAL (*pingPtr, gPing3); + LOG_DEBUG ("Server: forwarding timer events over a timerPort OK, trying it over TCP..."); + itsTimerPort->cancelAllTimers(); + TRAN(tServer::forwardOverTCP); + return (GCFEvent::HANDLED); + } + break; + + case F_DISCONNECTED: + ASSERTSTR(false, "Server: Received an DISCO"); + break; + + default: + LOG_DEBUG("Server@test5b: default"); + break; + } + + return status; +} + +// +// forwardOverTCP +// The server generates 2 timer events on the TCPport timer and forwards them to the next state. +// +GCFEvent::TResult tServer::forwardOverTCP(GCFEvent& event, GCFPortInterface& port) +{ + GCFEvent::TResult status = GCFEvent::HANDLED; + LOG_DEBUG_STR ("Server@forwardOverTCP: " << eventName(event.signal) << "@" << port.getName()); + + switch (event.signal) { + case F_ENTRY: { + // create PingEvent + itsClientTCP->setTimer(0.1, 0.0, (void*)(&gPing2)); + itsClientTCP->setTimer(0.2, 0.0, (void*)(&gPing3)); + itsTimerPort->setTimer(1.0); + LOG_INFO_STR("### Server: initiated 2 timer events with a ping message connected to it, waiting for timers"); + itsSendCount = 0; + } + break; + + case F_TIMER: + itsSendCount++; + if (itsSendCount > 2) { + LOG_DEBUG("Postphoned 2 timer events, going to next state and wait there for them to receive them"); + TRAN(tServer::delayedOverTCP); + return (GCFEvent::HANDLED); + } + LOG_DEBUG("Postphoning F_TIMER event..."); + return (GCFEvent::NEXT_STATE); + break; + + case F_DISCONNECTED: + ASSERTSTR(false, "Server: Received an DISCO"); + break; + + default: + LOG_DEBUG("Server@forwardOverTCP: default"); + break; + } + + return status; +} + +// +// delayedOverTCP +// Expecting 2 TIMER messages of the previous test. +// +GCFEvent::TResult tServer::delayedOverTCP(GCFEvent& event, GCFPortInterface& port) +{ + GCFEvent::TResult status = GCFEvent::HANDLED; + LOG_DEBUG_STR ("Server@delayedOverTCP: " << eventName(event.signal) << "@" << port.getName()); + + switch (event.signal) { + case F_ENTRY: { + itsSendCount = 0; + itsTimerPort->setTimer(5.0); // max wait time for forwarded events + } + break; + + case F_TIMER: { + GCFTimerEvent& timerEvent=static_cast<GCFTimerEvent&>(event); + EchoPingEvent* pingPtr = (EchoPingEvent*)timerEvent.arg; + ASSERTSTR(pingPtr, "Expected an ping event attached to the timer event, bailing out..."); + LOG_DEBUG_STR ("Server:PING received, seqnr=" << pingPtr->seqnr); + if (itsSendCount == 0) { + ASSERT_NOT_EQUAL (*pingPtr, gPing2); + LOG_DEBUG ("Server: returned postphoned message is OK"); + itsSendCount++; + return (GCFEvent::HANDLED); + } + // pingevent 3 returned. + ASSERT_NOT_EQUAL (*pingPtr, gPing3); + LOG_DEBUG ("Server: forwarding timer events over a TCP OK, trying it over ITC..."); + itsTimerPort->cancelAllTimers(); + TRAN(tServer::forwardOverITC); + return (GCFEvent::HANDLED); + } + break; + + case F_DISCONNECTED: + ASSERTSTR(false, "Server: Received an DISCO"); + break; + + default: + LOG_DEBUG("Server@delaydOverTCP: default"); + break; + } + + return status; +} + +// +// forwardOverITC +// The server generates 2 timer events on the ITCport timer and forwards them to the next state. +// +GCFEvent::TResult tServer::forwardOverITC(GCFEvent& event, GCFPortInterface& port) +{ + GCFEvent::TResult status = GCFEvent::HANDLED; + LOG_DEBUG_STR ("Server@forwardOverITC: " << eventName(event.signal) << "@" << port.getName()); + + switch (event.signal) { + case F_ENTRY: { + // create PingEvent + gITCPort->setTimer(0.1, 0.0, (void*)(&gPing2)); + gITCPort->setTimer(0.2, 0.0, (void*)(&gPing3)); + itsTimerPort->setTimer(1.0); + LOG_INFO_STR("### Server: initiated 2 timer events with a ping message connected to it, waiting for timers"); + itsSendCount = 0; + } + break; + + case F_TIMER: + itsSendCount++; + if (itsSendCount > 2) { + LOG_DEBUG("Postphoned 2 timer events, going to next state and wait there for them to receive them"); + TRAN(tServer::delayedOverITC); + return (GCFEvent::HANDLED); + } + LOG_DEBUG("Postphoning F_TIMER event..."); + return (GCFEvent::NEXT_STATE); + break; + + case F_DISCONNECTED: + ASSERTSTR(false, "Server: Received an DISCO"); + break; + + default: + LOG_DEBUG("Server@forwardOverITC: default"); + break; + } + + return status; +} + +// +// delayedOverITC +// Expecting 2 TIMER messages of the previous test. +// +GCFEvent::TResult tServer::delayedOverITC(GCFEvent& event, GCFPortInterface& port) +{ + GCFEvent::TResult status = GCFEvent::HANDLED; + LOG_DEBUG_STR ("Server@delayedOverITC: " << eventName(event.signal) << "@" << port.getName()); + + switch (event.signal) { + case F_ENTRY: { + itsSendCount = 0; + itsTimerPort->setTimer(5.0); // max wait time for forwarded events + } + break; + + case F_TIMER: { + GCFTimerEvent& timerEvent=static_cast<GCFTimerEvent&>(event); + EchoPingEvent* pingPtr = (EchoPingEvent*)timerEvent.arg; + ASSERTSTR(pingPtr, "Expected an ping event attached to the timer event, bailing out..."); + LOG_DEBUG_STR ("Server:PING received, seqnr=" << pingPtr->seqnr); + if (itsSendCount == 0) { + ASSERT_NOT_EQUAL (*pingPtr, gPing2); + LOG_DEBUG ("Server: returned postphoned message is OK"); + itsSendCount++; + return (GCFEvent::HANDLED); + } + // pingevent 3 returned. + ASSERT_NOT_EQUAL (*pingPtr, gPing3); + LOG_DEBUG ("Server: forwarding timer events over a ITC OK, ALL TESTED PASSED SUCCESSFUL!!!"); + GCFScheduler::instance()->stop(); + return (GCFEvent::HANDLED); + } + break; + + case F_DISCONNECTED: + ASSERTSTR(false, "Server: Received an DISCO"); + break; + + default: + LOG_DEBUG("Server@delaydOverITC: default"); + break; + } + + return status; +} + + +// -------------------- CLIENT TASK -------------------- + // Client::initial // // wait till server gave me my ITCport. @@ -269,7 +809,7 @@ GCFEvent::TResult tClient::initial(GCFEvent& event, GCFPortInterface& port) switch (event.signal) { case F_ENTRY: LOG_DEBUG("Client: waiting for ITC port to be set by server"); - itsTimerPort = new GCFTimerPort (*this, "timerPort"); + itsTimerPort = new GCFTimerPort (*this, "clientTimer"); // Note: the 'setITC' call will initiate an F_TIMER event. break; diff --git a/MAC/GCF/TM/test/tITCPort.h b/MAC/GCF/TM/test/tITCPort.h index 33934749bfa2f3a5baed2514709fb32fee1decea..92f3ae10bda6eaaed505bc7f0a4fd6c4f32eec30 100644 --- a/MAC/GCF/TM/test/tITCPort.h +++ b/MAC/GCF/TM/test/tITCPort.h @@ -50,11 +50,22 @@ public: GCFEvent::TResult wait4TCP (GCFEvent& e, GCFPortInterface& p); GCFEvent::TResult test1 (GCFEvent& e, GCFPortInterface& p); GCFEvent::TResult test2 (GCFEvent& e, GCFPortInterface& p); + GCFEvent::TResult test3A(GCFEvent& e, GCFPortInterface& p); + GCFEvent::TResult test3B(GCFEvent& e, GCFPortInterface& p); + GCFEvent::TResult test4A(GCFEvent& e, GCFPortInterface& p); + GCFEvent::TResult test4B(GCFEvent& e, GCFPortInterface& p); + GCFEvent::TResult test5A(GCFEvent& e, GCFPortInterface& p); + GCFEvent::TResult test5B(GCFEvent& e, GCFPortInterface& p); + GCFEvent::TResult forwardOverTCP(GCFEvent& e, GCFPortInterface& p); + GCFEvent::TResult delayedOverTCP(GCFEvent& e, GCFPortInterface& p); + GCFEvent::TResult forwardOverITC(GCFEvent& e, GCFPortInterface& p); + GCFEvent::TResult delayedOverITC(GCFEvent& e, GCFPortInterface& p); private: GCFTCPPort* itsClientTCP; GCFITCPort* itsITCPort; GCFTimerPort* itsTimerPort; + int itsSendCount; }; class tClient : public GCFTask diff --git a/SAS/OTDB/bin/makeDefaultTemplates.py b/SAS/OTDB/bin/makeDefaultTemplates.py index 057f901633a0c1adc23637e40918a35decde789a..7dfb277918f42c523db4ad4ea8e220c28a999ab9 100755 --- a/SAS/OTDB/bin/makeDefaultTemplates.py +++ b/SAS/OTDB/bin/makeDefaultTemplates.py @@ -40,7 +40,11 @@ def createNewDefaultTemplate(orgTmplID, newMasterTmplID, orgTmplInfo): newTmplID = otdb.query("select * from copyTree(1, %s)" % newMasterTmplID).getresult()[0][0] print " copy has ID: %s" % newTmplID otdb.query("select * from setDescription(1, %s, '%s')" % (newTmplID, orgTmplInfo['description'])) - otdb.query("select * from assignTemplateName(1, %s, '_new_ %s')" % (newTmplID, orgTmplInfo['treeName'])) + # set the old default template state to obsolete (1200) + otdb.query("select * from settreestate(1, %s, '1200')" % (orgTmplID)) + # rename the old template with a '# ' before its original name + otdb.query("select * from assignTemplateName(1, %s, '# %s')" % (orgTmplID, orgTmplInfo['treeName'])) + otdb.query("select * from assignTemplateName(1, %s, '%s')" % (newTmplID, orgTmplInfo['treeName'])) # loop over all values that were changed in the old template treeIdentification = "%s%d" % (orgTmplInfo['nodeName'], orgTmplInfo['version']) @@ -159,18 +163,20 @@ if __name__ == '__main__': dfltTmplInfo = {} dfltTemplateIDs = otdb.query("select * from getDefaultTemplates()").dictresult() for dfltTemplate in dfltTemplateIDs: - description = otdb.query("select description from getTreeInfo(%s, 'false')" % dfltTemplate['treeid']).getresult()[0][0] - nodeDefID = otdb.query("select * from getTopNode(%s)" % dfltTemplate['treeid']).dictresult()[0] - nodeInfo = otdb.query("select * from getVICnodedef(%s)" % nodeDefID['paramdefid']).dictresult() - dfltTmplInfo[dfltTemplate['treeid']] = \ - {'componentID' : nodeDefID['paramdefid'], \ - 'nodeID' : nodeDefID['nodeid'], \ - 'nodeName' : nodeDefID['name'], \ - 'version' : nodeInfo[0]['version'], \ - 'treeName' : dfltTemplate['name'], \ - 'description' : description} - print " DefaultTemplate %s starts at %s (version %d) : %s" % \ - (dfltTemplate['treeid'], nodeDefID['name'], nodeInfo[0]['version'], dfltTemplate['name']) + state = otdb.query("select state from getTreeInfo(%s, 'false')" % dfltTemplate['treeid']).getresult()[0][0] + if state != 1200 : + description = otdb.query("select description from getTreeInfo(%s, 'false')" % dfltTemplate['treeid']).getresult()[0][0] + nodeDefID = otdb.query("select * from getTopNode(%s)" % dfltTemplate['treeid']).dictresult()[0] + nodeInfo = otdb.query("select * from getVICnodedef(%s)" % nodeDefID['paramdefid']).dictresult() + dfltTmplInfo[dfltTemplate['treeid']] = \ + {'componentID' : nodeDefID['paramdefid'], \ + 'nodeID' : nodeDefID['nodeid'], \ + 'nodeName' : nodeDefID['name'], \ + 'version' : nodeInfo[0]['version'], \ + 'treeName' : dfltTemplate['name'], \ + 'description' : description} + print " DefaultTemplate %s starts at %s (version %d) : %s" % \ + (dfltTemplate['treeid'], nodeDefID['name'], nodeInfo[0]['version'], dfltTemplate['name']) # second step create temporarely parsetfiles from all DefaultTemplates print "=> Creating temporarely parsetfiles from the DefaultTemplates..."