Skip to content

Commit 284dfb1

Browse files
authored
Merge pull request #129 from smart-mcp-proxy/fix/docker-recovery-ctx-err
fix(upstream): use ctx.Err() instead of select-default for context checks
2 parents f34d82e + 8a7f8a4 commit 284dfb1

File tree

1 file changed

+11
-19
lines changed

1 file changed

+11
-19
lines changed

internal/upstream/manager.go

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1721,10 +1721,8 @@ func (m *Manager) startDockerRecoveryMonitor(ctx context.Context) {
17211721
// Initial check
17221722
if err := m.checkDockerAvailability(ctx); err != nil {
17231723
// Check if context was cancelled before logging
1724-
select {
1725-
case <-ctx.Done():
1724+
if ctx.Err() != nil {
17261725
return
1727-
default:
17281726
}
17291727

17301728
m.logger.Warn("Docker unavailable on startup, starting recovery", zap.Error(err))
@@ -1744,10 +1742,8 @@ func (m *Manager) startDockerRecoveryMonitor(ctx context.Context) {
17441742
case <-ticker.C:
17451743
if err := m.checkDockerAvailability(ctx); err != nil {
17461744
// Check if context was cancelled before logging
1747-
select {
1748-
case <-ctx.Done():
1745+
if ctx.Err() != nil {
17491746
return
1750-
default:
17511747
}
17521748

17531749
m.logger.Warn("Docker became unavailable, starting recovery", zap.Error(err))
@@ -1842,16 +1838,19 @@ func (m *Manager) handleDockerUnavailable(ctx context.Context) {
18421838
return
18431839
case <-time.After(currentInterval):
18441840
// Check if context was cancelled while waiting
1845-
select {
1846-
case <-ctx.Done():
1841+
if ctx.Err() != nil {
18471842
return
1848-
default:
18491843
}
18501844

18511845
attempt++
18521846

18531847
err := m.checkDockerAvailability(recoveryCtx)
18541848
if err == nil {
1849+
// Check before logging success
1850+
if ctx.Err() != nil {
1851+
return
1852+
}
1853+
18551854
// Docker is back!
18561855
elapsed := time.Since(startTime)
18571856
m.logger.Info("Docker recovery successful",
@@ -1870,19 +1869,15 @@ func (m *Manager) handleDockerUnavailable(ctx context.Context) {
18701869
// Trigger reconnection of Docker-based servers
18711870
go func() {
18721871
// Check if context was cancelled before reconnecting
1873-
select {
1874-
case <-ctx.Done():
1872+
if ctx.Err() != nil {
18751873
return
1876-
default:
18771874
}
18781875

18791876
result := m.ForceReconnectAll("docker_recovered")
18801877

18811878
// Check again before logging
1882-
select {
1883-
case <-ctx.Done():
1879+
if ctx.Err() != nil {
18841880
return
1885-
default:
18861881
}
18871882

18881883
if len(result.FailedServers) > 0 {
@@ -1900,11 +1895,8 @@ func (m *Manager) handleDockerUnavailable(ctx context.Context) {
19001895
}
19011896

19021897
// Check if context was cancelled before logging retry
1903-
// Use parent context to catch shutdown faster
1904-
select {
1905-
case <-ctx.Done():
1898+
if ctx.Err() != nil {
19061899
return
1907-
default:
19081900
}
19091901

19101902
// Still unavailable, save state

0 commit comments

Comments
 (0)