Scheduler: completed implementation of Layer-2
...some further checks ...one integration test case needs to be written
This commit is contained in:
parent
93fcebb331
commit
ee09a2eff2
3 changed files with 67 additions and 31 deletions
|
|
@ -102,13 +102,6 @@ namespace gear {
|
|||
, priority_{}
|
||||
{ }
|
||||
|
||||
bool
|
||||
empty() const
|
||||
{
|
||||
return instruct_.empty()
|
||||
and priority_.empty();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Accept an Activity for time-bound execution
|
||||
|
|
@ -179,6 +172,21 @@ namespace gear {
|
|||
and priority_.top().waterlevel <= waterLevel(now);
|
||||
}
|
||||
|
||||
bool
|
||||
empty() const
|
||||
{
|
||||
return instruct_.empty()
|
||||
and priority_.empty();
|
||||
}
|
||||
|
||||
/** @return the earliest time of prioritised work */
|
||||
Time
|
||||
headTime() const
|
||||
{
|
||||
return priority_.empty()? Time::ANYTIME
|
||||
: Time{TimeValue{priority_.top().waterlevel}};
|
||||
} //Note: 64-bit waterLevel corresponds to µ-Ticks
|
||||
|
||||
private:
|
||||
static int64_t
|
||||
waterLevel (Time time)
|
||||
|
|
|
|||
|
|
@ -296,6 +296,7 @@ namespace test {
|
|||
|
||||
queue.instruct (a3, t3); // activity scheduled into the future
|
||||
CHECK (not sched.findWork (queue, now)); // for time `now` not found
|
||||
CHECK (t3 == queue.headTime());
|
||||
|
||||
queue.instruct (a1, t1);
|
||||
CHECK (isSameObject (a1, *sched.findWork(queue, now))); // but past activity is found
|
||||
|
|
@ -303,7 +304,8 @@ namespace test {
|
|||
|
||||
queue.instruct (a2, t2);
|
||||
CHECK (isSameObject (a2, *sched.findWork(queue, now))); // activity scheduled for `now` is found
|
||||
CHECK (not sched.findWork (queue, now));
|
||||
CHECK (not sched.findWork (queue, now)); // nothing more found for `now`
|
||||
CHECK (t3 == queue.headTime());
|
||||
CHECK (not queue.empty()); // yet the future activity a3 is still queued...
|
||||
|
||||
CHECK (isSameObject (a3, *sched.findWork(queue, t3))); // ...and will be found when querying "later"
|
||||
|
|
@ -312,14 +314,16 @@ namespace test {
|
|||
|
||||
queue.instruct (a2, t2);
|
||||
queue.instruct (a1, t1);
|
||||
CHECK (t1 == queue.headTime());
|
||||
CHECK (isSameObject (a1, *sched.findWork(queue, now))); // the earlier activity is found first
|
||||
CHECK (t2 == queue.headTime());
|
||||
CHECK (isSameObject (a2, *sched.findWork(queue, now)));
|
||||
CHECK (not sched.findWork (queue, now));
|
||||
CHECK ( queue.empty());
|
||||
|
||||
queue.instruct (a2, t2); // prepare activity which /would/ be found...
|
||||
blockGroomingToken(sched); // but prevent this thread from acquiring the GroomingToken
|
||||
CHECK (not sched.findWork (queue, now)); // thus search aborts out immediately
|
||||
CHECK (not sched.findWork (queue, now)); // thus search aborts immediately
|
||||
CHECK (not queue.empty());
|
||||
|
||||
unblockGroomingToken(); // yet when we're able to get the GroomingToken
|
||||
|
|
@ -329,8 +333,8 @@ namespace test {
|
|||
|
||||
|
||||
|
||||
/** @test TODO verify entrance point for performing an Activity chain.
|
||||
* @todo WIP 10/23 ✔ define ⟶ 🔁 implement
|
||||
/** @test verify entrance point for performing an Activity chain.
|
||||
* @todo WIP 10/23 ✔ define ⟶ ✔ implement
|
||||
*/
|
||||
void
|
||||
verify_postDispatch()
|
||||
|
|
@ -360,7 +364,7 @@ namespace test {
|
|||
CHECK (detector.verifyInvocation("testActivity").timeArg(now)); // was invoked immediately
|
||||
CHECK ( sched.holdsGroomingToken (myself));
|
||||
CHECK ( queue.empty());
|
||||
detector.incrementSeq(); // mark this point in the log
|
||||
detector.incrementSeq(); // Seq-point-1 in the detector log
|
||||
|
||||
// future Activity is enqueued by short-circuit directly into the PriorityQueue if possible
|
||||
CHECK (activity::PASS == sched.postDispatch (&activity, future, detector.executionCtx, queue));
|
||||
|
|
@ -385,8 +389,24 @@ namespace test {
|
|||
CHECK (not sched.holdsGroomingToken (myself));
|
||||
CHECK (not queue.peekHead()); // was enqueued, not executed
|
||||
|
||||
// Note: this test achieved a single direct invocation;
|
||||
// all further cases after Seq-point-1 were queued only
|
||||
CHECK (detector.ensureNoInvocation("testActivity")
|
||||
.afterSeqIncrement(1));
|
||||
|
||||
// As sanity-check: after the point where we purged the queue
|
||||
// two further cases where enqueued; we could retrieve them if
|
||||
// re-acquiring the GroomingToken and using suitable query-time
|
||||
unblockGroomingToken();
|
||||
cout << detector.showLog()<<endl; // HINT: use this for investigation...
|
||||
queue.feedPrioritisation();
|
||||
CHECK (now == queue.headTime());
|
||||
CHECK (isSameObject (activity, *sched.findWork(queue, now)));
|
||||
CHECK (sched.holdsGroomingToken (myself));
|
||||
CHECK (future == queue.headTime());
|
||||
CHECK (not queue.isDue(now));
|
||||
CHECK ( queue.isDue(future));
|
||||
CHECK (sched.findWork(queue, future));
|
||||
CHECK ( queue.empty());
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -398,6 +418,7 @@ namespace test {
|
|||
integratedWorkCycle()
|
||||
{
|
||||
UNIMPLEMENTED ("integratedWorkCycle");
|
||||
// cout << detector.showLog()<<endl; // HINT: use this for investigation...
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -79573,7 +79573,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1687908607797" ID="ID_989605795" MODIFIED="1687908674373" TEXT="Implementierung des Verhaltens">
|
||||
<arrowlink COLOR="#7f362f" DESTINATION="ID_1214627402" ENDARROW="Default" ENDINCLINATION="-265;-25;" ID="Arrow_ID_1834773150" STARTARROW="None" STARTINCLINATION="-686;57;"/>
|
||||
<arrowlink COLOR="#7f362f" DESTINATION="ID_1214627402" ENDARROW="Default" ENDINCLINATION="-349;-37;" ID="Arrow_ID_1834773150" STARTARROW="None" STARTINCLINATION="-686;57;"/>
|
||||
<linktarget COLOR="#6a668f" DESTINATION="ID_989605795" ENDARROW="Default" ENDINCLINATION="-303;1079;" ID="Arrow_ID_180378517" SOURCE="ID_72274125" STARTARROW="None" STARTINCLINATION="-786;38;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1687908684071" ID="ID_814820281" MODIFIED="1687908690152" TEXT="im Scheduler Layer-2">
|
||||
|
|
@ -84855,7 +84855,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1680565476652" ID="ID_1218283238" MODIFIED="1684973201854" TEXT="Dependency-Notification">
|
||||
<linktarget COLOR="#fec499" DESTINATION="ID_1218283238" ENDARROW="Default" ENDINCLINATION="-664;74;" ID="Arrow_ID_443600884" SOURCE="ID_695181807" STARTARROW="None" STARTINCLINATION="-240;29;"/>
|
||||
<node CREATED="1685029743471" ID="ID_662250285" MODIFIED="1685029748808" TEXT="Benachrichtigungen">
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1685029752445" ID="ID_1073371022" MODIFIED="1685029779621" TEXT="wohin? andere Threads ⟹ lock-free Messaging-Queue">
|
||||
<node COLOR="#435e98" CREATED="1685029752445" ID="ID_1073371022" MODIFIED="1697642160212" TEXT="wohin? andere Threads ⟹ lock-free Messaging-Queue">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1687788312178" ID="ID_1597757912" MODIFIED="1687788330482">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
|
|
@ -84867,6 +84867,11 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1697642122889" ID="ID_1019049385" MODIFIED="1697642132542" TEXT="Benachrichtigungen sind dann wieder Activities"/>
|
||||
<node CREATED="1697642135639" ID="ID_1400416851" MODIFIED="1697642157800" TEXT="kann auch aus Activity-activation heraus verwendet werden"/>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1697642165334" ID="ID_749814153" MODIFIED="1697642194176" TEXT="⟹ sonstige Arten von Benachrichtigungen sind anderweitig zu implementieren">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1685029812065" ID="ID_930725673" MODIFIED="1685029830507" TEXT="welcher Art Nachrichten treten auf?">
|
||||
<icon BUILTIN="help"/>
|
||||
|
|
@ -84996,9 +85001,9 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697475170816" HGAP="36" ID="ID_1920465683" MODIFIED="1697475181832" TEXT="API festlegen" VSHIFT="7">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697475184438" ID="ID_140675790" MODIFIED="1697475203063" TEXT="bisher treten zwei verschiedene Perspektiven auf">
|
||||
<node COLOR="#338800" CREATED="1697475170816" HGAP="36" ID="ID_1920465683" MODIFIED="1697642019595" TEXT="API festlegen" VSHIFT="7">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1697475184438" ID="ID_140675790" MODIFIED="1697641966678" TEXT="bisher treten zwei verschiedene Perspektiven auf">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1697475204580" ID="ID_17372466" MODIFIED="1697475216748" TEXT="Layer-2 als Ausführungs-Kette">
|
||||
<node CREATED="1697482695414" ID="ID_1741555904" MODIFIED="1697482816448" TEXT="und zwar insofern stets einige Schritte strukturiert vollzogen werden müssen">
|
||||
|
|
@ -85012,7 +85017,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1697482864748" ID="ID_696380968" MODIFIED="1697482909359" TEXT="konkret müssen die ExecutionCtx-λ implementiert werden"/>
|
||||
<node CREATED="1697482924537" ID="ID_1521505068" MODIFIED="1697482960792" TEXT="jeweils mit sehr spezifischer Logik hinterlegt ⟶ GroomingToken"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1697475301927" ID="ID_538072997" MODIFIED="1697475325940" TEXT="diese Perspektiven scheinen sich zu widersprechen">
|
||||
<node COLOR="#690f14" CREATED="1697475301927" ID="ID_538072997" MODIFIED="1697641995738" TEXT="diese Perspektiven scheinen sich zu widersprechen">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1697482590548" ID="ID_751862810" MODIFIED="1697482639262" TEXT="die erste Betrachtungsweise ist wohl inzwischen überholt">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -85061,8 +85066,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1697553556862" ID="ID_239855477" MODIFIED="1697639869887" TEXT="PostDispatch">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1697553556862" ID="ID_239855477" MODIFIED="1697641958566" TEXT="PostDispatch">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1697553564965" ID="ID_280879756" MODIFIED="1697553576815" TEXT="der »POST-Eingang«">
|
||||
<icon BUILTIN="ksmiletris"/>
|
||||
</node>
|
||||
|
|
@ -85200,7 +85205,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1697579673554" ID="ID_85549667" MODIFIED="1697579682709" TEXT="GroomingToken muß erlangt werden"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1697579748287" ID="ID_1583484788" MODIFIED="1697579771817" TEXT="⟹ nur die letzten beiden Fälle">
|
||||
<node COLOR="#338800" CREATED="1697579748287" ID="ID_1583484788" MODIFIED="1697642087904" TEXT="⟹ nur die letzten beiden Fälle">
|
||||
<node CREATED="1697579774229" ID="ID_1513919615" MODIFIED="1697583362689" TEXT="und zwar fallen sie sogar zusammen">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
|
|
@ -85353,9 +85358,11 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<arrowlink COLOR="#dae9fa" DESTINATION="ID_1532008023" ENDARROW="Default" ENDINCLINATION="-184;505;" ID="Arrow_ID_61418953" STARTARROW="None" STARTINCLINATION="630;34;"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1687908576983" ID="ID_1214627402" MODIFIED="1687908674373" TEXT="operationale Semantik">
|
||||
<linktarget COLOR="#7f362f" DESTINATION="ID_1214627402" ENDARROW="Default" ENDINCLINATION="-265;-25;" ID="Arrow_ID_1834773150" SOURCE="ID_989605795" STARTARROW="None" STARTINCLINATION="-686;57;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1687908576983" ID="ID_1214627402" MODIFIED="1692745540218" TEXT="operationale Semantik">
|
||||
<cloud COLOR="#d4bba1"/>
|
||||
<linktarget COLOR="#7f362f" DESTINATION="ID_1214627402" ENDARROW="Default" ENDINCLINATION="-349;-37;" ID="Arrow_ID_1834773150" SOURCE="ID_989605795" STARTARROW="None" STARTINCLINATION="-686;57;"/>
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1687908771624" ID="ID_389533415" MODIFIED="1687908782901" TEXT="Grundsätzlich: verkettete Terme werden nacheinander aktiviert"/>
|
||||
<node CREATED="1687908847686" ID="ID_1934270653" MODIFIED="1687908851049" TEXT="Job ausführen">
|
||||
<node CREATED="1687908853373" ID="ID_212238089" MODIFIED="1687994616711" TEXT="Gate-Check"/>
|
||||
|
|
@ -86344,8 +86351,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1697560546952" ID="ID_1326942653" MODIFIED="1697636543682" TEXT="verify_postDispatch">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1697560546952" ID="ID_1326942653" MODIFIED="1697641948262" TEXT="verify_postDispatch">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1697630618833" ID="ID_1032090324" MODIFIED="1697630748734" TEXT="Szenarien">
|
||||
<linktarget COLOR="#9ca0a6" DESTINATION="ID_1032090324" ENDARROW="Default" ENDINCLINATION="-719;-92;" ID="Arrow_ID_1412557043" SOURCE="ID_1337049621" STARTARROW="None" STARTINCLINATION="-335;509;"/>
|
||||
<icon BUILTIN="list"/>
|
||||
|
|
@ -86362,11 +86369,11 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node COLOR="#338800" CREATED="1697631076959" ID="ID_1560926553" MODIFIED="1697636530700" TEXT="verwende ActivityProbe als Test-Activity">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697636534920" ID="ID_148488011" MODIFIED="1697636539419" TEXT="Match auf Event-Log">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1697636534920" ID="ID_148488011" MODIFIED="1697641946005" TEXT="Match auf Event-Log">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697639822205" ID="ID_182534070" MODIFIED="1697639828532" TEXT="Queue-Zustand prüfen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1697639822205" ID="ID_182534070" MODIFIED="1697641946781" TEXT="Queue-Zustand prüfen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue