// TODO: implement rollback in case of suboperation failure func (f *frontend) update(ef engine.Frontend, b *backend) error { oldf := f.frontend f.frontend = ef if err := f.updateBackend(b); err != nil { return err } if oldf.Route != ef.Route { log.Infof("%v updating route from %v to %v", oldf.Route, ef.Route) if err := f.mux.router.Handle(ef.Route, f.handler); err != nil { return err } if err := f.mux.router.Remove(oldf.Route); err != nil { return err } } olds := oldf.HTTPSettings() news := ef.HTTPSettings() if !olds.Equals(news) { if err := f.rebuild(); err != nil { return err } } return nil }