Skip to content

Commit

Permalink
WIP re-enque VM object as a separate step from putVm
Browse files Browse the repository at this point in the history
  • Loading branch information
stu-gott committed Mar 7, 2017
1 parent 8ba3078 commit 8841461
Showing 1 changed file with 20 additions and 10 deletions.
30 changes: 20 additions & 10 deletions pkg/virt-controller/watch/pod.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package watch

import (
"fmt"
"github.com/jeevatkm/go-model"
"k8s.io/client-go/kubernetes"
kubeapi "k8s.io/client-go/pkg/api"
Expand Down Expand Up @@ -88,19 +89,30 @@ func NewPodControllerWithListWatch(vmCache cache.Indexer, recorder record.EventR
vmCopy.Status.NodeName = pod.Spec.NodeName
// Update the VM
logger := logging.DefaultLogger()
if putVm(vm, restClient, queue, key) {
if err := putVm(vm, restClient, queue); err != nil {
logger.V(3).Info().Msg("Enqueuing VM again.")
queue.AddRateLimited(key)
return true
}
logger.Info().Msgf("VM successfully scheduled to %s.", vmCopy.Status.NodeName)
} else if vm.Status.Phase == corev1.Running {
vmCopy := corev1.VM{}
model.Copy(&vmCopy, vm)
vmCopy.Status.MigrationNodeName = vm.Status.NodeName
logger := logging.DefaultLogger()
// TODO: the migration should be started here
if putVm(vmCopy, restClient, queue, key) {
obj, err := kubeapi.Scheme.Copy(vm)
if err != nil {
logger.Error().Reason(err).Msg("could not copy vm object")
// FIXME: should the VM be re-enqueued? failure to copy is a pretty big deal
// FIXME: and will probably fail if re-tried
return true
}
vmCopy := obj.(*corev1.VM)
vmCopy.Status.MigrationNodeName = pod.Spec.NodeName

if err := putVm(vmCopy, restClient, queue); err != nil {
logger.V(3).Info().Msg("Enqueuing VM again.")
queue.AddRateLimited(key)
return true
}
// TODO: the migration should be started here
logger.Info().Msgf("VM successfully scheduled to %s.", vmCopy.Status.NodeName)
}
return true
Expand All @@ -109,7 +121,7 @@ func NewPodControllerWithListWatch(vmCache cache.Indexer, recorder record.EventR

// syncronously post updated VM object to API server.
// requeue on error if appropriate
func putVm(vm corev1.VM, restClient *rest.RESTClient, queue workqueue.RateLimitingInterface, key interface{}) error {
func putVm(vm *corev1.VM, restClient *rest.RESTClient, queue workqueue.RateLimitingInterface) error {
logger := logging.DefaultLogger().Object(vm)
if err := restClient.Put().Resource("vms").Body(&vm).Name(vm.ObjectMeta.Name).Namespace(kubeapi.NamespaceDefault).Do().Error(); err != nil {
logger.Error().Reason(err).Msg("Setting the VM state failed.")
Expand All @@ -120,9 +132,7 @@ func putVm(vm corev1.VM, restClient *rest.RESTClient, queue workqueue.RateLimiti
}

}
logger.V(3).Info().Msg("Enqueuing VM again.")
queue.AddRateLimited(key)
return nil
return fmt.Errorf("failed to set vm state: %v", err)
}
return nil
}

0 comments on commit 8841461

Please sign in to comment.