|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [OSSTEST PATCH 18/29] Planner: Report unprocessed planning clients
With recent changes, it can happen that a queue daemon client is not
given an opportunity to report itself in the plan. This makes the
plan incomplete.
(For resource-plan.html, because the planning run was restarted to try
to quickly allocate new resources; for resource-projection.html,
because it's an old client that doesn't support feature-noalloc.)
When this happens, provide an explicit indication of this in the plan:
* Invent a new entry Unprocessed in data-*.pl for this information.
* Display the first 50 in ms-planner show-html.
* Provide a new ms-planner invocation `unprocessed' to record one.
* Note unprocessed when we skip a client due to !feature-noalloc.
* Note unprocessed for remaining queue when we restart planning.
For now this algorithm can be rather unfortunately O(n^2) when
draining the planning queue, because each `ms-planner unprocessed'
invocation adds only one job but needs to read and write the whole
plan. This will be fixed shortly.
Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
---
v2: New patch
---
ms-planner | 27 +++++++++++++++++++++++++++
ms-queuedaemon | 10 ++++++++++
2 files changed, 37 insertions(+)
diff --git a/ms-planner b/ms-planner
index 053f330..495c8ff 100755
--- a/ms-planner
+++ b/ms-planner
@@ -238,6 +238,7 @@ sub cmd_reset () {
$plan->{Start}= time;
$plan->{Events}= { };
+ $plan->{Unprocessed}= [ ];
my %magictask;
foreach my $taskrefkey (qw(preparing shared)) {
@@ -731,12 +732,38 @@ sub cmd_show_html () {
printf "</tr>\n";
}
printf "</table>\n";
+ printf "<p>\n";
+ my $unprocessed = $plan->{Unprocessed};
+ if (@$unprocessed) {
+ printf "%d tasks not processed and therefore not shown:\n",
+ scalar @$unprocessed;
+ my $shown = 0;
+ printf "<ul>\n";
+ foreach my $unprocessed (@$unprocessed) {
+ if (++$shown > 50) {
+ printf "<li>...</li>\n";
+ last;
+ }
+ printf "<li>%s</li>\n", encode_entities($unprocessed->{Info});
+ }
+ printf "</ul>\n";
+ printf "<p>\n";
+ }
printf "Report generated %s.\n",
strftime("%Y-%b-%d %a %H:%M:%S", localtime $now);
die $! if STDOUT->error;
die $! unless STDOUT->flush;
}
+sub cmd_unprocessed () {
+ die unless @ARGV==1;
+ my ($baseinfo) = @ARGV;
+
+ get_current_plan();
+ push @{ $plan->{Unprocessed} }, { Info => $baseinfo };
+ check_write_new_plan();
+}
+
die unless @ARGV;
die if $ARGV[0] =~ m/^-/;
my $subcmd= shift @ARGV;
diff --git a/ms-queuedaemon b/ms-queuedaemon
index 72e22d0..fba28a1 100755
--- a/ms-queuedaemon
+++ b/ms-queuedaemon
@@ -482,12 +482,21 @@ proc restarter-restart-now {} {
log-event "restarter-restart-now projection-running"
}
+ foreach skip [set plan/queue_running] {
+ for-chan $skip {
+ chan-note-unprocessed plan $skip
+ }
+ }
report-plan plan plan
unset plan/queue_running
runneeded-ensure-will 2
}
+proc chan-note-unprocessed {w chan} {
+ exec ./ms-planner -w$w unprocessed [chan-plan-info $chan {}]
+}
+
proc notify-to-think {w thinking} {
for-chan $thinking {
set noalloc [chan-get-info $thinking {$info(feature-noalloc)} {}]
@@ -496,6 +505,7 @@ proc notify-to-think {w thinking} {
projection.1 { puts-chan $thinking "!OK think noalloc" }
projection.* {
# oh well, can't include it in the projection; too bad
+ chan-note-unprocessed $w $thinking
queuerun-step-done $w "!feature-noalloc"
}
}
--
1.7.10.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |