Scheduler: support for classification data in Layer-1
- this is prerequisite to check for significance of the head entry - implement and verify the information functions at Layer-1
This commit is contained in:
parent
7887941c89
commit
d622b59dfd
5 changed files with 311 additions and 64 deletions
|
|
@ -50,7 +50,7 @@ namespace gear {
|
|||
HashVal
|
||||
hash_value (ManifestationID const& id)
|
||||
{
|
||||
return hash_value (uint32_t{id});
|
||||
return boost::hash_value (uint32_t{id});
|
||||
}
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////TODO extract scheduler-API
|
||||
|
||||
|
|
|
|||
|
|
@ -49,9 +49,11 @@
|
|||
#include "lib/nocopy.hpp"
|
||||
#include "vault/gear/activity.hpp"
|
||||
#include "lib/time/timevalue.hpp"
|
||||
#include "lib/util.hpp"
|
||||
|
||||
#include <queue>
|
||||
#include <boost/lockfree/queue.hpp>
|
||||
#include <unordered_set>
|
||||
#include <utility>
|
||||
|
||||
namespace vault{
|
||||
|
|
@ -72,6 +74,7 @@ namespace gear {
|
|||
* Manages pointers to _Render Activity records._
|
||||
* - new entries passed in through the #instruct_ queue
|
||||
* - time based prioritisation in the #priority_ queue
|
||||
* @warning not threadsafe; requires Layer-2 to coordinate.
|
||||
* @see Scheduler
|
||||
* @see SchedulerInvocation_test
|
||||
*/
|
||||
|
|
@ -88,6 +91,7 @@ namespace gear {
|
|||
uint32_t manifestationID :32;
|
||||
char :0;
|
||||
bool isCompulsory :1;
|
||||
///////////////////////////////////////////////////////////////////////////TICKET #1245 : use direct bit-field initialiser in C++20
|
||||
|
||||
/** @internal ordering function for time based scheduling
|
||||
* @note reversed order as required by std::priority_queue
|
||||
|
|
@ -98,21 +102,22 @@ namespace gear {
|
|||
{
|
||||
return waterlevel > o.waterlevel;
|
||||
}
|
||||
|
||||
ActOrder() =default; //////////////////////////////////////////////////////////////////////////////TICKET #1245 : use direct bit-field initialiser in C++20
|
||||
};
|
||||
|
||||
using InstructQueue = boost::lockfree::queue<ActOrder>;
|
||||
using PriorityQueue = std::priority_queue<ActOrder>;
|
||||
using ActivationSet = std::unordered_set<ManifestationID>;
|
||||
|
||||
InstructQueue instruct_;
|
||||
PriorityQueue priority_;
|
||||
|
||||
ActivationSet allowed_;
|
||||
|
||||
public:
|
||||
SchedulerInvocation()
|
||||
: instruct_{INITIAL_CAPACITY}
|
||||
, priority_{}
|
||||
, allowed_{}
|
||||
{ }
|
||||
|
||||
|
||||
|
|
@ -201,6 +206,26 @@ namespace gear {
|
|||
return activity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable entries marked with a specific ManifestationID to be processed.
|
||||
* By default, entries are marked with the default ManifestationID, which
|
||||
* is always implicitly activated. Any other ID must be actively allowed,
|
||||
* otherwise the entry is deemed [outdated](\ref isOutdated) and will
|
||||
* be silently discarded in regular processing by Layer-2.
|
||||
* @remark this feature allows to supersede part of a schedule
|
||||
*/
|
||||
void
|
||||
activate (ManifestationID manID)
|
||||
{
|
||||
allowed_.insert (manID);
|
||||
}
|
||||
|
||||
void
|
||||
drop (ManifestationID manID)
|
||||
{
|
||||
allowed_.erase (manID);
|
||||
}
|
||||
|
||||
|
||||
/* ===== query functions ===== */
|
||||
|
||||
|
|
@ -211,12 +236,41 @@ namespace gear {
|
|||
return not priority_.empty()
|
||||
and priority_.top().waterlevel <= waterLevel(now);
|
||||
}
|
||||
|
||||
/** detect a compulsory Activity with missed deadline */
|
||||
|
||||
/** determine if Activity at scheduler head missed it's deadline
|
||||
* @warning due to memory management, such an Activity must not be dereferenced */
|
||||
bool
|
||||
isOutOfTime() const
|
||||
isMissed (Time now) const
|
||||
{
|
||||
return false; /////////////////////////////////////////////////////////////////OOO compulsory Activities
|
||||
return not priority_.empty()
|
||||
and waterLevel(now) > priority_.top().deathlevel;
|
||||
}
|
||||
|
||||
/** determine if Activities with the given ManifestationID shall be processed */
|
||||
bool
|
||||
isActivated (ManifestationID manID) const
|
||||
{
|
||||
return manID == ManifestationID()
|
||||
or util::contains (allowed_, manID);
|
||||
}
|
||||
|
||||
/** determine if Activity at scheduler is outdated and should be discarded */
|
||||
bool
|
||||
isOutdated (Time now) const
|
||||
{
|
||||
return isMissed (now)
|
||||
or (not priority_.empty()
|
||||
and not isActivated (priority_.top().manifestationID));
|
||||
}
|
||||
|
||||
/** detect a compulsory Activity at scheduler head with missed deadline */
|
||||
bool
|
||||
isOutOfTime (Time now) const
|
||||
{
|
||||
return isMissed (now)
|
||||
and (not priority_.empty()
|
||||
and priority_.top().isCompulsory
|
||||
and isActivated (priority_.top().manifestationID));
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
|||
|
|
@ -518,7 +518,7 @@ namespace gear {
|
|||
// consolidate queue content
|
||||
layer1_.feedPrioritisation();
|
||||
//////////////////////////////////////////////////////////////////////OOO clean-up of outdated tasks here
|
||||
if (layer1_.isOutOfTime())
|
||||
if (layer1_.isOutOfTime (now))
|
||||
{
|
||||
triggerEmergency();
|
||||
return; // leave everything as-is
|
||||
|
|
|
|||
|
|
@ -69,10 +69,11 @@ namespace test {
|
|||
SchedulerInvocation sched;
|
||||
Activity activity;
|
||||
Time when{1,2,3};
|
||||
Time dead{2,3,4};
|
||||
|
||||
CHECK (not sched.peekHead());
|
||||
|
||||
sched.instruct (activity, when);
|
||||
sched.instruct (activity, when, dead);
|
||||
sched.feedPrioritisation();
|
||||
CHECK (sched.peekHead());
|
||||
|
||||
|
|
@ -106,6 +107,7 @@ namespace test {
|
|||
CHECK (isSameObject (*sched.pullHead(), two));
|
||||
CHECK (isSameObject (*sched.pullHead(), ree));
|
||||
CHECK (not sched.peekHead());
|
||||
CHECK (sched.empty());
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -142,36 +144,6 @@ namespace test {
|
|||
|
||||
|
||||
|
||||
/** @test verify that obsoleted or rejected entries are dropped transparently
|
||||
*/
|
||||
void
|
||||
verify_Significance()
|
||||
{
|
||||
SchedulerInvocation sched;
|
||||
Activity a1{1u,1u};
|
||||
Activity a2{2u,2u};
|
||||
Activity a3{3u,3u};
|
||||
Activity a4{4u,4u};
|
||||
|
||||
UNIMPLEMENTED ("transparentely discard obsoleted entries from schedule");
|
||||
sched.instruct (a2, Time{2,0});
|
||||
sched.instruct (a4, Time{4,0});
|
||||
sched.feedPrioritisation();
|
||||
CHECK (isSameObject (*sched.peekHead(), a2));
|
||||
|
||||
sched.instruct (a3, Time{3,0});
|
||||
sched.instruct (a1, Time{1,0});
|
||||
CHECK (isSameObject (*sched.peekHead(), a2));
|
||||
|
||||
sched.feedPrioritisation();
|
||||
CHECK (isSameObject (*sched.pullHead(), a1));
|
||||
CHECK (isSameObject (*sched.pullHead(), a2));
|
||||
CHECK (isSameObject (*sched.pullHead(), a3));
|
||||
CHECK (isSameObject (*sched.pullHead(), a4));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** @test sort order is not necessarily stable
|
||||
* if using identical time specs on entrance
|
||||
*/
|
||||
|
|
@ -217,6 +189,97 @@ namespace test {
|
|||
CHECK (not sched.isDue (Time{0,1}));
|
||||
CHECK (not sched.isDue (Time{0,10}));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** @test verify that obsoleted or rejected entries are dropped transparently
|
||||
* - add entries providing extra information regarding significance
|
||||
* - verify that missing the deadline is detected
|
||||
* - entries past deadline are marked _outdated_ (will be dropped by Layer-2)
|
||||
* - entries can be tagged with an ManifestationID, allowing to enable
|
||||
* or disable visibility for a »family« of schedule entries
|
||||
* - use the flag for _compulsory_ entries, allowing to detect
|
||||
* a fatal _jammed_ situation where the head entry is
|
||||
* out of time, while marked mandatory to process.
|
||||
*/
|
||||
void
|
||||
verify_Significance()
|
||||
{
|
||||
SchedulerInvocation sched;
|
||||
Activity act;
|
||||
|
||||
sched.feedPrioritisation (act, Time{2,0}, Time{3,0});
|
||||
CHECK (Time(2,0) == sched.headTime());
|
||||
CHECK ( sched.isDue (Time{2,0}));
|
||||
CHECK (not sched.isMissed (Time{2,0}));
|
||||
CHECK (not sched.isMissed (Time{3,0}));
|
||||
CHECK ( sched.isMissed (Time{4,0}));
|
||||
|
||||
CHECK (not sched.isOutdated (Time{2,0}));
|
||||
CHECK (not sched.isOutdated (Time{3,0}));
|
||||
CHECK ( sched.isOutdated (Time{4,0}));
|
||||
|
||||
sched.feedPrioritisation (act, Time{1,0}, Time{3,0}, ManifestationID{5});
|
||||
CHECK (Time(1,0) == sched.headTime());
|
||||
CHECK ( sched.isOutdated (Time{1,0}));
|
||||
CHECK (not sched.isMissed (Time{1,0}));
|
||||
|
||||
sched.activate (ManifestationID{5});
|
||||
CHECK (Time(1,0) == sched.headTime());
|
||||
CHECK ( sched.isDue (Time{1,0}));
|
||||
CHECK (not sched.isOutdated (Time{1,0}));
|
||||
CHECK (not sched.isOutdated (Time{3,0}));
|
||||
CHECK ( sched.isOutdated (Time{4,0}));
|
||||
CHECK ( sched.isMissed (Time{4,0}));
|
||||
CHECK ( sched.isDue (Time{4,0}));
|
||||
|
||||
sched.drop (ManifestationID{5});
|
||||
CHECK (Time(1,0) == sched.headTime());
|
||||
CHECK ( sched.isOutdated (Time{1,0}));
|
||||
CHECK ( sched.isOutdated (Time{4,0}));
|
||||
CHECK ( sched.isMissed (Time{4,0}));
|
||||
CHECK (not sched.isMissed (Time{1,0}));
|
||||
CHECK ( sched.isDue (Time{1,0}));
|
||||
|
||||
sched.feedPrioritisation (act, Time{0,0}, Time{2,0}, ManifestationID{5}, true);
|
||||
CHECK (Time(0,0) == sched.headTime()); // ^^^^ marked as compulsory
|
||||
CHECK (not sched.isMissed (Time{1,0}));
|
||||
CHECK ( sched.isOutdated (Time{1,0})); // marked as outdated since manifestation 5 is not activated
|
||||
|
||||
sched.activate (ManifestationID{5});
|
||||
CHECK (not sched.isOutdated (Time{1,0}));
|
||||
CHECK (not sched.isOutOfTime(Time{2,0})); // still OK /at/ deadline
|
||||
CHECK ( sched.isOutOfTime(Time{3,0})); // ↯ past deadline yet marked as compulsory
|
||||
CHECK ( sched.isOutdated (Time{3,0}));
|
||||
CHECK ( sched.isMissed (Time{3,0}));
|
||||
|
||||
sched.drop (ManifestationID{5});
|
||||
CHECK (Time(0,0) == sched.headTime());
|
||||
CHECK ( sched.isOutdated (Time{1,0}));
|
||||
CHECK (not sched.isOutOfTime(Time{2,0}));
|
||||
CHECK (not sched.isOutOfTime(Time{3,0})); // the disabled manifestation masks the fatal out-of-time state
|
||||
CHECK ( sched.isOutdated (Time{3,0}));
|
||||
CHECK ( sched.isMissed (Time{3,0}));
|
||||
|
||||
sched.pullHead();
|
||||
CHECK (Time(1,0) == sched.headTime());
|
||||
CHECK ( sched.isOutdated (Time{1,0}));
|
||||
CHECK ( sched.isDue (Time{1,0}));
|
||||
|
||||
sched.pullHead();
|
||||
CHECK (Time(2,0) == sched.headTime());
|
||||
CHECK (not sched.isOutdated (Time{2,0}));
|
||||
CHECK ( sched.isOutdated (Time{4,0}));
|
||||
CHECK ( sched.isMissed (Time{4,0}));
|
||||
CHECK ( sched.isDue (Time{4,0}));
|
||||
|
||||
sched.pullHead();
|
||||
CHECK (Time::NEVER == sched.headTime());
|
||||
CHECK (not sched.isMissed (Time{4,0}));
|
||||
CHECK (not sched.isOutdated (Time{4,0}));
|
||||
CHECK (not sched.isDue (Time{4,0}));
|
||||
CHECK (sched.empty());
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -79768,8 +79768,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
<node CREATED="1684980982361" ID="ID_1863198468" MODIFIED="1684980987321" TEXT="Themen">
|
||||
<node CREATED="1684980991406" ID="ID_1812192430" MODIFIED="1684981025601" TEXT="Timings nachführen">
|
||||
<arrowlink COLOR="#705783" DESTINATION="ID_1565158605" ENDARROW="Default" ENDINCLINATION="223;-15;" ID="Arrow_ID_516157232" STARTARROW="None" STARTINCLINATION="372;51;"/>
|
||||
<node CREATED="1684980991406" ID="ID_1812192430" MODIFIED="1698948793241" TEXT="Timings nachführen">
|
||||
<arrowlink COLOR="#705783" DESTINATION="ID_1565158605" ENDARROW="Default" ENDINCLINATION="360;-23;" ID="Arrow_ID_516157232" STARTARROW="None" STARTINCLINATION="372;51;"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -81981,12 +81981,26 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1697756690787" ID="ID_87589773" MODIFIED="1697756717299" TEXT="Design: delegierende äußere Hülle"/>
|
||||
<node CREATED="1698936372735" ID="ID_1811375699" MODIFIED="1698936389780" TEXT="Service-Access">
|
||||
<node CREATED="1698936390960" ID="ID_31091241" MODIFIED="1698936407079" TEXT="separates Interface definieren">
|
||||
<node CREATED="1698936390960" ID="ID_31091241" MODIFIED="1698945655354" TEXT="separates Interface definieren">
|
||||
<linktarget COLOR="#ec2747" DESTINATION="ID_31091241" ENDARROW="Default" ENDINCLINATION="-130;11;" ID="Arrow_ID_215197651" SOURCE="ID_685418556" STARTARROW="None" STARTINCLINATION="5;-19;"/>
|
||||
<node CREATED="1698937133797" ID="ID_609493132" MODIFIED="1698937141485" TEXT="scheduler-api.hpp">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node CREATED="1698937110289" ID="ID_1837336933" MODIFIED="1698937115982" TEXT="reduziert Header-Includes"/>
|
||||
<node CREATED="1698937116771" ID="ID_231850405" MODIFIED="1698937120938" TEXT="verbessert Verständlichkeit"/>
|
||||
<node BACKGROUND_COLOR="#e1d6c7" COLOR="#463227" CREATED="1698945910380" ID="ID_1122976270" MODIFIED="1698946107167" TEXT="Domänen-Struktur zeigt sich">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...und das hatte ich <i>an der Stelle </i>gar nicht erwartet: die tatsächlichen Benutzer eines »Scheduler-Service« gehen nach wenigen festen Schemata vor und müssen überhaupt nichts von einer »Activity-Language« wissen
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698937122167" ID="ID_4829396" MODIFIED="1698937490736" TEXT="kann dort Inteface-Typen definieren">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
|
|
@ -82010,22 +82024,32 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697756746748" ID="ID_1029141907" MODIFIED="1697757702430" TEXT="Interface bauen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1697756762145" ID="ID_685418556" MODIFIED="1697756903799" TEXT="auf abstraktes Interface kann (vorerst) verzichtet werden">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697756762145" ID="ID_685418556" MODIFIED="1698945903762" TEXT="Service und Interface trennen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
...bedingt durch den stark gegliederten Aufbau wird es auf Service-Ebene nichts zu verbergen geben — zudem bewegen sich voraussichtlich auch alle Clients im gleichen Code-Universums (so daß es keine Probleme mit Dependencies gibt.
|
||||
...der erhebliche techische Detailierungsgrad der übergreifenden Abläufe legt eine klare Abtrennung zu den Kollaborationsparnern nahe. Zwar bewegen sich voraussichtlich auch alle Clients im gleichen Code-Universums (so daß es keine Probleme mit Dependencies gibt), aber die <i>integration im Scheduler selber, </i>erweist sich bereits als herausfordernd komplex. Zudem zeichnet sich eine deutliche Abgrenzung im Sinne einer Domäne heraus: die tatsächlichen Clients müssen praktisch nichts vom Themenkomplex der »Activity-Language« wissen.
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#ec2747" DESTINATION="ID_31091241" ENDARROW="Default" ENDINCLINATION="-130;11;" ID="Arrow_ID_215197651" STARTARROW="None" STARTINCLINATION="5;-19;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697756908166" ID="ID_1142273023" MODIFIED="1697756948024" TEXT="Wrapper-Builder um den Activity-Term legen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697756956736" ID="ID_830267980" MODIFIED="1697756972566" TEXT="Top-level-Implementierung der Worker-Funktion">
|
||||
<node COLOR="#338800" CREATED="1697756956736" ID="ID_830267980" MODIFIED="1698945554657" TEXT="Top-level-Implementierung der Worker-Funktion">
|
||||
<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="#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"/>
|
||||
</node>
|
||||
<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>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697757025906" ID="ID_180161439" MODIFIED="1697757063868" TEXT="seedCalcStream()">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -82163,6 +82187,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node COLOR="#338800" CREATED="1697808041495" ID="ID_492054934" MODIFIED="1698079204212" TEXT="die Work-Function zusammenstellen">
|
||||
<linktarget COLOR="#7779a3" DESTINATION="ID_492054934" ENDARROW="Default" ENDINCLINATION="-814;62;" ID="Arrow_ID_817672667" SOURCE="ID_391492289" STARTARROW="None" STARTINCLINATION="1393;-112;"/>
|
||||
<linktarget COLOR="#2f9552" DESTINATION="ID_492054934" ENDARROW="Default" ENDINCLINATION="-315;-355;" ID="Arrow_ID_1566437327" SOURCE="ID_830267980" STARTARROW="None" STARTINCLINATION="253;14;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1698004010478" ID="ID_1609383346" MODIFIED="1698009701573" TEXT="Schritte">
|
||||
<icon BUILTIN="list"/>
|
||||
|
|
@ -84113,9 +84138,9 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1698875050812" ID="ID_292105591" MODIFIED="1698939255674" TEXT="Datenfelder">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1698877940667" ID="ID_1937246215" MODIFIED="1698877951763" TEXT="bläht die Einträge auf">
|
||||
<node COLOR="#338800" CREATED="1698875050812" ID="ID_292105591" MODIFIED="1698963531996" TEXT="Datenfelder">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1698877940667" FOLDED="true" ID="ID_1937246215" MODIFIED="1698963527448" TEXT="bläht die Einträge auf">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1698877955722" ID="ID_18567100" MODIFIED="1698878028037" TEXT="im Besonderen die bool-Flag ist Verschwendung pur">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -84165,15 +84190,15 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698933483810" ID="ID_1794722262" MODIFIED="1698933998545" TEXT="Deadline in µ-Ticks">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1698933483810" ID="ID_1794722262" MODIFIED="1698963519573" TEXT="Deadline in µ-Ticks">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698933615025" ID="ID_1230994646" MODIFIED="1698933998544" TEXT="Significance">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698933622176" ID="ID_1319756279" MODIFIED="1698934006151" TEXT="Flags (Bit-Feld)">
|
||||
<node COLOR="#338800" CREATED="1698933615025" ID="ID_1230994646" MODIFIED="1698963517800" TEXT="Significance">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1698933622176" ID="ID_1319756279" MODIFIED="1698963514291" TEXT="Flags (Bit-Feld)">
|
||||
<node COLOR="#435e98" CREATED="1698935646594" ID="ID_1627815057" MODIFIED="1698935650825" TEXT="isCompulsory"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698933632934" ID="ID_1561119545" MODIFIED="1698934013070" TEXT="ManifestationID(32bit)">
|
||||
<node COLOR="#435e98" CREATED="1698933632934" ID="ID_1561119545" MODIFIED="1698963516115" TEXT="ManifestationID(32bit)">
|
||||
<linktarget COLOR="#894161" DESTINATION="ID_1561119545" ENDARROW="Default" ENDINCLINATION="-572;70;" ID="Arrow_ID_1358372763" SOURCE="ID_1074827633" STARTARROW="None" STARTINCLINATION="61;-315;"/>
|
||||
<node CREATED="1698937181526" ID="ID_105164565" LINK="#ID_4829396" MODIFIED="1698937195213" TEXT="Datentyp in scheduler-API"/>
|
||||
</node>
|
||||
|
|
@ -84206,9 +84231,102 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698934459104" ID="ID_1030078999" MODIFIED="1698934566805" TEXT="SchedulerInvocaton_test ergänzen">
|
||||
<arrowlink COLOR="#d6194f" DESTINATION="ID_774197123" ENDARROW="Default" ENDINCLINATION="589;-82;" ID="Arrow_ID_644878733" STARTARROW="None" STARTINCLINATION="-1097;92;"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698945154395" ID="ID_1664760512" MODIFIED="1698945168653" TEXT="erweiterte Prüfungen in die normale Verarbeitung integrieren">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698945192477" ID="ID_1809715507" MODIFIED="1698945204897" TEXT="brauche nun zusätzliche Daten beim Einplanen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1698946253457" ID="ID_1811524315" MODIFIED="1698946256631" TEXT="Defaults">
|
||||
<node CREATED="1698946293491" ID="ID_537001260" MODIFIED="1698946298907" TEXT="sinnvoll für Tests"/>
|
||||
<node CREATED="1698946300016" ID="ID_1426746639" MODIFIED="1698947331093" TEXT="Deadline auf »Time::NEVER«">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<ul>
|
||||
<li>
|
||||
ein solcher Task würde immer ausführbar bleiben und wäre somit für den Layer-1 neutral.
|
||||
</li>
|
||||
<li>
|
||||
allerdings auf dem Scheduler-API muß die Deadline verpfichtend gemacht werden, denn sonst erstickt der Memory-Allocator irgendwann
|
||||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1698946311193" ID="ID_1622617686" MODIFIED="1698947426886" TEXT="leere ManifestationID">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
diese spezielle Marker-ID wird implizit stets freigeschaltet, kann also später nicht verworfen werden; das erscheint mir ein sinnvoller Default
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1698946321096" ID="ID_1270673617" MODIFIED="1698947474211" TEXT="not isComplusory">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
verpflichtende Activities sind ebenfalls ein Feature, das eigentlich erst auf Scheduler-Level angesiedelt ist, und hier nur den entsprechenden Support braucht
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698945215604" ID="ID_1778628995" MODIFIED="1698946166942" TEXT="Scheduler high-level-API erweitern">
|
||||
<arrowlink COLOR="#3d3aa9" DESTINATION="ID_780386157" ENDARROW="Default" ENDINCLINATION="69;74;" ID="Arrow_ID_103420327" STARTARROW="None" STARTINCLINATION="317;25;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1698946201921" ID="ID_1058086166" MODIFIED="1698963474934" TEXT="Informationsfunktionen ergänzen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698946217933" ID="ID_1697537017" MODIFIED="1698946222845" TEXT="transparentes Verwerfen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1698948806933" ID="ID_420754882" MODIFIED="1698948813155" TEXT="wo ansetzen?">
|
||||
<node CREATED="1698948815117" ID="ID_736157754" MODIFIED="1698948823278" TEXT="es muß eine Mutations-Funktion sein"/>
|
||||
<node CREATED="1698948824058" ID="ID_42556043" MODIFIED="1698948833941" TEXT="sie muß stets unter Grooming-Token aufgerufen werden"/>
|
||||
<node COLOR="#5b280f" CREATED="1698949109228" ID="ID_765027235" MODIFIED="1698949156519" TEXT="rein logisch wäre feedPrioritisation() gut">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1698949125978" ID="ID_834884096" MODIFIED="1698949131126" TEXT="aber da fehlt die Zeitangabe"/>
|
||||
<node CREATED="1698949131655" ID="ID_504965242" MODIFIED="1698949139964" TEXT="und es gibt zwei Aufruf-Variangen"/>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1698949142520" ID="ID_1038127597" MODIFIED="1698949156519" TEXT="damit bleibt nur noch pullHead übrig">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1698949159126" ID="ID_1576956355" MODIFIED="1698949180743" TEXT="das ist aber definitiv nur eine low-level-Operation"/>
|
||||
<node CREATED="1698949181235" ID="ID_655555656" MODIFIED="1698949192821" TEXT="und hat auch nicht die Zeit `now`"/>
|
||||
<node CREATED="1698949193697" ID="ID_1153123389" MODIFIED="1698949214930" TEXT="außerdem wäre die Formulierung if (isDue) untergraben"/>
|
||||
</node>
|
||||
<node CREATED="1698949216918" ID="ID_1626105170" MODIFIED="1698949234265">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
also gehört diese Operation in <b>Layer-2</b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1698934459104" ID="ID_1030078999" MODIFIED="1698963463139" TEXT="Scheduler Layer-Tests ergänzen">
|
||||
<arrowlink COLOR="#1990d6" DESTINATION="ID_774197123" ENDARROW="Default" ENDINCLINATION="589;-82;" ID="Arrow_ID_644878733" STARTARROW="None" STARTINCLINATION="-1097;92;"/>
|
||||
<arrowlink COLOR="#d6194f" DESTINATION="ID_340948432" ENDARROW="Default" ENDINCLINATION="589;-82;" ID="Arrow_ID_1678021866" STARTARROW="None" STARTINCLINATION="-1097;92;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -88144,8 +88262,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1684980732965" ID="ID_1914429002" MODIFIED="1684980742528" TEXT="Thema: Timing-Updates">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1684980744406" ID="ID_1565158605" LINK="https://issues.lumiera.org/ticket/1302" MODIFIED="1684981025601" TEXT="#1302 maintain consistent job timings">
|
||||
<linktarget COLOR="#705783" DESTINATION="ID_1565158605" ENDARROW="Default" ENDINCLINATION="223;-15;" ID="Arrow_ID_516157232" SOURCE="ID_1812192430" STARTARROW="None" STARTINCLINATION="372;51;"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1684980744406" ID="ID_1565158605" LINK="https://issues.lumiera.org/ticket/1302" MODIFIED="1698948793241" TEXT="#1302 maintain consistent job timings">
|
||||
<linktarget COLOR="#705783" DESTINATION="ID_1565158605" ENDARROW="Default" ENDINCLINATION="360;-23;" ID="Arrow_ID_516157232" SOURCE="ID_1812192430" STARTARROW="None" STARTINCLINATION="372;51;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -88829,9 +88947,15 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node COLOR="#338800" CREATED="1697503841856" ID="ID_1434499377" LINK="#ID_1306162732" MODIFIED="1697509772561" TEXT="verify_WaterLevel">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698934474047" ID="ID_774197123" MODIFIED="1698934561661" TEXT="verify_Significance">
|
||||
<linktarget COLOR="#d6194f" DESTINATION="ID_774197123" ENDARROW="Default" ENDINCLINATION="589;-82;" ID="Arrow_ID_644878733" SOURCE="ID_1030078999" STARTARROW="None" STARTINCLINATION="-1097;92;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1698934474047" ID="ID_774197123" MODIFIED="1698963431837" TEXT="verify_Significance">
|
||||
<linktarget COLOR="#1990d6" DESTINATION="ID_774197123" ENDARROW="Default" ENDINCLINATION="589;-82;" ID="Arrow_ID_644878733" SOURCE="ID_1030078999" STARTARROW="None" STARTINCLINATION="-1097;92;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1698947582439" ID="ID_622394306" MODIFIED="1698963261235" TEXT="erweiterter Zustand per API sichtbar">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1698947635568" ID="ID_1195635801" MODIFIED="1698963396987" TEXT="API zum Freischalten/Verwerfen per ManifestationID"/>
|
||||
<node COLOR="#435e98" CREATED="1698947694025" ID="ID_1628108286" MODIFIED="1698963412509" TEXT="obsoletes / nicht freigeschaltes Head erkennbar"/>
|
||||
<node COLOR="#435e98" CREATED="1698947733092" ID="ID_1461678295" MODIFIED="1698963425188" TEXT="prüfen Compulsory-Verletzung auf Queue-Head"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1697509780561" ID="ID_858986653" MODIFIED="1697509782527" TEXT="verify_stability">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -88845,7 +88969,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1688336794355" FOLDED="true" ID="ID_1705923970" MODIFIED="1697674916927" TEXT="SchedulerCommutator_test">
|
||||
<node COLOR="#338800" CREATED="1688336794355" ID="ID_1705923970" MODIFIED="1698963265645" TEXT="SchedulerCommutator_test">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1688337141875" ID="ID_1442397948" MODIFIED="1697552361129" TEXT="»Layer-2« : Activity execution">
|
||||
<icon BUILTIN="info"/>
|
||||
|
|
@ -89024,6 +89148,12 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698934474047" ID="ID_340948432" MODIFIED="1698963291724" TEXT="verify_Significance">
|
||||
<linktarget COLOR="#d6194f" DESTINATION="ID_340948432" ENDARROW="Default" ENDINCLINATION="589;-82;" ID="Arrow_ID_1678021866" SOURCE="ID_1030078999" STARTARROW="None" STARTINCLINATION="-1097;92;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1698947608180" ID="ID_935784796" MODIFIED="1698947626950" TEXT="Queue-Processing verwirft abgelaufene Tasks"/>
|
||||
<node CREATED="1698947694025" ID="ID_1869538175" MODIFIED="1698947727576" TEXT="nicht freigeschalte Manifestation wird unterdrückt"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1697560546952" FOLDED="true" ID="ID_1326942653" MODIFIED="1697641948262" TEXT="verify_postDispatch">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1697630618833" ID="ID_1032090324" MODIFIED="1697630748734" TEXT="Szenarien">
|
||||
|
|
|
|||
Loading…
Reference in a new issue