func (w *worker) Deploy(app spi.Application) (err error) { w.wc.logger.Info("worker.Deploy(): appId=", app.Id(), " to w=", w) if err := w.setSA(WS_DEPLOYING, spi.NO_APP_ID); err != nil { return err } instance := w.instance() if err := app.Deploy(instance); err != nil { go func() { w.wc.logger.Warn("worker.Deploy(): failed. Rolling back to STARTED state.") if instance != nil { instance.Stop() } if err := w.startInstance(true); err != nil { w.wc.logger.Error("worker.Deploy(): Oops, cannot switch to STARTED state, got zombie now w=", w) } }() return err } if err := w.setSA(WS_DEPLOYED, app.Id()); err != nil { return err } w.wc.logger.Info("worker.Deploy(): Done. w=", w) return nil }