'service-stats' => {},
haenv => $haenv,
scheduler => $scheduler,
+ 'service-counts' => {}, # Service count on each node. Fallback if scoring calculation fails.
}, $class;
}
sub add_node {
my ($self, $nodename) = @_;
+ $self->{'service-counts'}->{$nodename} = 0;
+
my $stats = $self->{'node-stats'}->{$nodename}
or die "did not get static node usage information for '$nodename'\n";
die "static node usage information for '$nodename' missing cpu count\n" if !$stats->{cpus};
sub remove_node {
my ($self, $nodename) = @_;
+ delete $self->{'service-counts'}->{$nodename};
+
$self->{scheduler}->remove_node($nodename);
}
sub add_service_usage_to_node {
my ($self, $nodename, $sid, $service_node, $migration_target) = @_;
+ $self->{'service-counts'}->{$nodename}++;
+
eval {
my $service_usage = get_service_usage($self, $sid, $service_node, $migration_target);
$self->{scheduler}->add_service_usage_to_node($nodename, $service_usage);
'err',
"unable to score nodes according to static usage for service '$sid' - $err",
);
- # TODO maybe use service count as fallback?
- return { map { $_ => 1 } $self->list_nodes() };
+ return $self->{'service-counts'};
}
# Take minus the value, so that a lower score is better, which our caller(s) expect(s).