@@ -36,8 +36,11 @@ const (
36
36
defaultPublishMetricsInterval = 20 * time .Second
37
37
38
38
// The maximum time to wait between heartbeats without disconnecting
39
- defaultHeartbeatTimeout = 1 * time .Minute
40
- defaultHeartbeatJitter = 1 * time .Minute
39
+ defaultHeartbeatTimeout = 1 * time .Minute
40
+ defaultHeartbeatJitter = 1 * time .Minute
41
+ // wsRWTimeout is the duration of read and write deadline for the
42
+ // websocket connection
43
+ wsRWTimeout = 2 * defaultHeartbeatTimeout + defaultHeartbeatJitter
41
44
deregisterContainerInstanceHandler = "TCSDeregisterContainerInstanceHandler"
42
45
)
43
46
@@ -92,7 +95,9 @@ func startTelemetrySession(params TelemetrySessionParams, statsEngine stats.Engi
92
95
return err
93
96
}
94
97
url := formatURL (tcsEndpoint , params .Cfg .Cluster , params .ContainerInstanceArn )
95
- return startSession (url , params .Cfg , params .CredentialProvider , statsEngine , defaultHeartbeatTimeout , defaultHeartbeatJitter , defaultPublishMetricsInterval , params .DeregisterInstanceEventStream )
98
+ return startSession (url , params .Cfg , params .CredentialProvider , statsEngine ,
99
+ defaultHeartbeatTimeout , defaultHeartbeatJitter , defaultPublishMetricsInterval ,
100
+ params .DeregisterInstanceEventStream )
96
101
}
97
102
98
103
func startSession (url string ,
@@ -103,7 +108,7 @@ func startSession(url string,
103
108
publishMetricsInterval time.Duration ,
104
109
deregisterInstanceEventStream * eventstream.EventStream ) error {
105
110
client := tcsclient .New (url , cfg , credentialProvider , statsEngine ,
106
- publishMetricsInterval , defaultHeartbeatTimeout + defaultHeartbeatJitter )
111
+ publishMetricsInterval , wsRWTimeout )
107
112
defer client .Close ()
108
113
109
114
err := deregisterInstanceEventStream .Subscribe (deregisterContainerInstanceHandler , client .Disconnect )
@@ -112,24 +117,24 @@ func startSession(url string,
112
117
}
113
118
defer deregisterInstanceEventStream .Unsubscribe (deregisterContainerInstanceHandler )
114
119
120
+ err = client .Connect ()
121
+ if err != nil {
122
+ seelog .Errorf ("Error connecting to TCS: %v" , err .Error ())
123
+ return err
124
+ }
125
+ seelog .Info ("Connected to TCS endpoint" )
115
126
// start a timer and listens for tcs heartbeats/acks. The timer is reset when
116
127
// we receive a heartbeat from the server or when a publish metrics message
117
128
// is acked.
118
129
timer := time .AfterFunc (utils .AddJitter (heartbeatTimeout , heartbeatJitter ), func () {
119
130
// Close the connection if there haven't been any messages received from backend
120
131
// for a long time.
121
- seelog .Info ("TCS Connection hasn't had a heartbeat or an ack message in too long of a timeout ; disconnecting" )
132
+ seelog .Info ("TCS Connection hasn't had any activity for too long; disconnecting" )
122
133
client .Disconnect ()
123
134
})
124
135
defer timer .Stop ()
125
136
client .AddRequestHandler (heartbeatHandler (timer ))
126
137
client .AddRequestHandler (ackPublishMetricHandler (timer ))
127
- err = client .Connect ()
128
- if err != nil {
129
- seelog .Errorf ("Error connecting to TCS: %v" , err .Error ())
130
- return err
131
- }
132
- seelog .Info ("Connected to TCS endpoint" )
133
138
client .SetAnyRequestHandler (anyMessageHandler (client ))
134
139
return client .Serve ()
135
140
}
@@ -155,9 +160,9 @@ func ackPublishMetricHandler(timer *time.Timer) func(*ecstcs.AckPublishMetric) {
155
160
// connection is active
156
161
func anyMessageHandler (client wsclient.ClientServer ) func (interface {}) {
157
162
return func (interface {}) {
158
- seelog .Trace ("TCS activity occured " )
163
+ seelog .Trace ("TCS activity occurred " )
159
164
// Reset read deadline as there's activity on the channel
160
- if err := client .SetReadDeadline (time .Now ().Add (defaultHeartbeatTimeout + defaultHeartbeatJitter )); err != nil {
165
+ if err := client .SetReadDeadline (time .Now ().Add (wsRWTimeout )); err != nil {
161
166
seelog .Warnf ("Unable to extend read deadline for TCS connection: %v" , err )
162
167
}
163
168
}
0 commit comments