Skip to content

Commit

Permalink
Merge pull request #98 from vansante/send-errors
Browse files Browse the repository at this point in the history
HTTP: Pass some send errors back to sender for easier debugging
  • Loading branch information
vansante authored Jun 27, 2024
2 parents 0c957b0 + 3dd77cb commit b12780f
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 2 deletions.
2 changes: 1 addition & 1 deletion http/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,7 @@ func (c *Client) doSendStream(req *http.Request, pipeWrtr *io.PipeWriter, cancel
case http.StatusNotFound:
return ErrDatasetNotFound
default:
return fmt.Errorf("unexpected status %d sending stream", resp.StatusCode)
return fmt.Errorf("unexpected status %d sending stream, server error: %s", resp.StatusCode, resp.Header.Get(HeaderError))
}
}

Expand Down
7 changes: 6 additions & 1 deletion http/http_handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ const (
const (
HeaderResumeReceiveToken = "X-Receive-Resume-Token"
HeaderResumeReceivedBytes = "X-Received-Bytes"
HeaderError = "X-Error"
)

type ReceiveProperties map[string]string
Expand Down Expand Up @@ -253,6 +254,7 @@ func (h *HTTP) handleReceiveSnapshot(w http.ResponseWriter, req *http.Request, l

if !validIdentifier(filesystem) || (snapshot != "" && !validIdentifier(snapshot)) {
logger.Info("zfs.http.handleReceiveSnapshot: Invalid identifier")
w.Header().Set(HeaderError, "invalid identifier")
w.WriteHeader(http.StatusBadRequest)
return
}
Expand All @@ -271,6 +273,7 @@ func (h *HTTP) handleReceiveSnapshot(w http.ResponseWriter, req *http.Request, l

if datasetResumeToken == "" && givenResumeToken != "" {
logger.Info("zfs.http.handleReceiveSnapshot: Got resume token but found none on dataset", "resumeToken", givenResumeToken)
w.Header().Set(HeaderError, "no resume token on dataset")
w.WriteHeader(http.StatusPreconditionFailed)
return
}
Expand All @@ -280,6 +283,7 @@ func (h *HTTP) handleReceiveSnapshot(w http.ResponseWriter, req *http.Request, l
"givenResumeToken", givenResumeToken,
"actualResumeToken", datasetResumeToken,
)
w.Header().Set(HeaderError, "invalid resume token")
w.WriteHeader(http.StatusConflict)
return
}
Expand All @@ -300,7 +304,8 @@ func (h *HTTP) handleReceiveSnapshot(w http.ResponseWriter, req *http.Request, l
})
if err != nil {
logger.Error("zfs.http.handleReceiveSnapshot: Error storing", "error", err)
w.WriteHeader(http.StatusNotFound)
w.Header().Set(HeaderError, err.Error())
w.WriteHeader(http.StatusInternalServerError)
return
}

Expand Down

0 comments on commit b12780f

Please sign in to comment.