-Fix bug where stale cached data was used in revacuate causing all vms to erroneously move to a single hypervisor
-document ways to better leverage advanced IO fabrics in evacuation -reap stale TOD -update vm.host pointers as migration occurs git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@5222 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
This commit is contained in:
parent
2d6f469e07
commit
f13dc5f225
@ -415,6 +415,7 @@ sub pick_target {
|
||||
my $currentfreememory;
|
||||
my $candidates= $confdata->{vm}->{$node}->[0]->{migrationdest};
|
||||
my $currhyp=$confdata->{vm}->{$node}->[0]->{host};
|
||||
#caching strategy is implicit on whether $addmemory is passed.
|
||||
unless ($candidates) {
|
||||
return undef;
|
||||
}
|
||||
@ -424,7 +425,7 @@ sub pick_target {
|
||||
if ($_ eq $currhyp) { next; } #skip current node
|
||||
if ($offlinehyps{$_}) { next }; #skip already offlined nodes
|
||||
if (grep { "$_" eq $cand } @destblacklist) { next; } #skip blacklisted destinations
|
||||
if (defined $hypstats{$_}->{freememory}) {
|
||||
if ($addmemory and defined $hypstats{$_}->{freememory}) { #only used cache results when addmemory suggests caching can make sense
|
||||
$currentfreememory=$hypstats{$_}->{freememory}
|
||||
} else {
|
||||
if (not nodesockopen($_,22)) { $offlinehyps{$_}=1; next; } #skip unusable destinations
|
||||
@ -466,6 +467,15 @@ sub migrate {
|
||||
if ($offlinevms{$node}) {
|
||||
return power("on");
|
||||
}
|
||||
#TODO: currently, we completely serialize migration events. Some IO fabrics can facilitate concurrent migrations
|
||||
#One trivial example is an ethernet port aggregation where a single conversation may likely be unable to utilize all the links
|
||||
#because traffic is balanced by a mac address hashing algorithim, but talking to several hypervisors would have
|
||||
#distinct peers that can be balanced more effectively.
|
||||
#The downside is that migration is sufficiently slow that a lot can change in the intervening time on a target hypervisor, but
|
||||
#this should not be an issue if:
|
||||
#xCAT is the only path a configuration is using to make changes in the virtualization stack
|
||||
#xCAT implements a global semaphore mechanism that this plugin can use to assure migration targets do not change by our own hand..
|
||||
#failing that.. flock.
|
||||
unless ($targ) {
|
||||
$targ = pick_target($node);
|
||||
}
|
||||
@ -562,8 +572,8 @@ sub migrate {
|
||||
#The migration seems tohave suceeded, but to be sure...
|
||||
close($sock);
|
||||
if ($desthypconn->get_domain_by_name($node)) {
|
||||
$updatetable->{vm}->{$node}->{host} = $targ;
|
||||
#$vmtab->setNodeAttribs($node,{host=>$targ});
|
||||
#$updatetable->{vm}->{$node}->{host} = $targ;
|
||||
$vmtab->setNodeAttribs($node,{host=>$targ});
|
||||
return (0,"migrated to $targ");
|
||||
} else { #This *should* not be possible
|
||||
return (1,"Failed migration from $prevhyp to $targ, despite normal looking run...");
|
||||
@ -953,10 +963,6 @@ sub adopt {
|
||||
}
|
||||
}
|
||||
|
||||
#TODO: adopt orphans into suitable homes if possible
|
||||
# return 0;
|
||||
#}
|
||||
|
||||
sub process_request {
|
||||
$SIG{INT} = $SIG{TERM} = sub {
|
||||
foreach (keys %vm_comm_pids) {
|
||||
|
Loading…
Reference in New Issue
Block a user