From 3e84224f746ca8f8e3d5fe292212479ed2e79af9 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Wed, 13 Dec 2023 22:55:28 +0100 Subject: [PATCH] Scheduler-test: force dependency-wait to wake-up job The main (test) thread is kept in a blocking wait until the planned schedule is completed. If however the schedule overruns, the wake-up job could just be triggered prematurely. This can easily be prevented by adding a dependency from the last computation job to the wake-up job. If the computation somehow flounders, the SAFETY_TIMEOUT (5s) will eventually raise an exception to let the test fail cleanly (shutting down the Scheduler automatically) --- src/vault/gear/activity-lang.hpp | 6 +-- src/vault/gear/activity-term.hpp | 8 +-- src/vault/gear/scheduler.hpp | 8 +++ tests/vault/gear/scheduler-service-test.cpp | 4 +- tests/vault/gear/test-chain-load.hpp | 12 +++-- wiki/thinkPad.ichthyo.mm | 54 ++++++++++++++++++++- 6 files changed, 80 insertions(+), 12 deletions(-) diff --git a/src/vault/gear/activity-lang.hpp b/src/vault/gear/activity-lang.hpp index 42772d43c..5c2dfed7e 100644 --- a/src/vault/gear/activity-lang.hpp +++ b/src/vault/gear/activity-lang.hpp @@ -163,12 +163,12 @@ namespace gear { private: /** @internal generate the builder / configurator term */ activity::Term - setupActivityScheme (activity::Term::Template schemeKind, Job job, Time start, Time after) + setupActivityScheme (activity::Term::Template schemeKind, Job job, Time start, Time dead) { - return activity::Term{ mem_.until(after) + return activity::Term{ mem_.until(dead) , schemeKind , start - , after + , dead , job }; } diff --git a/src/vault/gear/activity-term.hpp b/src/vault/gear/activity-term.hpp index fa57f97cf..fdfc50f6f 100644 --- a/src/vault/gear/activity-term.hpp +++ b/src/vault/gear/activity-term.hpp @@ -120,10 +120,10 @@ namespace gear { }; explicit - Term (AllocHandle&& allocHandle, Template kind, Time start, Time after, Job job) + Term (AllocHandle&& allocHandle, Template kind, Time start, Time dead, Job job) : alloc_{move (allocHandle)} , invoke_{setupInvocation (job)} - , post_{setupPost (start,after, invoke_)} + , post_{setupPost (start,dead, invoke_)} { configureTemplate (kind); } @@ -257,9 +257,9 @@ namespace gear { } Activity* - setupPost (Time start, Time after, Activity* followUp) + setupPost (Time start, Time dead, Activity* followUp) { - return & alloc_.create (start,after,followUp); + return & alloc_.create (start,dead,followUp); } void diff --git a/src/vault/gear/scheduler.hpp b/src/vault/gear/scheduler.hpp index 8e67f1728..10a071e0d 100644 --- a/src/vault/gear/scheduler.hpp +++ b/src/vault/gear/scheduler.hpp @@ -195,6 +195,14 @@ namespace gear { return move(*this); } + ScheduleSpec + compulsory (bool truely =true) + { + isCompulsory_ = truely; + return move(*this); + } + + /** build Activity chain and hand-over to the Scheduler. */ ScheduleSpec post(); diff --git a/tests/vault/gear/scheduler-service-test.cpp b/tests/vault/gear/scheduler-service-test.cpp index 9960c4e4c..c07e53985 100644 --- a/tests/vault/gear/scheduler-service-test.cpp +++ b/tests/vault/gear/scheduler-service-test.cpp @@ -552,7 +552,8 @@ namespace test { processSchedule() { MARK_TEST_FUN - auto LOAD_BASE = 200us; + + auto LOAD_BASE = 1ms; TestChainLoad testLoad{64}; // .configureShape_short_segments3_interleaved() @@ -581,6 +582,7 @@ SHOW_EXPR(referenceTime) testLoad.setupSchedule(scheduler) .withLoadTimeBase(LOAD_BASE) + .withJobDeadline(100ms) .launch_and_wait(); // invocation through Scheduler has reproduced all node hashes diff --git a/tests/vault/gear/test-chain-load.hpp b/tests/vault/gear/test-chain-load.hpp index 56f2fcc22..e27c4aa73 100644 --- a/tests/vault/gear/test-chain-load.hpp +++ b/tests/vault/gear/test-chain-load.hpp @@ -1610,11 +1610,17 @@ namespace test { ,manID_); } else - scheduler_.continueMetaJob (calcStartTime (levelDone+1) - ,wakeUpJob() - ,manID_); + scheduler_.defineSchedule(wakeUpJob()) + .manifestation (manID_) + .startTime(calcStartTime (levelDone+1)) + .lifeWindow(1s) + .compulsory() + .post() + .linkToPredecessor (schedule_[lastNodeIDX]) + ; // Setup wait-dependency on last computation } + std::future performRun() { diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index 17a6d960f..2e292547c 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -103267,7 +103267,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- + + @@ -103285,6 +103286,22 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
+ + + + + + + + + + + + + + + + @@ -103333,6 +103350,41 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
+ + + + + + + + + + +

+ da wir alle ScheduleSpec-Terme in einem Array halten +

+ + +
+
+ + + + + + + + + + + + + + + + + +