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
andres-portainer 2 years ago committed by GitHub
parent 77c29ff87e
commit 193e0c7d6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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…
Cancel
Save