Skip to content

Commit aba2a9e

Browse files
committed
DERP servers partially unhealthy
1 parent 6c59dc3 commit aba2a9e

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

coderd/healthcheck/derphealth/derp.go

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ type ReportOptions struct {
9999

100100
func (r *Report) Run(ctx context.Context, opts *ReportOptions) {
101101
r.Healthy = true
102+
r.Severity = health.SeverityOK
103+
102104
r.Regions = map[int]*RegionReport{}
103105
r.Warnings = []string{}
104106

@@ -150,6 +152,13 @@ func (r *Report) Run(ctx context.Context, opts *ReportOptions) {
150152
r.NetcheckErr = convertError(netcheckErr)
151153

152154
wg.Wait()
155+
156+
// Review region reports and select the highest severity.
157+
for _, regionReport := range r.Regions {
158+
if regionReport.Severity.Value() > r.Severity.Value() {
159+
r.Severity = regionReport.Severity
160+
}
161+
}
153162
}
154163

155164
func (r *RegionReport) Run(ctx context.Context) {
@@ -203,14 +212,19 @@ func (r *RegionReport) Run(ctx context.Context) {
203212
// Coder allows for 1 unhealthy node in the region, unless there is only 1 node.
204213
if len(r.Region.Nodes) == 1 {
205214
r.Healthy = healthyNodes == len(r.Region.Nodes)
206-
} else if healthyNodes < len(r.Region.Nodes) {
215+
r.Severity = r.NodeReports[0].Severity
216+
} else if healthyNodes+1 == len(r.Region.Nodes) {
217+
// r.Healthy = true (by default)
218+
r.Severity = health.SeverityWarning
207219
r.Warnings = append(r.Warnings, oneNodeUnhealthy)
208-
}
220+
} else if healthyNodes+1 < len(r.Region.Nodes) {
221+
r.Healthy = false
209222

210-
// Review node reports and select the highest severing.
211-
for _, nodeReport := range r.NodeReports {
212-
if nodeReport.Severity.Value() > r.Severity.Value() {
213-
r.Severity = nodeReport.Severity
223+
// Review node reports and select the highest severity.
224+
for _, nodeReport := range r.NodeReports {
225+
if nodeReport.Severity.Value() > r.Severity.Value() {
226+
r.Severity = nodeReport.Severity
227+
}
214228
}
215229
}
216230
}

coderd/healthcheck/derphealth/derp_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"tailscale.com/types/key"
1919

2020
"github.com/coder/coder/v2/coderd/healthcheck/derphealth"
21+
"github.com/coder/coder/v2/coderd/healthcheck/health"
2122
"github.com/coder/coder/v2/tailnet"
2223
"github.com/coder/coder/v2/testutil"
2324
)
@@ -123,10 +124,13 @@ func TestDERP(t *testing.T) {
123124
report.Run(ctx, opts)
124125

125126
assert.True(t, report.Healthy)
127+
assert.Equal(t, health.SeverityWarning, report.Severity)
126128
for _, region := range report.Regions {
127129
assert.True(t, region.Healthy)
128130
assert.True(t, region.NodeReports[0].Healthy)
131+
assert.Equal(t, health.SeverityOK, region.NodeReports[0].Severity)
129132
assert.False(t, region.NodeReports[1].Healthy)
133+
assert.Equal(t, health.SeverityError, region.NodeReports[1].Severity)
130134
assert.Len(t, region.Warnings, 1)
131135
}
132136
})

0 commit comments

Comments
 (0)