Skip to content

Commit b73e3fe

Browse files
committed
compose: do not rely on endpoint ordering for gw_priority
Signed-off-by: pnkcaht <[email protected]>
1 parent 1e3fc17 commit b73e3fe

File tree

2 files changed

+8
-42
lines changed

2 files changed

+8
-42
lines changed

pkg/compose/convergence_test.go

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
"github.com/stretchr/testify/require"
3434
"go.uber.org/mock/gomock"
3535
"gotest.tools/v3/assert"
36+
"gotest.tools/v3/assert/cmp"
3637

3738
"github.com/docker/compose/v5/pkg/api"
3839
"github.com/docker/compose/v5/pkg/mocks"
@@ -427,7 +428,7 @@ func TestCreateMobyContainer(t *testing.T) {
427428
})
428429
}
429430

430-
func TestDefaultNetworkSettingsOrdersEndpointsByGwPriority(t *testing.T) {
431+
func TestDefaultNetworkSettingsGwPrioritySelectsPrimaryNetwork(t *testing.T) {
431432
project := &types.Project{
432433
Name: "test",
433434
Networks: map[string]types.NetworkConfig{
@@ -459,16 +460,9 @@ func TestDefaultNetworkSettingsOrdersEndpointsByGwPriority(t *testing.T) {
459460
endpoints := netConfig.EndpointsConfig
460461
require.Len(t, endpoints, 2)
461462

462-
keys := make([]string, 0, len(endpoints))
463-
for k := range endpoints {
464-
keys = append(keys, k)
465-
}
466-
467-
// Highest gw_priority must come first in EndpointsConfig
468-
assert.Equal(t, keys[0], "net2")
469-
assert.Equal(t, keys[1], "net1")
470-
471-
// NetworkMode must remain the primary network
472-
assert.Equal(t, mode, container.NetworkMode("net1"))
463+
assert.Assert(t, cmp.Contains(endpoints, "net1"))
464+
assert.Assert(t, cmp.Contains(endpoints, "net2"))
473465

466+
// gw_priority must only affect primary network selection
467+
assert.Assert(t, cmp.Equal(container.NetworkMode("net1"), mode))
474468
}

pkg/compose/create.go

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"os"
2626
"path/filepath"
2727
"slices"
28-
"sort"
2928
"strconv"
3029
"strings"
3130

@@ -569,11 +568,11 @@ func defaultNetworkSettings(project *types.Project,
569568
}
570569
}
571570

572-
// Include the primary network before ordering.
571+
// Include the primary network
573572
endpointsConfig[primaryNetworkMobyNetworkName] = primaryNetworkEndpoint
574573

575574
networkConfig := &network.NetworkingConfig{
576-
EndpointsConfig: orderEndpointsByGwPriority(endpointsConfig),
575+
EndpointsConfig: endpointsConfig,
577576
}
578577

579578
// From the Engine API docs:
@@ -582,33 +581,6 @@ func defaultNetworkSettings(project *types.Project,
582581
return container.NetworkMode(primaryNetworkMobyNetworkName), networkConfig, nil
583582
}
584583

585-
type endpointWithName struct {
586-
name string
587-
settings *network.EndpointSettings
588-
}
589-
590-
func orderEndpointsByGwPriority(endpoints map[string]*network.EndpointSettings) map[string]*network.EndpointSettings {
591-
if len(endpoints) <= 1 {
592-
return endpoints
593-
}
594-
595-
ordered := make([]endpointWithName, 0, len(endpoints))
596-
for name, ep := range endpoints {
597-
ordered = append(ordered, endpointWithName{name, ep})
598-
}
599-
600-
sort.SliceStable(ordered, func(i, j int) bool {
601-
return ordered[i].settings.GwPriority > ordered[j].settings.GwPriority
602-
})
603-
604-
orderedEndpoints := make(map[string]*network.EndpointSettings, len(ordered))
605-
for _, ep := range ordered {
606-
orderedEndpoints[ep.name] = ep.settings
607-
}
608-
609-
return orderedEndpoints
610-
}
611-
612584
func getRestartPolicy(service types.ServiceConfig) container.RestartPolicy {
613585
var restart container.RestartPolicy
614586
if service.Restart != "" {

0 commit comments

Comments
 (0)