Skip to content

Commit 9525cd0

Browse files
committed
[supervisor] localify struct of ports sort
1 parent 32e8d1b commit 9525cd0

File tree

5 files changed

+53
-41
lines changed

5 files changed

+53
-41
lines changed

Diff for: components/gitpod-protocol/go/gitpod-service.go

-1
Original file line numberDiff line numberDiff line change
@@ -1756,7 +1756,6 @@ type PortConfig struct {
17561756
Visibility string `json:"visibility,omitempty"`
17571757
Description string `json:"description,omitempty"`
17581758
Name string `json:"name,omitempty"`
1759-
Sort uint32 `json:"sort,omitempty"`
17601759
}
17611760

17621761
// TaskConfig is the TaskConfig message type

Diff for: components/supervisor/pkg/ports/ports-config.go

+40-26
Original file line numberDiff line numberDiff line change
@@ -18,26 +18,32 @@ import (
1818

1919
// RangeConfig is a port range config.
2020
type RangeConfig struct {
21-
*gitpod.PortsItems
21+
gitpod.PortsItems
2222
Start uint32
2323
End uint32
2424
Sort uint32
2525
}
2626

27+
// SortConfig is a port with a sort field
28+
type SortConfig struct {
29+
gitpod.PortConfig
30+
Sort uint32
31+
}
32+
2733
// Configs provides access to port configurations.
2834
type Configs struct {
29-
workspaceConfigs map[uint32]*gitpod.PortConfig
30-
instancePortConfigs map[uint32]*gitpod.PortConfig
35+
workspaceConfigs map[uint32]*SortConfig
36+
instancePortConfigs map[uint32]*SortConfig
3137
instanceRangeConfigs []*RangeConfig
3238
}
3339

3440
// ForEach iterates over all configured ports.
35-
func (configs *Configs) ForEach(callback func(port uint32, config *gitpod.PortConfig)) {
41+
func (configs *Configs) ForEach(callback func(port uint32, config *SortConfig)) {
3642
if configs == nil {
3743
return
3844
}
3945
visited := make(map[uint32]struct{})
40-
for _, configs := range []map[uint32]*gitpod.PortConfig{configs.instancePortConfigs, configs.workspaceConfigs} {
46+
for _, configs := range []map[uint32]*SortConfig{configs.instancePortConfigs, configs.workspaceConfigs} {
4147
for port, config := range configs {
4248
_, exists := visited[port]
4349
if exists {
@@ -60,7 +66,7 @@ var (
6066
)
6167

6268
// Get returns the config for the give port.
63-
func (configs *Configs) Get(port uint32) (*gitpod.PortConfig, ConfigKind, bool) {
69+
func (configs *Configs) Get(port uint32) (*SortConfig, ConfigKind, bool) {
6470
if configs == nil {
6571
return nil, PortConfigKind, false
6672
}
@@ -74,13 +80,15 @@ func (configs *Configs) Get(port uint32) (*gitpod.PortConfig, ConfigKind, bool)
7480
}
7581
for _, rangeConfig := range configs.instanceRangeConfigs {
7682
if rangeConfig.Start <= port && port <= rangeConfig.End {
77-
return &gitpod.PortConfig{
78-
Port: float64(port),
79-
OnOpen: rangeConfig.OnOpen,
80-
Visibility: rangeConfig.Visibility,
81-
Description: rangeConfig.Description,
82-
Name: rangeConfig.Name,
83-
Sort: rangeConfig.Sort,
83+
return &SortConfig{
84+
PortConfig: gitpod.PortConfig{
85+
Port: float64(port),
86+
OnOpen: rangeConfig.OnOpen,
87+
Visibility: rangeConfig.Visibility,
88+
Description: rangeConfig.Description,
89+
Name: rangeConfig.Name,
90+
},
91+
Sort: rangeConfig.Sort,
8492
}, RangeConfigKind, true
8593
}
8694
}
@@ -170,22 +178,26 @@ func (service *ConfigService) update(config *gitpod.GitpodConfig, current *Confi
170178

171179
var portRangeRegexp = regexp.MustCompile(`^(\d+)[-:](\d+)$`)
172180

173-
func parseWorkspaceConfigs(ports []*gitpod.PortConfig) (portConfigs map[uint32]*gitpod.PortConfig) {
181+
func parseWorkspaceConfigs(ports []*gitpod.PortConfig) (portConfigs map[uint32]*SortConfig) {
174182
if len(ports) == 0 {
175183
return nil
176184
}
177-
portConfigs = make(map[uint32]*gitpod.PortConfig)
185+
portConfigs = make(map[uint32]*SortConfig)
178186
for _, config := range ports {
179187
port := uint32(config.Port)
180188
_, exists := portConfigs[port]
181189
if !exists {
182-
portConfigs[port] = config
190+
portConfigs[port] = &SortConfig{
191+
PortConfig: *config,
192+
// We don't care about workspace configs but instance config
193+
Sort: 0,
194+
}
183195
}
184196
}
185197
return portConfigs
186198
}
187199

188-
func parseInstanceConfigs(ports []*gitpod.PortsItems) (portConfigs map[uint32]*gitpod.PortConfig, rangeConfigs []*RangeConfig) {
200+
func parseInstanceConfigs(ports []*gitpod.PortsItems) (portConfigs map[uint32]*SortConfig, rangeConfigs []*RangeConfig) {
189201
for index, config := range ports {
190202
if config == nil {
191203
continue
@@ -195,18 +207,20 @@ func parseInstanceConfigs(ports []*gitpod.PortsItems) (portConfigs map[uint32]*g
195207
Port, err := strconv.ParseUint(rawPort, 10, 16)
196208
if err == nil {
197209
if portConfigs == nil {
198-
portConfigs = make(map[uint32]*gitpod.PortConfig)
210+
portConfigs = make(map[uint32]*SortConfig)
199211
}
200212
port := uint32(Port)
201213
_, exists := portConfigs[port]
202214
if !exists {
203-
portConfigs[port] = &gitpod.PortConfig{
204-
OnOpen: config.OnOpen,
205-
Port: float64(Port),
206-
Visibility: config.Visibility,
207-
Description: config.Description,
208-
Name: config.Name,
209-
Sort: uint32(index),
215+
portConfigs[port] = &SortConfig{
216+
PortConfig: gitpod.PortConfig{
217+
OnOpen: config.OnOpen,
218+
Port: float64(Port),
219+
Visibility: config.Visibility,
220+
Description: config.Description,
221+
Name: config.Name,
222+
},
223+
Sort: uint32(index),
210224
}
211225
}
212226
continue
@@ -224,7 +238,7 @@ func parseInstanceConfigs(ports []*gitpod.PortsItems) (portConfigs map[uint32]*g
224238
continue
225239
}
226240
rangeConfigs = append(rangeConfigs, &RangeConfig{
227-
PortsItems: config,
241+
PortsItems: *config,
228242
Start: uint32(start),
229243
End: uint32(end),
230244
Sort: uint32(index),

Diff for: components/supervisor/pkg/ports/ports-config_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ func TestPortsConfig(t *testing.T) {
8989
Expectation: &PortConfigTestExpectations{
9090
InstanceRangeConfigs: []*RangeConfig{
9191
{
92-
PortsItems: &gitpod.PortsItems{
92+
PortsItems: gitpod.PortsItems{
9393
Port: "9229-9339",
9494
OnOpen: "ignore",
9595
Visibility: "public",
@@ -136,7 +136,7 @@ func TestPortsConfig(t *testing.T) {
136136
t.Fatal(err)
137137
case change := <-updates:
138138
for _, config := range change.workspaceConfigs {
139-
actual.WorkspaceConfigs = append(actual.WorkspaceConfigs, config)
139+
actual.WorkspaceConfigs = append(actual.WorkspaceConfigs, &config.PortConfig)
140140
}
141141
}
142142

@@ -150,7 +150,7 @@ func TestPortsConfig(t *testing.T) {
150150
case change := <-updates:
151151
actual.InstanceRangeConfigs = change.instanceRangeConfigs
152152
for _, config := range change.instancePortConfigs {
153-
actual.InstancePortConfigs = append(actual.InstancePortConfigs, config)
153+
actual.InstancePortConfigs = append(actual.InstancePortConfigs, &config.PortConfig)
154154
}
155155
}
156156
}

Diff for: components/supervisor/pkg/ports/ports.go

+8-9
Original file line numberDiff line numberDiff line change
@@ -315,10 +315,14 @@ func (pm *Manager) nextState(ctx context.Context) map[uint32]*managedPort {
315315
return mp
316316
}
317317
config, _, exists := pm.configs.Get(port)
318+
var portConfig *gitpod.PortConfig
319+
if exists && config != nil {
320+
portConfig = &config.PortConfig
321+
}
318322
mp := &managedPort{
319323
LocalhostPort: port,
320-
OnExposed: getOnExposedAction(config, port),
321-
OnOpen: getOnOpenAction(config, port),
324+
OnExposed: getOnExposedAction(portConfig, port),
325+
OnOpen: getOnOpenAction(portConfig, port),
322326
}
323327
if exists {
324328
mp.Name = config.Name
@@ -358,7 +362,7 @@ func (pm *Manager) nextState(ctx context.Context) map[uint32]*managedPort {
358362

359363
// 2. second capture configured since we don't want to auto expose already exposed ports
360364
if pm.configs != nil {
361-
pm.configs.ForEach(func(port uint32, config *gitpod.PortConfig) {
365+
pm.configs.ForEach(func(port uint32, config *SortConfig) {
362366
if pm.boundInternally(port) {
363367
return
364368
}
@@ -740,12 +744,7 @@ func (pm *Manager) Subscribe() (*Subscription, error) {
740744
func (pm *Manager) getStatus() []*api.PortsStatus {
741745
res := make([]*api.PortsStatus, 0, len(pm.state))
742746
for port := range pm.state {
743-
portStatus := pm.getPortStatus(port)
744-
// Filter out ports that not served and not inside `.gitpod.yml`
745-
if _, _, ok := pm.configs.Get(port); !ok && !portStatus.Served {
746-
continue
747-
}
748-
res = append(res, portStatus)
747+
res = append(res, pm.getPortStatus(port))
749748
}
750749
sort.SliceStable(res, func(i, j int) bool {
751750
// Max number of port 65536

Diff for: components/supervisor/pkg/ports/ports_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ func TestPortsUpdateState(t *testing.T) {
6363
[]*api.PortsStatus{{LocalPort: 8080, Served: true, OnOpen: api.PortsStatus_notify_private}},
6464
[]*api.PortsStatus{{LocalPort: 8080, Served: true, OnOpen: api.PortsStatus_notify_private, Exposed: &api.ExposedPortInfo{OnExposed: api.OnPortExposedAction_notify_private, Visibility: api.PortVisibility_private, Url: "foobar"}}},
6565
[]*api.PortsStatus{{LocalPort: 8080, Served: true, OnOpen: api.PortsStatus_notify_private, Exposed: &api.ExposedPortInfo{OnExposed: api.OnPortExposedAction_notify_private, Visibility: api.PortVisibility_private, Url: "foobar"}}, {LocalPort: 60000, Served: true}},
66-
[]*api.PortsStatus{{LocalPort: 60000, Served: true}},
67-
{},
66+
[]*api.PortsStatus{{LocalPort: 8080, Served: false, OnOpen: api.PortsStatus_notify_private, Exposed: &api.ExposedPortInfo{OnExposed: api.OnPortExposedAction_notify_private, Visibility: api.PortVisibility_private, Url: "foobar"}}, {LocalPort: 60000, Served: true}},
67+
[]*api.PortsStatus{{LocalPort: 8080, Served: false, OnOpen: api.PortsStatus_notify_private, Exposed: &api.ExposedPortInfo{OnExposed: api.OnPortExposedAction_notify_private, Visibility: api.PortVisibility_private, Url: "foobar"}}},
6868
},
6969
},
7070
{

0 commit comments

Comments
 (0)