backend/migrations: check all workspaces
This commit fixes a bug that (in the case of the `local` backend) would only check if the selected workspace had a state when deciding to preform a migration. When the selected workspace didn’t have a state (but other existing workspace(s) did), the migration would not be preformed and the other workspaces would be ignored.
This commit is contained in:
parent
cf8516287e
commit
1696ade924
|
@ -907,20 +907,28 @@ func (m *Meta) backend_C_r_s(
|
||||||
return nil, fmt.Errorf(errBackendLocalRead, err)
|
return nil, fmt.Errorf(errBackendLocalRead, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
env := m.Workspace()
|
workspaces, err := localB.States()
|
||||||
|
|
||||||
localState, err := localB.State(env)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf(errBackendLocalRead, err)
|
return nil, fmt.Errorf(errBackendLocalRead, err)
|
||||||
}
|
}
|
||||||
if err := localState.RefreshState(); err != nil {
|
|
||||||
return nil, fmt.Errorf(errBackendLocalRead, err)
|
var localStates []state.State
|
||||||
|
for _, workspace := range workspaces {
|
||||||
|
localState, err := localB.State(workspace)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf(errBackendLocalRead, err)
|
||||||
|
}
|
||||||
|
if err := localState.RefreshState(); err != nil {
|
||||||
|
return nil, fmt.Errorf(errBackendLocalRead, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// We only care about non-empty states.
|
||||||
|
if localS := localState.State(); !localS.Empty() {
|
||||||
|
localStates = append(localStates, localState)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the local state is not empty, we need to potentially do a
|
if len(localStates) > 0 {
|
||||||
// state migration to the new backend (with user permission), unless the
|
|
||||||
// destination is also "local"
|
|
||||||
if localS := localState.State(); !localS.Empty() {
|
|
||||||
// Perform the migration
|
// Perform the migration
|
||||||
err = m.backendMigrateState(&backendMigrateOpts{
|
err = m.backendMigrateState(&backendMigrateOpts{
|
||||||
OneType: "local",
|
OneType: "local",
|
||||||
|
@ -946,12 +954,14 @@ func (m *Meta) backend_C_r_s(
|
||||||
}
|
}
|
||||||
|
|
||||||
if erase {
|
if erase {
|
||||||
// We always delete the local state, unless that was our new state too.
|
for _, localState := range localStates {
|
||||||
if err := localState.WriteState(nil); err != nil {
|
// We always delete the local state, unless that was our new state too.
|
||||||
return nil, fmt.Errorf(errBackendMigrateLocalDelete, err)
|
if err := localState.WriteState(nil); err != nil {
|
||||||
}
|
return nil, fmt.Errorf(errBackendMigrateLocalDelete, err)
|
||||||
if err := localState.PersistState(); err != nil {
|
}
|
||||||
return nil, fmt.Errorf(errBackendMigrateLocalDelete, err)
|
if err := localState.PersistState(); err != nil {
|
||||||
|
return nil, fmt.Errorf(errBackendMigrateLocalDelete, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue