17830: Sets up X-Request-Id if not provided by client. Adds it to the response.
[arvados.git] / lib / controller / router / router.go
index 5ceabbfb1d56fab171d8d4a8dfabca585f1362f6..82e81d089b70625722ac99906ba5e4c74639fc56 100644 (file)
@@ -505,7 +505,12 @@ func (rtr *router) addRoute(endpoint arvados.APIEndpoint, defaultOpts func() int
                        }
                }
                ctx := auth.NewContext(req.Context(), creds)
-               ctx = arvados.ContextWithRequestID(ctx, req.Header.Get("X-Request-Id"))
+               var reqId string
+               if reqId = req.Header.Get("X-Request-Id"); reqId == "" {
+                       reqIDGen := httpserver.IDGenerator{Prefix: "req-"}
+                       reqId = reqIDGen.Next()
+               }
+               ctx = arvados.ContextWithRequestID(ctx, reqId)
                logger.WithFields(logrus.Fields{
                        "apiEndpoint": endpoint,
                        "apiOptsType": fmt.Sprintf("%T", opts),
@@ -517,7 +522,7 @@ func (rtr *router) addRoute(endpoint arvados.APIEndpoint, defaultOpts func() int
                        rtr.sendError(w, err)
                        return
                }
-               rtr.sendResponse(w, req, resp, respOpts)
+               rtr.sendResponse(w, req, resp, respOpts, reqId)
        })
 }