// nextOpConflicted is called after an upgrade operation has failed, and hasn't // yet been resolved or reverted. When in this mode, the resolver will only // consider those two possibilities for progressing. func (s *uniterResolver) nextOpConflicted( localState resolver.LocalState, remoteState remotestate.Snapshot, opFactory operation.Factory, ) (operation.Operation, error) { if remoteState.ResolvedMode != params.ResolvedNone { if err := s.config.ClearResolved(); err != nil { return nil, errors.Trace(err) } return opFactory.NewResolvedUpgrade(localState.CharmURL) } if remoteState.ForceCharmUpgrade && charmModified(localState, remoteState) { return opFactory.NewRevertUpgrade(remoteState.CharmURL) } return nil, resolver.ErrWaiting }
// nextOpConflicted is called after an upgrade operation has failed, and hasn't // yet been resolved or reverted. When in this mode, the resolver will only // consider those two possibilities for progressing. func (s *uniterResolver) nextOpConflicted( localState resolver.LocalState, remoteState remotestate.Snapshot, opFactory operation.Factory, ) (operation.Operation, error) { if remoteState.ResolvedMode != params.ResolvedNone { if err := s.clearResolved(); err != nil { return nil, errors.Trace(err) } return opFactory.NewResolvedUpgrade(localState.CharmURL) } if remoteState.ForceCharmUpgrade && *localState.CharmURL != *remoteState.CharmURL { logger.Debugf("upgrade from %v to %v", localState.CharmURL, remoteState.CharmURL) return opFactory.NewRevertUpgrade(remoteState.CharmURL) } return nil, resolver.ErrWaiting }