Commit 3c2926b1 authored by inphi's avatar inphi

go/proxyd: Add debug cache status header to HTTP responses

parent d064eb8e
---
'@eth-optimism/proxyd': minor
---
Add debug cache status header to proxyd responses
......@@ -159,6 +159,7 @@ func (s *Server) HandleRPC(w http.ResponseWriter, r *http.Request) {
}
batchRes := make([]*RPCRes, len(reqs), len(reqs))
var cached bool
for i := 0; i < len(reqs); i++ {
req, err := ParseRPCReq(reqs[i])
if err != nil {
......@@ -167,9 +168,10 @@ func (s *Server) HandleRPC(w http.ResponseWriter, r *http.Request) {
continue
}
batchRes[i] = s.handleSingleRPC(ctx, req)
batchRes[i], cached = s.handleSingleRPC(ctx, req)
}
setCacheHeader(w, cached)
writeBatchRPCRes(ctx, w, batchRes)
return
}
......@@ -181,14 +183,15 @@ func (s *Server) HandleRPC(w http.ResponseWriter, r *http.Request) {
return
}
backendRes := s.handleSingleRPC(ctx, req)
backendRes, cached := s.handleSingleRPC(ctx, req)
setCacheHeader(w, cached)
writeRPCRes(ctx, w, backendRes)
}
func (s *Server) handleSingleRPC(ctx context.Context, req *RPCReq) *RPCRes {
func (s *Server) handleSingleRPC(ctx context.Context, req *RPCReq) (*RPCRes, bool) {
if err := ValidateRPCReq(req); err != nil {
RecordRPCError(ctx, BackendProxyd, MethodUnknown, err)
return NewRPCErrorRes(nil, err)
return NewRPCErrorRes(nil, err), false
}
group := s.rpcMethodMappings[req.Method]
......@@ -202,7 +205,7 @@ func (s *Server) handleSingleRPC(ctx context.Context, req *RPCReq) *RPCRes {
"method", req.Method,
)
RecordRPCError(ctx, BackendProxyd, MethodUnknown, ErrMethodNotWhitelisted)
return NewRPCErrorRes(req.ID, ErrMethodNotWhitelisted)
return NewRPCErrorRes(req.ID, ErrMethodNotWhitelisted), false
}
var backendRes *RPCRes
......@@ -215,7 +218,7 @@ func (s *Server) handleSingleRPC(ctx context.Context, req *RPCReq) *RPCRes {
)
}
if backendRes != nil {
return backendRes
return backendRes, true
}
backendRes, err = s.backendGroups[group].Forward(ctx, req)
......@@ -226,7 +229,7 @@ func (s *Server) handleSingleRPC(ctx context.Context, req *RPCReq) *RPCRes {
"req_id", GetReqID(ctx),
"err", err,
)
return NewRPCErrorRes(req.ID, err)
return NewRPCErrorRes(req.ID, err), false
}
if backendRes.Error == nil {
......@@ -239,7 +242,7 @@ func (s *Server) handleSingleRPC(ctx context.Context, req *RPCReq) *RPCRes {
}
}
return backendRes
return backendRes, false
}
func (s *Server) HandleWS(w http.ResponseWriter, r *http.Request) {
......@@ -322,6 +325,15 @@ func (s *Server) populateContext(w http.ResponseWriter, r *http.Request) context
)
}
func setCacheHeader(w http.ResponseWriter, cached bool) {
const cacheStatusHdr = "X-Proxyd-Cache-Status"
if cached {
w.Header().Set(cacheStatusHdr, "HIT")
} else {
w.Header().Set(cacheStatusHdr, "MISS")
}
}
func writeRPCError(ctx context.Context, w http.ResponseWriter, id json.RawMessage, err error) {
var res *RPCRes
if r, ok := err.(*RPCErr); ok {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment