mirror of https://github.com/portainer/portainer
fix(migrator): rewrite a migration so it is idempotent BE-12053 (#1042)
parent
a760426b87
commit
2035c42c3c
|
@ -11,8 +11,10 @@ func (m *Migrator) migrateEdgeGroupEndpointsToRoars_2_33_0() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, eg := range egs {
|
for _, eg := range egs {
|
||||||
eg.EndpointIDs = roar.FromSlice(eg.Endpoints)
|
if eg.EndpointIDs.Len() == 0 {
|
||||||
eg.Endpoints = nil
|
eg.EndpointIDs = roar.FromSlice(eg.Endpoints)
|
||||||
|
eg.Endpoints = nil
|
||||||
|
}
|
||||||
|
|
||||||
if err := m.edgeGroupService.Update(eg.ID, &eg); err != nil {
|
if err := m.edgeGroupService.Update(eg.ID, &eg); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
package migrator
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
portainer "github.com/portainer/portainer/api"
|
||||||
|
"github.com/portainer/portainer/api/database/boltdb"
|
||||||
|
"github.com/portainer/portainer/api/dataservices/edgegroup"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMigrateEdgeGroupEndpointsToRoars_2_33_0Idempotency(t *testing.T) {
|
||||||
|
var conn portainer.Connection = &boltdb.DbConnection{Path: t.TempDir()}
|
||||||
|
err := conn.Open()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
defer conn.Close()
|
||||||
|
|
||||||
|
edgeGroupService, err := edgegroup.NewService(conn)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
edgeGroup := &portainer.EdgeGroup{
|
||||||
|
ID: 1,
|
||||||
|
Name: "test-edge-group",
|
||||||
|
Endpoints: []portainer.EndpointID{1, 2, 3},
|
||||||
|
}
|
||||||
|
|
||||||
|
err = conn.CreateObjectWithId(edgegroup.BucketName, int(edgeGroup.ID), edgeGroup)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
m := NewMigrator(&MigratorParameters{EdgeGroupService: edgeGroupService})
|
||||||
|
|
||||||
|
// Run migration once
|
||||||
|
|
||||||
|
err = m.migrateEdgeGroupEndpointsToRoars_2_33_0()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
migratedEdgeGroup, err := edgeGroupService.Read(edgeGroup.ID)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Len(t, migratedEdgeGroup.Endpoints, 0)
|
||||||
|
require.Equal(t, len(edgeGroup.Endpoints), migratedEdgeGroup.EndpointIDs.Len())
|
||||||
|
|
||||||
|
// Run migration again to ensure the results didn't change
|
||||||
|
|
||||||
|
err = m.migrateEdgeGroupEndpointsToRoars_2_33_0()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
migratedEdgeGroup, err = edgeGroupService.Read(edgeGroup.ID)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Len(t, migratedEdgeGroup.Endpoints, 0)
|
||||||
|
require.Equal(t, len(edgeGroup.Endpoints), migratedEdgeGroup.EndpointIDs.Len())
|
||||||
|
}
|
Loading…
Reference in New Issue