refactor(tvix/nar-bridge): deduplicate NAR HEAD and GET
Use a genNarHandler() function accepting a boolean to construct the HTTP handler. Change-Id: I17c054826d91a9dbed8b1f53945a51f27fa60ace Reviewed-on: https://cl.tvl.fyi/c/depot/+/9537 Tested-by: BuildkiteCI Reviewed-by: Connor Brewster <cbrewster@hey.com> Autosubmit: flokli <flokli@flokli.de>
This commit is contained in:
parent
45511004df
commit
c18ff1a270
1 changed files with 27 additions and 50 deletions
|
@ -155,8 +155,9 @@ func renderNar(
|
|||
}
|
||||
|
||||
func registerNarGet(s *Server) {
|
||||
// TODO: properly compose this
|
||||
s.handler.Head(narUrl, func(w http.ResponseWriter, r *http.Request) {
|
||||
// produce a handler for rendering NAR files.
|
||||
genNarHandler := func(isHead bool) func(w http.ResponseWriter, r *http.Request) {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
defer r.Body.Close()
|
||||
|
||||
ctx := r.Context()
|
||||
|
@ -176,7 +177,8 @@ func registerNarGet(s *Server) {
|
|||
|
||||
log := log.WithField("narhash_url", narHash.SRIString())
|
||||
|
||||
err = renderNar(ctx, log, s.directoryServiceClient, s.blobServiceClient, &s.narHashToPathInfoMu, s.narHashToPathInfo, w, narHash, true)
|
||||
// TODO: inline more of that function here?
|
||||
err = renderNar(ctx, log, s.directoryServiceClient, s.blobServiceClient, &s.narHashToPathInfoMu, s.narHashToPathInfo, w, narHash, isHead)
|
||||
if err != nil {
|
||||
if errors.Is(err, fs.ErrNotExist) {
|
||||
w.WriteHeader(http.StatusNotFound)
|
||||
|
@ -186,34 +188,9 @@ func registerNarGet(s *Server) {
|
|||
}
|
||||
}
|
||||
|
||||
})
|
||||
s.handler.Get(narUrl, func(w http.ResponseWriter, r *http.Request) {
|
||||
defer r.Body.Close()
|
||||
|
||||
ctx := r.Context()
|
||||
|
||||
// parse the narhash sent in the request URL
|
||||
narHash, err := parseNarHashFromUrl(chi.URLParamFromCtx(ctx, "narhash"))
|
||||
if err != nil {
|
||||
log.WithError(err).WithField("url", r.URL).Error("unable to decode nar hash from url")
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
_, err := w.Write([]byte("unable to decode nar hash from url"))
|
||||
if err != nil {
|
||||
log.WithError(err).Errorf("unable to write error message to client")
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
log := log.WithField("narhash_url", narHash.SRIString())
|
||||
|
||||
err = renderNar(ctx, log, s.directoryServiceClient, s.blobServiceClient, &s.narHashToPathInfoMu, s.narHashToPathInfo, w, narHash, false)
|
||||
if err != nil {
|
||||
if errors.Is(err, fs.ErrNotExist) {
|
||||
w.WriteHeader(http.StatusNotFound)
|
||||
} else {
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
s.handler.Head(narUrl, genNarHandler(true))
|
||||
s.handler.Get(narUrl, genNarHandler(false))
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue