mirror of https://github.com/portainer/portainer
fix(snapshots): remove snapshots when removing endpoints EE-4527 (#7973)
* fix(snapshots): remove snapshots when removing endpoints EE-4527 * Fix nil pointer dereference. Co-authored-by: andres-portainer <andres-portainer@users.noreply.github.com>pull/8017/head
parent
77c29ff87e
commit
193e0c7d6f
|
@ -110,6 +110,9 @@ func (m *Migrator) Migrate() error {
|
||||||
|
|
||||||
// Portainer 2.16
|
// Portainer 2.16
|
||||||
newMigration(70, m.migrateDBVersionToDB70),
|
newMigration(70, m.migrateDBVersionToDB70),
|
||||||
|
|
||||||
|
// Portainer 2.16.1
|
||||||
|
newMigration(71, m.migrateDBVersionToDB71),
|
||||||
}
|
}
|
||||||
|
|
||||||
var lastDbVersion int
|
var lastDbVersion int
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
package migrator
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/portainer/portainer/api/dataservices/errors"
|
||||||
|
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (m *Migrator) migrateDBVersionToDB71() error {
|
||||||
|
log.Info().Msg("removing orphaned snapshots")
|
||||||
|
|
||||||
|
snapshots, err := m.snapshotService.Snapshots()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, s := range snapshots {
|
||||||
|
_, err := m.endpointService.Endpoint(s.EndpointID)
|
||||||
|
if err == nil {
|
||||||
|
log.Debug().Int("endpoint_id", int(s.EndpointID)).Msg("keeping snapshot")
|
||||||
|
continue
|
||||||
|
} else if err != errors.ErrObjectNotFound {
|
||||||
|
log.Debug().Int("endpoint_id", int(s.EndpointID)).Err(err).Msg("database error")
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debug().Int("endpoint_id", int(s.EndpointID)).Msg("removing snapshot")
|
||||||
|
|
||||||
|
err = m.snapshotService.DeleteSnapshot(s.EndpointID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -49,6 +49,11 @@ func (handler *Handler) endpointDelete(w http.ResponseWriter, r *http.Request) *
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = handler.DataStore.Snapshot().DeleteSnapshot(portainer.EndpointID(endpointID))
|
||||||
|
if err != nil {
|
||||||
|
return httperror.InternalServerError("Unable to remove the snapshot from the database", err)
|
||||||
|
}
|
||||||
|
|
||||||
err = handler.DataStore.Endpoint().DeleteEndpoint(portainer.EndpointID(endpointID))
|
err = handler.DataStore.Endpoint().DeleteEndpoint(portainer.EndpointID(endpointID))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return httperror.InternalServerError("Unable to remove environment from the database", err)
|
return httperror.InternalServerError("Unable to remove environment from the database", err)
|
||||||
|
|
Loading…
Reference in New Issue