Part of duplicate code analysis: #5070
Summary
envutil.GetEnvDuration("MCP_GATEWAY_SESSION_TIMEOUT", 6*time.Hour) appears as a raw literal in internal/server/transport.go even though internal/server/routed.go already defines a dedicated wrapper getRoutedSessionTimeout() for the same call. If the env-var name, default value, or behaviour ever changes, the developer must remember to update both files.
Duplication Details
Pattern: Repeated env-var call for session timeout
- Severity: Medium
- Occurrences: 2
- Locations:
internal/server/transport.go (line 43) — inline in sdk.StreamableHTTPOptions literal
internal/server/routed.go (line 128) — wrapped in getRoutedSessionTimeout()
- Code Sample:
// transport.go (duplicated literal)
SessionTimeout: envutil.GetEnvDuration("MCP_GATEWAY_SESSION_TIMEOUT", 6*time.Hour),
// routed.go (canonical wrapper – already exists)
func getRoutedSessionTimeout() time.Duration {
return envutil.GetEnvDuration("MCP_GATEWAY_SESSION_TIMEOUT", 6*time.Hour)
}
Impact Analysis
- Maintainability: Medium — two places to update if the env-var key or default changes.
- Bug Risk: Low — divergence only manifests if one site is updated without the other.
- Code Bloat: Low — one line, but the pattern sets a bad precedent.
Refactoring Recommendations
-
Move getRoutedSessionTimeout to session.go or a new server/config.go (or rename to getSessionTimeout) so both transport.go and routed.go can call it.
- Estimated effort: < 30 minutes
- Benefits: single source of truth; existing test
TestGetRoutedSessionTimeout continues to cover both callers.
-
Alternatively, promote it to a package-level exported helper SessionTimeout() if callers outside internal/server ever need it.
Implementation Checklist
Parent Issue
See parent analysis report: #5070
Related to #5070
Generated by Duplicate Code Detector · ● 960.3K · ◷
Part of duplicate code analysis: #5070
Summary
envutil.GetEnvDuration("MCP_GATEWAY_SESSION_TIMEOUT", 6*time.Hour)appears as a raw literal ininternal/server/transport.goeven thoughinternal/server/routed.goalready defines a dedicated wrappergetRoutedSessionTimeout()for the same call. If the env-var name, default value, or behaviour ever changes, the developer must remember to update both files.Duplication Details
Pattern: Repeated env-var call for session timeout
internal/server/transport.go(line 43) — inline insdk.StreamableHTTPOptionsliteralinternal/server/routed.go(line 128) — wrapped ingetRoutedSessionTimeout()Impact Analysis
Refactoring Recommendations
Move
getRoutedSessionTimeouttosession.goor a newserver/config.go(or rename togetSessionTimeout) so bothtransport.goandrouted.gocan call it.TestGetRoutedSessionTimeoutcontinues to cover both callers.Alternatively, promote it to a package-level exported helper
SessionTimeout()if callers outsideinternal/serverever need it.Implementation Checklist
getRoutedSessionTimeout()to a shared location withininternal/servertransport.goto call the shared helperTestGetRoutedSessionTimeoutstill passesmake test-unitParent Issue
See parent analysis report: #5070
Related to #5070