feat(gateway): error handling improvements (500, 502, 504) (#9660)
* fix(gateway): return 500 for all /ip[nf]s/id failures * fix: replace deprecated structs * chore: bump go-libipfs to version from main
Henrique Dias committed
Feb 28, 2023 at 02:21 UTC
1794649bf2d4f8f1607a67f25632053a4d873617
6 files changed
+20
-20
core/commands/bitswap.go
+3
-3
@@ -11,7 +11,7 @@ import (
11
cidutil "github.com/ipfs/go-cidutil"
12
cmds "github.com/ipfs/go-ipfs-cmds"
13
bitswap "github.com/ipfs/go-libipfs/bitswap"
14
- decision "github.com/ipfs/go-libipfs/bitswap/decision"
14
+ "github.com/ipfs/go-libipfs/bitswap/server"
15
peer "github.com/libp2p/go-libp2p/core/peer"
16
)
17
@@ -179,7 +179,7 @@ prints the ledger associated with a given peer.
179
Arguments: []cmds.Argument{
180
cmds.StringArg("peer", true, false, "The PeerID (B58) of the ledger to inspect."),
181
},
182
- Type: decision.Receipt{},
182
+ Type: server.Receipt{},
183
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
184
nd, err := cmdenv.GetNode(env)
185
if err != nil {
@@ -203,7 +203,7 @@ prints the ledger associated with a given peer.
203
return cmds.EmitOnce(res, bs.LedgerForPeer(partner))
204
},
205
Encoders: cmds.EncoderMap{
206
- cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *decision.Receipt) error {
206
+ cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *server.Receipt) error {
207
fmt.Fprintf(w, "Ledger for %s\n"+
208
"Debt ratio:\t%f\n"+
209
"Exchanges:\t%d\n"+
docs/examples/kubo-as-a-library/go.mod
+2
-2
@@ -7,7 +7,7 @@ go 1.18
7
replace github.com/ipfs/kubo => ./../../..
8
9
require (
10
- github.com/ipfs/go-libipfs v0.6.1-0.20230222011044-7b201415a176
10
+ github.com/ipfs/go-libipfs v0.6.1-0.20230228004237-36918f45f260
11
github.com/ipfs/interface-go-ipfs-core v0.11.0
12
github.com/ipfs/kubo v0.0.0-00010101000000-000000000000
13
github.com/libp2p/go-libp2p v0.26.0
@@ -101,7 +101,7 @@ require (
101
github.com/ipfs/go-metrics-interface v0.0.1 // indirect
102
github.com/ipfs/go-mfs v0.2.1 // indirect
103
github.com/ipfs/go-namesys v0.7.0 // indirect
104
- github.com/ipfs/go-path v0.3.0 // indirect
104
+ github.com/ipfs/go-path v0.3.1 // indirect
105
github.com/ipfs/go-peertaskqueue v0.8.1 // indirect
106
github.com/ipfs/go-unixfs v0.4.3 // indirect
107
github.com/ipfs/go-unixfsnode v1.5.2 // indirect
docs/examples/kubo-as-a-library/go.sum
+4
-4
@@ -569,8 +569,8 @@ github.com/ipfs/go-ipld-legacy v0.1.1 h1:BvD8PEuqwBHLTKqlGFTHSwrwFOMkVESEvwIYwR2
569
github.com/ipfs/go-ipld-legacy v0.1.1/go.mod h1:8AyKFCjgRPsQFf15ZQgDB8Din4DML/fOmKZkkFkrIEg=
570
github.com/ipfs/go-ipns v0.3.0 h1:ai791nTgVo+zTuq2bLvEGmWP1M0A6kGTXUsgv/Yq67A=
571
github.com/ipfs/go-ipns v0.3.0/go.mod h1:3cLT2rbvgPZGkHJoPO1YMJeh6LtkxopCkKFcio/wE24=
572
-github.com/ipfs/go-libipfs v0.6.1-0.20230222011044-7b201415a176 h1:QJvWxLRKucrAo7W2vLz5FA2iLKwW6WkHWn8AL8kXAUU=
573
-github.com/ipfs/go-libipfs v0.6.1-0.20230222011044-7b201415a176/go.mod h1:UjjDIuehp2GzlNP0HEr5I9GfFT7zWgst+YfpUEIThtw=
572
+github.com/ipfs/go-libipfs v0.6.1-0.20230228004237-36918f45f260 h1:QRLcCoITO9ZQo2pvjmrfngqKhUKjPopBva3MVH62LT8=
573
+github.com/ipfs/go-libipfs v0.6.1-0.20230228004237-36918f45f260/go.mod h1:3OoEQs95UkqFEf65SbRDpiMwuzI+C/jTsYQaHfBbJXI=
574
github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM=
575
github.com/ipfs/go-log v1.0.2/go.mod h1:1MNjMxe0u6xvJZgeqbJ8vdo2TKaGwZ1a0Bpza+sr2Sk=
576
github.com/ipfs/go-log v1.0.3/go.mod h1:OsLySYkwIbiSUR/yBTdv1qPtcE4FW3WPWk/ewz9Ru+A=
@@ -598,8 +598,8 @@ github.com/ipfs/go-mfs v0.2.1/go.mod h1:Woj80iuw4ajDnIP6+seRaoHpPsc9hmL0pk/nDNDW
598
github.com/ipfs/go-namesys v0.7.0 h1:xqosk71GIVRkFDtF2UNRcXn4LdNeo7tzuy8feHD6NbU=
599
github.com/ipfs/go-namesys v0.7.0/go.mod h1:KYSZBVZG3VJC34EfqqJPG7T48aWgxseoMPAPA5gLyyQ=
600
github.com/ipfs/go-path v0.2.1/go.mod h1:NOScsVgxfC/eIw4nz6OiGwK42PjaSJ4Y/ZFPn1Xe07I=
601
-github.com/ipfs/go-path v0.3.0 h1:tkjga3MtpXyM5v+3EbRvOHEoo+frwi4oumw5K+KYWyA=
602
-github.com/ipfs/go-path v0.3.0/go.mod h1:NOScsVgxfC/eIw4nz6OiGwK42PjaSJ4Y/ZFPn1Xe07I=
601
+github.com/ipfs/go-path v0.3.1 h1:wkeaCWE/NTuuPGlEkLTsED5UkzfKYZpxaFFPgk8ZVLE=
602
+github.com/ipfs/go-path v0.3.1/go.mod h1:eNLsxJEEMxn/CDzUJ6wuNl+6No6tEUhOZcPKsZsYX0E=
603
github.com/ipfs/go-peertaskqueue v0.1.0/go.mod h1:Jmk3IyCcfl1W3jTW3YpghSwSEC6IJ3Vzz/jUmWw8Z0U=
604
github.com/ipfs/go-peertaskqueue v0.7.0/go.mod h1:M/akTIE/z1jGNXMU7kFB4TeSEFvj68ow0Rrb04donIU=
605
github.com/ipfs/go-peertaskqueue v0.8.1 h1:YhxAs1+wxb5jk7RvS0LHdyiILpNmRIRnZVztekOF0pg=
go.mod
+2
-2
@@ -45,7 +45,7 @@ require (
45
github.com/ipfs/go-ipld-git v0.1.1
46
github.com/ipfs/go-ipld-legacy v0.1.1
47
github.com/ipfs/go-ipns v0.3.0
48
- github.com/ipfs/go-libipfs v0.6.1-0.20230222011044-7b201415a176
48
+ github.com/ipfs/go-libipfs v0.6.1-0.20230228004237-36918f45f260
49
github.com/ipfs/go-log v1.0.5
50
github.com/ipfs/go-log/v2 v2.5.1
51
github.com/ipfs/go-merkledag v0.9.0
@@ -53,7 +53,7 @@ require (
53
github.com/ipfs/go-metrics-prometheus v0.0.2
54
github.com/ipfs/go-mfs v0.2.1
55
github.com/ipfs/go-namesys v0.7.0
56
- github.com/ipfs/go-path v0.3.0
56
+ github.com/ipfs/go-path v0.3.1
57
github.com/ipfs/go-pinning-service-http-client v0.1.2
58
github.com/ipfs/go-unixfs v0.4.3
59
github.com/ipfs/go-unixfsnode v1.5.2
go.sum
+4
-4
@@ -591,8 +591,8 @@ github.com/ipfs/go-ipld-legacy v0.1.1 h1:BvD8PEuqwBHLTKqlGFTHSwrwFOMkVESEvwIYwR2
591
github.com/ipfs/go-ipld-legacy v0.1.1/go.mod h1:8AyKFCjgRPsQFf15ZQgDB8Din4DML/fOmKZkkFkrIEg=
592
github.com/ipfs/go-ipns v0.3.0 h1:ai791nTgVo+zTuq2bLvEGmWP1M0A6kGTXUsgv/Yq67A=
593
github.com/ipfs/go-ipns v0.3.0/go.mod h1:3cLT2rbvgPZGkHJoPO1YMJeh6LtkxopCkKFcio/wE24=
594
-github.com/ipfs/go-libipfs v0.6.1-0.20230222011044-7b201415a176 h1:QJvWxLRKucrAo7W2vLz5FA2iLKwW6WkHWn8AL8kXAUU=
595
-github.com/ipfs/go-libipfs v0.6.1-0.20230222011044-7b201415a176/go.mod h1:UjjDIuehp2GzlNP0HEr5I9GfFT7zWgst+YfpUEIThtw=
594
+github.com/ipfs/go-libipfs v0.6.1-0.20230228004237-36918f45f260 h1:QRLcCoITO9ZQo2pvjmrfngqKhUKjPopBva3MVH62LT8=
595
+github.com/ipfs/go-libipfs v0.6.1-0.20230228004237-36918f45f260/go.mod h1:3OoEQs95UkqFEf65SbRDpiMwuzI+C/jTsYQaHfBbJXI=
596
github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM=
597
github.com/ipfs/go-log v1.0.2/go.mod h1:1MNjMxe0u6xvJZgeqbJ8vdo2TKaGwZ1a0Bpza+sr2Sk=
598
github.com/ipfs/go-log v1.0.3/go.mod h1:OsLySYkwIbiSUR/yBTdv1qPtcE4FW3WPWk/ewz9Ru+A=
@@ -622,8 +622,8 @@ github.com/ipfs/go-mfs v0.2.1/go.mod h1:Woj80iuw4ajDnIP6+seRaoHpPsc9hmL0pk/nDNDW
622
github.com/ipfs/go-namesys v0.7.0 h1:xqosk71GIVRkFDtF2UNRcXn4LdNeo7tzuy8feHD6NbU=
623
github.com/ipfs/go-namesys v0.7.0/go.mod h1:KYSZBVZG3VJC34EfqqJPG7T48aWgxseoMPAPA5gLyyQ=
624
github.com/ipfs/go-path v0.2.1/go.mod h1:NOScsVgxfC/eIw4nz6OiGwK42PjaSJ4Y/ZFPn1Xe07I=
625
-github.com/ipfs/go-path v0.3.0 h1:tkjga3MtpXyM5v+3EbRvOHEoo+frwi4oumw5K+KYWyA=
626
-github.com/ipfs/go-path v0.3.0/go.mod h1:NOScsVgxfC/eIw4nz6OiGwK42PjaSJ4Y/ZFPn1Xe07I=
625
+github.com/ipfs/go-path v0.3.1 h1:wkeaCWE/NTuuPGlEkLTsED5UkzfKYZpxaFFPgk8ZVLE=
626
+github.com/ipfs/go-path v0.3.1/go.mod h1:eNLsxJEEMxn/CDzUJ6wuNl+6No6tEUhOZcPKsZsYX0E=
627
github.com/ipfs/go-peertaskqueue v0.1.0/go.mod h1:Jmk3IyCcfl1W3jTW3YpghSwSEC6IJ3Vzz/jUmWw8Z0U=
628
github.com/ipfs/go-peertaskqueue v0.7.0/go.mod h1:M/akTIE/z1jGNXMU7kFB4TeSEFvj68ow0Rrb04donIU=
629
github.com/ipfs/go-peertaskqueue v0.8.1 h1:YhxAs1+wxb5jk7RvS0LHdyiILpNmRIRnZVztekOF0pg=
test/cli/gateway_test.go
+5
-5
@@ -126,10 +126,10 @@ func TestGateway(t *testing.T) {
126
assert.Equal(t, 404, resp.StatusCode)
127
})
128
129
- t.Run("GET IPFS invalid CID returns 400 (Bad Request)", func(t *testing.T) {
129
+ t.Run("GET IPFS invalid CID returns 500 (Internal Server Error)", func(t *testing.T) {
130
t.Parallel()
131
resp := client.Get("/ipfs/QmInvalid/pleaseDontAddMe")
132
- assert.Equal(t, 400, resp.StatusCode)
132
+ assert.Equal(t, 500, resp.StatusCode)
133
})
134
135
t.Run("GET IPFS inlined zero-length data object returns ok code (200)", func(t *testing.T) {
@@ -166,10 +166,10 @@ func TestGateway(t *testing.T) {
166
t.Parallel()
167
node.IPFS("name", "publish", "--allow-offline", cid)
168
169
- t.Run("GET invalid IPNS root returns 400 (Bad Request)", func(t *testing.T) {
169
+ t.Run("GET invalid IPNS root returns 500 (Internal Server Error)", func(t *testing.T) {
170
t.Parallel()
171
resp := client.Get("/ipns/QmInvalid/pleaseDontAddMe")
172
- assert.Equal(t, 400, resp.StatusCode)
172
+ assert.Equal(t, 500, resp.StatusCode)
173
})
174
175
t.Run("GET IPNS path succeeds", func(t *testing.T) {
@@ -198,7 +198,7 @@ func TestGateway(t *testing.T) {
198
199
t.Run("GET invalid IPFS path errors", func(t *testing.T) {
200
t.Parallel()
201
- assert.Equal(t, 400, client.Get("/ipfs/12345").StatusCode)
201
+ assert.Equal(t, 500, client.Get("/ipfs/12345").StatusCode)
202
})
203
204
t.Run("GET invalid path errors", func(t *testing.T) {