Skip to content

Commit 4b8b1ed

Browse files
authored
provisiond: sort the reservation when the are received from BCDB (#391)
* provisiond: sort the reservation when the are received from BCDB workload needs to be deployed in this order: - network - zdb - volume - container * add missing field in WireguardPeer1 type * gofmt * fix TestProvisionPoll * extract map outside of function to avoid allocation
1 parent 490782e commit 4b8b1ed

File tree

3 files changed

+27
-8
lines changed

3 files changed

+27
-8
lines changed

pkg/gedis/commands_provision.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package gedis
33
import (
44
"encoding/json"
55
"fmt"
6+
"sort"
67
"time"
78

89
"github.com/threefoldtech/zos/pkg/schema"
@@ -13,6 +14,16 @@ import (
1314
"github.com/threefoldtech/zos/pkg"
1415
)
1516

17+
// provisionOrder is used to sort the workload type
18+
// in the right order for provisiond
19+
var provisionOrder = map[provision.ReservationType]int{
20+
provision.DebugReservation: 0,
21+
provision.NetworkReservation: 1,
22+
provision.ZDBReservation: 2,
23+
provision.VolumeReservation: 3,
24+
provision.ContainerReservation: 4,
25+
}
26+
1627
// Reserve provision.Reserver
1728
func (g *Gedis) Reserve(r *provision.Reservation, nodeID pkg.Identifier) (string, error) {
1829
res := types.TfgridReservation1{
@@ -112,6 +123,12 @@ func (g *Gedis) Poll(nodeID pkg.Identifier, from uint64) ([]*provision.Reservati
112123
reservations[i] = r
113124
}
114125

126+
// sorts the primitive in the oder they need to be processed by provisiond
127+
// network, zdb, volumes, container
128+
sort.Slice(reservations, func(i int, j int) bool {
129+
return provisionOrder[reservations[i].Type] < provisionOrder[reservations[j].Type]
130+
})
131+
115132
return reservations, nil
116133
}
117134

pkg/gedis/commands_provision_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,9 @@ func TestProvisionPoll(t *testing.T) {
8585

8686
require.NoError(err)
8787
require.Len(reservations, 2)
88-
require.Equal(reservations[0].ID, "1-1")
89-
require.Equal(reservations[0].Type, provision.VolumeReservation)
90-
require.Equal(reservations[1].Type, provision.ZDBReservation)
88+
require.Equal(reservations[0].ID, "2-1")
89+
require.Equal(reservations[0].Type, provision.ZDBReservation)
90+
require.Equal(reservations[1].Type, provision.VolumeReservation)
9191
conn.AssertCalled(t, "Close")
9292

9393
args = Args{
@@ -115,8 +115,8 @@ func TestProvisionPoll(t *testing.T) {
115115

116116
require.NoError(err)
117117
require.Len(reservations, 2)
118-
require.Equal(reservations[0].Type, provision.VolumeReservation)
119-
require.Equal(reservations[1].Type, provision.ZDBReservation)
118+
require.Equal(reservations[0].Type, provision.ZDBReservation)
119+
require.Equal(reservations[1].Type, provision.VolumeReservation)
120120
conn.AssertCalled(t, "Close")
121121

122122
}

pkg/gedis/types/provision/tfgrid_reservation_network_1.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,10 @@ func (r TfgridNetworkNetResource1) ToProvisionType() (pkg.NetResource, error) {
6868

6969
// WireguardPeer1 jsx Schema
7070
type WireguardPeer1 struct {
71-
PublicKey string `json:"public_key"`
72-
Endpoint string `json:"endpoint"`
73-
AllowedIPs []string `json:"allowed_iprange"`
71+
PublicKey string `json:"public_key"`
72+
Endpoint string `json:"endpoint"`
73+
AllowedIPs []string `json:"allowed_iprange"`
74+
IPRange schema.IPRange `json:"iprange"`
7475
}
7576

7677
//ToProvisionType converts WireguardPeer1 to pkg.Peer
@@ -79,6 +80,7 @@ func (p WireguardPeer1) ToProvisionType() (pkg.Peer, error) {
7980
WGPublicKey: p.PublicKey,
8081
Endpoint: p.Endpoint,
8182
AllowedIPs: make([]types.IPNet, len(p.AllowedIPs)),
83+
Subnet: types.NewIPNetFromSchema(p.IPRange),
8284
}
8385

8486
var err error

0 commit comments

Comments
 (0)