Skip to content

Commit f6a846b

Browse files
committed
fix interfaces stored as struct not array
1 parent e159175 commit f6a846b

File tree

1 file changed

+40
-11
lines changed

1 file changed

+40
-11
lines changed

node-registrar/pkg/db/migrate.go

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package db
22

33
import (
4+
"encoding/json"
45
"strings"
56

67
"github.com/pkg/errors"
@@ -33,7 +34,8 @@ func (db Database) autoMigrate() error {
3334

3435
func (db Database) migrateNodes() error {
3536
// if nodes are already migrated skip migration
36-
if result := db.gormDB.First(&Node{}); result.Error == nil {
37+
var nodes []Node
38+
if result := db.gormDB.Model(&Node{}).Find(&nodes); result.Error == nil {
3739
log.Info().Msg("nodes Interfaces are already migrated")
3840
return nil
3941
}
@@ -54,7 +56,27 @@ func (db Database) migrateNodes() error {
5456
return db.Transaction(func(tx *gorm.DB) error {
5557
var nodes []nodeType
5658
if err := tx.Model(&Node{}).Find(&nodes).Error; err != nil {
57-
return err
59+
// if it has an error then it's dev net bug we need to fix it
60+
type faultyNodeType struct {
61+
NodeID uint64 `json:"node_id" gorm:"primaryKey"`
62+
Interfaces Interface `gorm:"type:jsonb;serializer:json"`
63+
}
64+
65+
var faultyNodes []faultyNodeType
66+
if err := tx.Model(&Node{}).Find(&faultyNodes).Error; err != nil {
67+
return err
68+
}
69+
70+
nodes = []nodeType{}
71+
for _, n := range faultyNodes {
72+
i := oldInterface{
73+
Name: n.Interfaces.Name,
74+
Mac: n.Interfaces.Mac,
75+
IPs: strings.Join(n.Interfaces.IPs, "/"),
76+
}
77+
78+
nodes = append(nodes, nodeType{NodeID: n.NodeID, Interfaces: []oldInterface{i}})
79+
}
5880
}
5981

6082
for _, node := range nodes {
@@ -69,17 +91,24 @@ func (db Database) migrateNodes() error {
6991
interfaces = append(interfaces, newInterface)
7092
}
7193

72-
// skip the node if it has no interfaces
73-
if len(interfaces) != 0 {
74-
// Update only the interfaces field
75-
if err := tx.Model(&Node{}).
76-
Where("node_id = ?", node.NodeID).
77-
Update("interfaces", interfaces).Error; err != nil {
78-
return err // This will roll back the entire transaction
79-
}
94+
// if node has no interfaces set it to empty interface
95+
if len(interfaces) == 0 {
96+
interfaces = append(interfaces, Interface{})
97+
}
8098

81-
log.Info().Uint64("node_id", node.NodeID).Msg("Migration: updating node")
99+
// Update only the interfaces field
100+
// Marshal the interfaces slice into JSON format
101+
jsonData, err := json.Marshal(interfaces)
102+
if err != nil {
103+
return err
82104
}
105+
if err := tx.Model(&Node{}).
106+
Where("node_id = ?", node.NodeID).
107+
Update("interfaces", jsonData).Error; err != nil {
108+
return err // This will roll back the entire transaction
109+
}
110+
111+
log.Info().Uint64("node_id", node.NodeID).Msg("Migration: updating node")
83112

84113
}
85114

0 commit comments

Comments
 (0)