From 3d0e375ede6c9bbd099062b75f1621158aa2a124 Mon Sep 17 00:00:00 2001 From: Nikolay Edigaryev Date: Wed, 13 Sep 2023 19:39:10 +0400 Subject: [PATCH] Don't stop and delete VMs that failed to clone (#125) * NewVM() never returns an error * Don't stop and delete VMs that failed to clone --- internal/worker/vmmanager/vm.go | 18 ++++++++++++++---- internal/worker/worker.go | 13 +++---------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/internal/worker/vmmanager/vm.go b/internal/worker/vmmanager/vm.go index 09aec85..54ba2d8 100644 --- a/internal/worker/vmmanager/vm.go +++ b/internal/worker/vmmanager/vm.go @@ -25,6 +25,7 @@ var ErrVMFailed = errors.New("VM failed") type VM struct { onDiskName ondiskname.OnDiskName + cloned bool Resource v1.VM logger *zap.SugaredLogger @@ -41,7 +42,7 @@ func NewVM( vmResource v1.VM, eventStreamer *client.EventStreamer, logger *zap.SugaredLogger, -) (*VM, error) { +) *VM { vmContext, vmContextCancel := context.WithCancel(context.Background()) vm := &VM{ @@ -67,15 +68,16 @@ func NewVM( if err != nil { vm.setErr(fmt.Errorf("failed to pull the VM: %w", err)) - return vm, nil + return vm } } if err := vm.cloneAndConfigure(ctx); err != nil { vm.setErr(fmt.Errorf("failed to clone the VM: %w", err)) - return vm, nil + return vm } + vm.cloned = true vm.wg.Add(1) @@ -95,7 +97,7 @@ func NewVM( go vm.runScript(vm.Resource.StartupScript, eventStreamer) } - return vm, nil + return vm } func (vm *VM) OnDiskName() ondiskname.OnDiskName { @@ -189,6 +191,10 @@ func (vm *VM) IP(ctx context.Context) (string, error) { } func (vm *VM) Stop() error { + if !vm.cloned { + return nil + } + vm.logger.Debugf("stopping VM") _, _, _ = tart.Tart(context.Background(), vm.logger, "stop", vm.id()) @@ -203,6 +209,10 @@ func (vm *VM) Stop() error { } func (vm *VM) Delete() error { + if !vm.cloned { + return nil + } + vm.logger.Debugf("deleting VM") _, _, err := tart.Tart(context.Background(), vm.logger, "delete", vm.id()) diff --git a/internal/worker/worker.go b/internal/worker/worker.go index 0cd89ca..0ed6ed6 100644 --- a/internal/worker/worker.go +++ b/internal/worker/worker.go @@ -226,9 +226,7 @@ func (worker *Worker) syncVMs(ctx context.Context) error { if vmResource.Status == v1.VMStatusPending && !worker.vmm.Exists(odn) { // Remote VM was created, create local VM - if err := worker.createVM(ctx, odn, vmResource); err != nil { - return err - } + worker.createVM(ctx, odn, vmResource) vmResource.Status = v1.VMStatusRunning if _, err := worker.client.VMs().Update(ctx, vmResource); err != nil { @@ -308,17 +306,12 @@ func (worker *Worker) deleteVM(vm *vmmanager.VM) error { return nil } -func (worker *Worker) createVM(ctx context.Context, odn ondiskname.OnDiskName, vmResource v1.VM) error { +func (worker *Worker) createVM(ctx context.Context, odn ondiskname.OnDiskName, vmResource v1.VM) { eventStreamer := worker.client.VMs().StreamEvents(vmResource.Name) - vm, err := vmmanager.NewVM(ctx, vmResource, eventStreamer, worker.logger) - if err != nil { - return err - } + vm := vmmanager.NewVM(ctx, vmResource, eventStreamer, worker.logger) worker.vmm.Put(odn, vm) - - return nil } func (worker *Worker) grpcMetadata() metadata.MD {