MCPcopy Create free account
hub / github.com/baidu/EasyFaaS / sendHTTPRequestLoop

Method sendHTTPRequestLoop

pkg/controller/rtctrl/runtime.go:152–225  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

150}
151
152func (info *RuntimeInfo) sendHTTPRequestLoop() {
153 needStop := false
154 defer func() {
155 if needStop {
156 info.stopRuntime()
157 }
158 }()
159loop:
160 for {
161 select {
162 case request := <-info.httpRequestChan:
163
164 httpreq := request.Request
165 reqLogger := request.Logger
166 requestInfo := info.loadRequest(request.RequestID)
167 if requestInfo != nil {
168 requestInfo.StepDone(StageSendRequest)
169 }
170 cancel := request.CtxCancel
171 retryDuration := httpRetryDuration
172 timer := time.NewTimer(info.retryDeadline)
173 RequestLoop:
174 for {
175 select {
176 case <-timer.C:
177 errMsg := fmt.Sprintf("%s Task timed out after %d seconds", requestInfo.RequestID, info.WaitRuntimeAliveTimeout)
178 m := innerErr.AwsErrorMessage{
179 ErrorMessage: errMsg,
180 }
181 requestInfo.InvokeResult(StatusTimeout, m.String())
182 requestInfo.Notify()
183 break RequestLoop
184 case <-requestInfo.TimeoutChannel:
185 // when request timeout, cancel the request
186 cancel()
187 break RequestLoop
188 default:
189 invokeStart := time.Now().UnixNano()
190 httprsp, err := info.httpClient.Do(httpreq)
191 invokeEnd := time.Now().UnixNano()
192 if err != nil {
193 reqLogger.Infof("request failed: %s retry after %s", err.Error(), retryDuration.String())
194 <-time.After(retryDuration)
195 if retryDuration < time.Second {
196 retryDuration += time.Duration(100) * time.Millisecond
197 }
198 continue
199 }
200 requestInfo.InvokeDone()
201 requestInfo.StepDone(StageInvokeDone)
202 reqLogger.Infof("invoke time %d", time.Duration(invokeEnd-invokeStart)/time.Microsecond)
203 resp := &InvokeHTTPResponse{
204 RequestID: request.RequestID,
205 Response: httprsp,
206 }
207 info.httpResponseChan <- resp
208 break RequestLoop
209 }

Callers 1

sendRequestLoopMethod · 0.95

Calls 13

stopRuntimeMethod · 0.95
loadRequestMethod · 0.95
StringMethod · 0.95
InfofFunction · 0.92
InvokeResultMethod · 0.80
NotifyMethod · 0.80
InfofMethod · 0.80
DoneMethod · 0.80
DoMethod · 0.65
StringMethod · 0.65
StepDoneMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected