Scheduler: draft high-level API for building a Job schedule
The invocation structure is effectively determined by the Activity-chain builder from the Activity-Language; but, taking into account the complexity of the Scheduler code developed thus far, it seems prudent to encapsulate the topic of "Activities" altogether and expose only a convenience builder-API towards the Job-Planning
This commit is contained in:
parent
c377ac7d46
commit
86b90fbf84
5 changed files with 172 additions and 17 deletions
|
|
@ -147,6 +147,46 @@ namespace gear {
|
|||
|
||||
|
||||
|
||||
class ScheduleSpec
|
||||
{
|
||||
Job job_;
|
||||
|
||||
public:
|
||||
ScheduleSpec (Job job)
|
||||
: job_{job}
|
||||
{ }
|
||||
|
||||
ScheduleSpec
|
||||
startOffset (microseconds microTicks)
|
||||
{
|
||||
UNIMPLEMENTED ("start offset");
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
ScheduleSpec
|
||||
lifeWindow (microseconds microTicks)
|
||||
{
|
||||
UNIMPLEMENTED ("deadline relative to starts");
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
ScheduleSpec
|
||||
manifestation (ManifestationID manID)
|
||||
{
|
||||
UNIMPLEMENTED ("store manifestation-ID");
|
||||
return move(*this);
|
||||
}
|
||||
|
||||
ScheduleSpec
|
||||
post()
|
||||
{
|
||||
UNIMPLEMENTED ("build chain and hand-over into queue");
|
||||
return move(*this);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/******************************************************//**
|
||||
* »Scheduler-Service« : coordinate render activities.
|
||||
* @todo WIP-WIP 10/2023
|
||||
|
|
@ -248,8 +288,8 @@ namespace gear {
|
|||
/**
|
||||
*
|
||||
*/
|
||||
void
|
||||
buildJob()
|
||||
ScheduleSpec
|
||||
defineSchedule (Job job)
|
||||
{
|
||||
UNIMPLEMENTED("wrap the ActivityTerm");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -73,7 +73,9 @@ namespace gear {
|
|||
using std::atomic;
|
||||
using util::unConst;
|
||||
using std::chrono::milliseconds;
|
||||
using std::chrono::microseconds;
|
||||
using std::chrono_literals::operator ""ms;
|
||||
using std::chrono_literals::operator ""us;
|
||||
using std::this_thread::sleep_for;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -368,7 +368,7 @@ namespace test {
|
|||
Time t2{20,0}; Activity a2{2u,2u};
|
||||
Time t3{30,0}; Activity a3{3u,3u};
|
||||
Time t4{40,0}; Activity a4{4u,4u};
|
||||
|
||||
// start,deadline, manif.ID, isCompulsory
|
||||
queue.instruct ({a1, t1, t4, ManifestationID{5}});
|
||||
queue.instruct ({a2, t2, t2});
|
||||
queue.instruct ({a3, t3, t3, ManifestationID{23}, true});
|
||||
|
|
@ -497,7 +497,7 @@ namespace test {
|
|||
queue.feedPrioritisation();
|
||||
CHECK (now == queue.headTime());
|
||||
CHECK (isSameObject (activity, *sched.findWork(queue, now)));
|
||||
CHECK (sched.holdsGroomingToken (myself));
|
||||
CHECK (sched.holdsGroomingToken (myself)); // findWork() acquired the token
|
||||
CHECK (future == queue.headTime());
|
||||
CHECK (not queue.isDue(now));
|
||||
CHECK ( queue.isDue(future));
|
||||
|
|
|
|||
|
|
@ -80,10 +80,11 @@ namespace test {
|
|||
virtual void
|
||||
run (Arg)
|
||||
{
|
||||
// simpleUsage();
|
||||
// verify_StartStop();
|
||||
simpleUsage();
|
||||
verify_StartStop();
|
||||
verify_LoadFactor();
|
||||
// invokeWorkFunction();
|
||||
invokeWorkFunction();
|
||||
scheduleRenderJob();
|
||||
walkingDeadline();
|
||||
}
|
||||
|
||||
|
|
@ -137,7 +138,7 @@ namespace test {
|
|||
/** @test verify the scheduler processes scheduled events,
|
||||
* indicates current load and winds down automatically
|
||||
* when falling empty.
|
||||
* - placing short bursts of single FEED-Activities
|
||||
* - schedule short bursts of single FEED-Activities
|
||||
* - these actually do nothing and can be processed typically < 5µs
|
||||
* - placing them spaced by 1µs, so the scheduler will build up congestion
|
||||
* - since this Activity does not drop the »grooming-token«, actually only
|
||||
|
|
@ -146,12 +147,14 @@ namespace test {
|
|||
* - when reaching the scheduler »tick«, the queue should be empty
|
||||
* and the scheduler will stop active processing
|
||||
* - the main thread (this test) polls every 50µs to observe the load
|
||||
* - after 2 seconds of idle-sleeping, the WorkForce is disengaged
|
||||
* - verify the expected load pattern
|
||||
* @todo WIP 10/23 ✔ define ⟶ ✔ implement
|
||||
*/
|
||||
void
|
||||
verify_LoadFactor()
|
||||
{
|
||||
MARK_TEST_FUN
|
||||
BlockFlowAlloc bFlow;
|
||||
EngineObserver watch;
|
||||
Scheduler scheduler{bFlow, watch};
|
||||
|
|
@ -284,19 +287,20 @@ namespace test {
|
|||
* + after dispatching an Activity in a situation with no follow-up work,
|
||||
* the work-function inserts a targeted sleep of random duration,
|
||||
* to re-shuffle the rhythm of sleep cycles
|
||||
* + when the next planned Activity has already be »tended for« (by placing
|
||||
* + when the next planned Activity was already »tended for« (by placing
|
||||
* another worker into a targeted sleep), further workers entering the
|
||||
* work-function will be re-targeted by a random sleep to focus capacity
|
||||
* into a time zone behind the next entry.
|
||||
* @note Invoke the Activity probe itself can take 50..150µs, due to the EventLog,
|
||||
* @note Invoking the Activity probe itself can take 50..150µs, due to the EventLog,
|
||||
* which is not meant to be used in performance critical paths but only for tests,
|
||||
* because it performs lots of heap allocations and string operations. Moreover,
|
||||
* we see additional cache effects after an extended sleep period.
|
||||
* @todo WIP 10/23 🔁 define ⟶ implement
|
||||
* @todo WIP 10/23 ✔ define ⟶ ✔ implement
|
||||
*/
|
||||
void
|
||||
invokeWorkFunction()
|
||||
{
|
||||
MARK_TEST_FUN
|
||||
BlockFlowAlloc bFlow;
|
||||
EngineObserver watch;
|
||||
Scheduler scheduler{bFlow, watch};
|
||||
|
|
@ -310,7 +314,7 @@ namespace test {
|
|||
activity::Proc res;
|
||||
|
||||
auto post = [&](Time start)
|
||||
{ // this test class is declared friend to get a backdoor to Scheduler internals...
|
||||
{ // this test class is declared friend to get a backdoor into Scheduler internals...
|
||||
scheduler.layer2_.acquireGoomingToken();
|
||||
scheduler.postChain(ActivationEvent{probe, start});
|
||||
};
|
||||
|
|
@ -436,6 +440,47 @@ namespace test {
|
|||
|
||||
|
||||
|
||||
/** @test TODO schedule a render job through the high-level Job-builder API.
|
||||
* - use the mock Job-Functor provided by the ActivityDetector
|
||||
* @todo WIP 11/23 ✔ define ⟶ 🔁 implement
|
||||
*/
|
||||
void
|
||||
scheduleRenderJob()
|
||||
{
|
||||
MARK_TEST_FUN
|
||||
BlockFlowAlloc bFlow;
|
||||
EngineObserver watch;
|
||||
Scheduler scheduler{bFlow, watch};
|
||||
|
||||
Time nominal{7,7};
|
||||
Time start{0,1};
|
||||
Time dead{0,10};
|
||||
|
||||
ActivityDetector detector;
|
||||
Job testJob{detector.buildMockJob("testJob", nominal, 1337)};
|
||||
|
||||
CHECK (scheduler.empty());
|
||||
scheduler.defineSchedule(testJob)
|
||||
.startOffset(200us)
|
||||
.lifeWindow (1ms)
|
||||
.manifestation(ManifestationID{55})
|
||||
.post();
|
||||
|
||||
CHECK (not scheduler.empty());
|
||||
CHECK (detector.ensureNoInvocation("testJob"));
|
||||
|
||||
sleep_for(400us);
|
||||
CHECK (detector.ensureNoInvocation("testJob"));
|
||||
|
||||
CHECK (activity::PASS == scheduler.getWork());
|
||||
CHECK (scheduler.empty());
|
||||
|
||||
cout << detector.showLog()<<endl; // HINT: use this for investigation...
|
||||
CHECK (detector.verifyInvocation("testJob"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** @test TODO
|
||||
* @todo WIP 10/23 🔁 define ⟶ implement
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -81996,7 +81996,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
....das hat sich allerdings schon aus der Analyse des Pull-Processing im Node-Network so ergeben, denn dort geht man von der ExitNode rückwärts; damals konnte ich nicht vorhersehen, wie die Situation im Scheduler sich darstellen wird — möglicherweise verbirg sich eine tiefere, strukturelle Konvergenz dahinter, daß das jetzt so <i>schön aufgeht</i>
|
||||
....das hat sich allerdings schon aus der Analyse des Pull-Processing im Node-Network so ergeben, denn dort geht man von der ExitNode rückwärts; damals konnte ich nicht vorhersehen, wie die Situation im Scheduler sich darstellen wird — möglicherweise verbirgt sich eine tiefere, strukturelle Konvergenz dahinter, daß das jetzt so <i>schön aufgeht</i>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
|
|
@ -82029,6 +82029,14 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698937122167" ID="ID_4829396" MODIFIED="1698937490736" TEXT="kann dort Inteface-Typen definieren">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1699245684722" ID="ID_1883772504" MODIFIED="1699245829024" TEXT="Zusammenarbeit mit SchedulerService ermöglichen">
|
||||
<linktarget COLOR="#fedfb1" DESTINATION="ID_1883772504" ENDARROW="Default" ENDINCLINATION="-261;14;" ID="Arrow_ID_416423581" SOURCE="ID_788545423" STARTARROW="None" STARTINCLINATION="242;-83;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1699245702520" ID="ID_1053537499" MODIFIED="1699245792944" TEXT="möglichst wenig virtuelle Funktionen">
|
||||
<linktarget COLOR="#d06592" DESTINATION="ID_1053537499" ENDARROW="Default" ENDINCLINATION="212;16;" ID="Arrow_ID_1604416829" SOURCE="ID_1282593493" STARTARROW="None" STARTINCLINATION="319;-10;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1698936458463" ID="ID_1013196495" MODIFIED="1698936467425" TEXT="bedeutet: virtuelle Funktionen">
|
||||
|
|
@ -82067,8 +82075,9 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<arrowlink COLOR="#2f9552" DESTINATION="ID_492054934" ENDARROW="Default" ENDINCLINATION="-315;-355;" ID="Arrow_ID_1566437327" STARTARROW="None" STARTINCLINATION="253;14;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697756908166" ID="ID_1142273023" MODIFIED="1698945492703" TEXT="Wrapper-Builder um den Activity-Term legen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1697756908166" ID="ID_1142273023" MODIFIED="1699246415190" TEXT="Wrapper-Builder um den Activity-Term legen">
|
||||
<linktarget COLOR="#f4336b" DESTINATION="ID_1142273023" ENDARROW="Default" ENDINCLINATION="-737;663;" ID="Arrow_ID_891496003" SOURCE="ID_175313196" STARTARROW="None" STARTINCLINATION="1218;-76;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698945250261" ID="ID_780386157" MODIFIED="1698946166942" TEXT="Zusatz-Angaben zur Relevanz">
|
||||
<linktarget COLOR="#3d3aa9" DESTINATION="ID_780386157" ENDARROW="Default" ENDINCLINATION="69;74;" ID="Arrow_ID_103420327" SOURCE="ID_1778628995" STARTARROW="None" STARTINCLINATION="317;25;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -82076,6 +82085,40 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1698947287399" ID="ID_391005911" LINK="#ID_1426746639" MODIFIED="1698947345862" TEXT="Job-Deadline auf API verpflichtend">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699245520392" ID="ID_1677467445" MODIFIED="1699246079335" TEXT="Builder-Funktionen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699245533215" ID="ID_1666620904" MODIFIED="1699246017062" TEXT="relative Zeitangabe">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1699246024149" ID="ID_329731071" MODIFIED="1699246029581" TEXT="absolute Zeitangabe">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1699246030839" HGAP="86" ID="ID_685534906" MODIFIED="1699246062128" TEXT="(mal warten wie die Job-Planung ausfällt)" VSHIFT="1">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="9"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699245538409" ID="ID_1074993324" MODIFIED="1699246017064" TEXT="hier auch schon mal std::chrono mit integrieren (für Tests)">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699245552636" ID="ID_1654937511" MODIFIED="1699246017063" TEXT="relative Deadline">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699245562635" ID="ID_1277275368" MODIFIED="1699246017063" TEXT="weitere Setter">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699245577969" ID="ID_1964298619" MODIFIED="1699246079334" TEXT="post() ausführen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1699245611846" ID="ID_788545423" MODIFIED="1699245919549" TEXT="Definitions-Struktur und Code-Anordnung klären">
|
||||
<arrowlink COLOR="#fedfb1" DESTINATION="ID_1883772504" ENDARROW="Default" ENDINCLINATION="-261;14;" ID="Arrow_ID_416423581" STARTARROW="None" STARTINCLINATION="242;-83;"/>
|
||||
<arrowlink COLOR="#f5dffd" DESTINATION="ID_3688190" ENDARROW="Default" ENDINCLINATION="-410;-597;" ID="Arrow_ID_1041094005" STARTARROW="None" STARTINCLINATION="-664;318;"/>
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<node CREATED="1699245733434" ID="ID_1697507405" MODIFIED="1699245746917" TEXT="die post()-Implementierung muß den eigentlichen Scheduler sehen"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1699245761304" ID="ID_1282593493" MODIFIED="1699245799661" TEXT="eine Indirektion ist unvermeidbar; fragt sich bloß wo?">
|
||||
<arrowlink COLOR="#d06592" DESTINATION="ID_1053537499" ENDARROW="Default" ENDINCLINATION="212;16;" ID="Arrow_ID_1604416829" STARTARROW="None" STARTINCLINATION="319;-10;"/>
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697757025906" ID="ID_180161439" MODIFIED="1697757063868" TEXT="seedCalcStream()">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -83199,7 +83242,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1698524123493" HGAP="7" ID="ID_3688190" MODIFIED="1698524141896" TEXT="Code-Anordnung festlegen" VSHIFT="5">
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1698524123493" HGAP="7" ID="ID_3688190" MODIFIED="1699245904190" TEXT="Code-Anordnung festlegen" VSHIFT="5">
|
||||
<linktarget COLOR="#f5dffd" DESTINATION="ID_3688190" ENDARROW="Default" ENDINCLINATION="-410;-597;" ID="Arrow_ID_1041094005" SOURCE="ID_788545423" STARTARROW="None" STARTINCLINATION="-664;318;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698524143083" ID="ID_1366033191" MODIFIED="1698524154797" TEXT="Speicher-Ort für eine Service-Instanz">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -83222,6 +83266,15 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1698524289134" ID="ID_624223134" MODIFIED="1698524295738" TEXT="diese inlined die Scheduler-Internals"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699245952137" ID="ID_1391908403" MODIFIED="1699245964386" TEXT="Job-Definition (Builder) berücksichtigen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1699245966828" ID="ID_1446058222" MODIFIED="1699245979843" TEXT="der ist im API-Header definiert">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1699245983155" ID="ID_1339797501" MODIFIED="1699245999081" TEXT="braucht aber Zugang zur Implementierung">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1693172069235" ID="ID_1573845677" MODIFIED="1697675305351" TEXT="Layer-1: SchedulerInvocation"/>
|
||||
|
|
@ -84046,8 +84099,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1697982436029" ID="ID_288711039" MODIFIED="1698808212796" TEXT="Test">
|
||||
<arrowlink COLOR="#56a5a9" DESTINATION="ID_488605324" ENDARROW="Default" ENDINCLINATION="457;-68;" ID="Arrow_ID_1794430254" STARTARROW="None" STARTINCLINATION="-752;0;"/>
|
||||
<arrowlink COLOR="#56a5a9" DESTINATION="ID_1292738036" ENDARROW="Default" ENDINCLINATION="286;-465;" ID="Arrow_ID_367470516" STARTARROW="None" STARTINCLINATION="-752;0;"/>
|
||||
<arrowlink COLOR="#56a5a9" DESTINATION="ID_488605324" ENDARROW="Default" ENDINCLINATION="457;-68;" ID="Arrow_ID_1794430254" STARTARROW="None" STARTINCLINATION="-752;0;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1698521316395" ID="ID_1194473945" MODIFIED="1698521326921" TEXT="kann im Test die Timing/Sleep-Muster zeigen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -90046,6 +90099,12 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1698275570360" ID="ID_1639263149" MODIFIED="1698275580859" TEXT="leere work-Function: 2µs"/>
|
||||
<node CREATED="1698275583014" ID="ID_1884559465" MODIFIED="1698275618806" TEXT="post() einstellen ⟶ Dispatch: 5µs"/>
|
||||
</node>
|
||||
<node CREATED="1699241559870" ID="ID_272897929" MODIFIED="1699241563925" TEXT="-O0">
|
||||
<node CREATED="1699241565249" ID="ID_290905521" MODIFIED="1699241579030" TEXT="komplett-Dispatch FEED-Activity: 5µs"/>
|
||||
<node CREATED="1699241580463" ID="ID_1046781011" MODIFIED="1699241588749" TEXT="(wenn Cache heiß)">
|
||||
<font NAME="SansSerif" SIZE="10"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1697758391611" ID="ID_124711923" MODIFIED="1697758397083" TEXT="Fälle">
|
||||
|
|
@ -92117,6 +92176,15 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1699243246184" ID="ID_834498549" MODIFIED="1699245502339" TEXT="scheduleRenderJob">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1699243261338" ID="ID_266519660" MODIFIED="1699243272937" TEXT="verwendet einen Job vom ActivityDetector"/>
|
||||
<node CREATED="1699243350122" ID="ID_175313196" MODIFIED="1699246395229" TEXT="übergibt den per Builder-API an den Scheduler">
|
||||
<arrowlink COLOR="#f4336b" DESTINATION="ID_1142273023" ENDARROW="Default" ENDINCLINATION="-737;663;" ID="Arrow_ID_891496003" STARTARROW="None" STARTINCLINATION="1218;-76;"/>
|
||||
</node>
|
||||
<node CREATED="1699243361425" ID="ID_565283839" MODIFIED="1699243380530" TEXT="ruft die work-Function direkt auf (keine WorkForce!)"/>
|
||||
<node CREATED="1699243391733" ID="ID_1214068544" MODIFIED="1699243397136" TEXT="verifiziert Aufruf per Log"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697755558855" ID="ID_278365674" MODIFIED="1697741858009" TEXT="SchedulerStress_test">
|
||||
|
|
|
|||
Loading…
Reference in a new issue