Skip to content

Commit 8ee24a1

Browse files
fix: respond with correct error
1 parent f827441 commit 8ee24a1

2 files changed

Lines changed: 19 additions & 7 deletions

File tree

pkg/api/bzz.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -696,6 +696,8 @@ FETCH:
696696
}
697697

698698
jsonhttp.NotFound(w, "path address not found")
699+
} else if errors.Is(err, topology.ErrNotFound) {
700+
jsonhttp.ServiceUnavailable(w, "content could not be retrieved because no usable peer was available")
699701
} else {
700702
jsonhttp.NotFound(w, nil)
701703
}
@@ -768,12 +770,18 @@ func (s *Service) downloadHandler(logger log.Logger, w http.ResponseWriter, r *h
768770
reader, l, err = joiner.New(ctx, s.storer.Download(cache), s.storer.Cache(), reference, rLevel)
769771
}
770772
if err != nil {
771-
if errors.Is(err, storage.ErrNotFound) || errors.Is(err, topology.ErrNotFound) {
773+
if errors.Is(err, storage.ErrNotFound) {
772774
logger.Debug("api download: not found ", "address", reference, "error", err)
773775
logger.Error(nil, err.Error())
774776
jsonhttp.NotFound(w, nil)
775777
return
776778
}
779+
if errors.Is(err, topology.ErrNotFound) {
780+
logger.Debug("api download: no peers available", "address", reference, "error", err)
781+
logger.Error(nil, err.Error())
782+
jsonhttp.ServiceUnavailable(w, "content could not be retrieved because no usable peer was available")
783+
return
784+
}
777785
logger.Debug("api download: unexpected error", "address", reference, "error", err)
778786
logger.Error(nil, "api download: unexpected error")
779787
jsonhttp.InternalServerError(w, "joiner failed")

pkg/api/chunk.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"github.com/ethersphere/bee/v2/pkg/postage"
2323
"github.com/ethersphere/bee/v2/pkg/storage"
2424
"github.com/ethersphere/bee/v2/pkg/swarm"
25+
"github.com/ethersphere/bee/v2/pkg/topology"
2526
"github.com/gorilla/mux"
2627
)
2728

@@ -256,15 +257,18 @@ func (s *Service) chunkGetHandler(w http.ResponseWriter, r *http.Request) {
256257

257258
chunk, err := s.storer.Download(cache).Get(r.Context(), address)
258259
if err != nil {
259-
if errors.Is(err, storage.ErrNotFound) {
260+
switch {
261+
case errors.Is(err, storage.ErrNotFound):
260262
loggerV1.Debug("chunk not found", "address", address)
261263
jsonhttp.NotFound(w, "chunk not found")
262-
return
263-
264+
case errors.Is(err, topology.ErrNotFound):
265+
loggerV1.Debug("no peers available to retrieve chunk", "address", address)
266+
jsonhttp.ServiceUnavailable(w, "chunk could not be retrieved because no usable peer was available")
267+
default:
268+
logger.Debug("read chunk failed", "chunk_address", address, "error", err)
269+
logger.Error(nil, "read chunk failed")
270+
jsonhttp.InternalServerError(w, "read chunk failed")
264271
}
265-
logger.Debug("read chunk failed", "chunk_address", address, "error", err)
266-
logger.Error(nil, "read chunk failed")
267-
jsonhttp.InternalServerError(w, "read chunk failed")
268272
return
269273
}
270274
w.Header().Set(ContentTypeHeader, "binary/octet-stream")

0 commit comments

Comments
 (0)