<table><tr><td style="">TallFurryMan created this revision.<br />TallFurryMan added a reviewer: mutlaqja.<br />Restricted Application added a project: KDE Edu.<br />Restricted Application added a subscriber: kde-edu.<br />TallFurryMan requested review of this revision.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D13388">View Revision</a></tr></table><br /><div><strong>REVISION SUMMARY</strong><div><p>Tricky issue where jobs which were scheduled at the same time would not be picked in the right order, because qSort is not required to be stable, that is, is not required to leave items which compare equal at the same rank in a list.</p>

<p>This situation would cause another job than the first in the job list to be picked as first job when the algorithm rescheduling close jobs executed, leading to an unexpected reordering of activities.</p></div></div><br /><div><strong>TEST PLAN</strong><div><p>User rankinstudio offered .esq and .esl files which can be used to reproduce the issue in the forum, "Ekos Scheduler Changes - Need Override to Stop Rescheduling". All other test vectors are suitable, as long as the problem is understood.<br />
An interesting test vector for the problematic use case is one with jobs that are evaluated, whatever the constraint (altitude/twilight/moon), to start at the same time or under 5 minutes from each other.<br />
When option "Sort jobs based on altitude and priority" is disabled, any job with a positive score at the time of test will be able to run, thus will be scheduled at the current date.<br />
When option "Sort jobs based on altitude and priority" is enabled, preconditions are the same, but as those jobs will be sorted per altitude before being rescheduled, leading to a different order.<br />
All in all, the test vector must be built in such a way that multiple jobs are scheduled close to each other, and are re-scheduled by the Scheduler with an offset corresponding to their duration, or min 5 minutes.<br />
In this situation, the objective of the test is to make sure the Scheduler is picking the good first job to run, then is re-scheduling other jobs from the startup time of this first job.<br />
When the option "Sort..." is disabled, test must verify that it is the row-first job.<br />
When the option "Sort..." is enabled, test must verify that it is the highest-altitude + highest-priority job.</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>R321 KStars</div></div></div><br /><div><strong>BRANCH</strong><div><div>bugfix__stable_job_sort (branched from master)</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D13388">https://phabricator.kde.org/D13388</a></div></div><br /><div><strong>AFFECTED FILES</strong><div><div>kstars/ekos/scheduler/scheduler.cpp</div></div></div><br /><div><strong>To: </strong>TallFurryMan, mutlaqja<br /><strong>Cc: </strong>kde-edu, narvaez, apol<br /></div>