forked from TrueCloudLab/neoneo-go
oracle/neofs: avoid panic on failed neofs requests
2023-09-13T06:04:07.114Z WARN failed to perform oracle request {"url": "neofs:BE2c15AbYnKdcsVh77LisCtjifoNEJUekANo1yhQ211X/FMDZvqUCqcduZa8HD6wJNsHWrJ6sqkgBveGuYuL38pvH", "error": "header: status: code = 3072 message = container not found"} panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x50 pc=0xde7c8f] goroutine 302 [running]: github.com/nspcc-dev/neofs-sdk-go/client.(*PayloadReader).close(0x0?, 0x0?) github.com/nspcc-dev/neofs-sdk-go@v1.0.0-rc.11/client/object_get.go:200 +0x2f github.com/nspcc-dev/neofs-sdk-go/client.(*PayloadReader).Close(0x0?) github.com/nspcc-dev/neofs-sdk-go@v1.0.0-rc.11/client/object_get.go:229 +0x1e github.com/nspcc-dev/neo-go/pkg/services/oracle/neofs.clientCloseWrapper.Close({{0x14b45f8?, 0x0?}, 0xc0010a1380?}) github.com/nspcc-dev/neo-go/pkg/services/oracle/neofs/neofs.go:97 +0x3c github.com/nspcc-dev/neo-go/pkg/services/oracle.(*Oracle).processRequest(0xc000255800, 0xc001dfa210, {0xb2d?, 0xc001ad8000?}) github.com/nspcc-dev/neo-go/pkg/services/oracle/request.go:168 +0xee7 github.com/nspcc-dev/neo-go/pkg/services/oracle.(*Oracle).runRequestWorker(0xc000255800) github.com/nspcc-dev/neo-go/pkg/services/oracle/request.go:36 +0xe5 created by github.com/nspcc-dev/neo-go/pkg/services/oracle.(*Oracle).start github.com/nspcc-dev/neo-go/pkg/services/oracle/oracle.go:216 +0xae Signed-off-by: Roman Khimov <roman@nspcc.ru>
This commit is contained in:
parent
0f57ad4a12
commit
a0f9743515
1 changed files with 11 additions and 2 deletions
|
@ -123,11 +123,16 @@ func parseNeoFSURL(u *url.URL) (*oid.Address, []string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func getPayload(ctx context.Context, s user.Signer, c *client.Client, addr *oid.Address) (io.ReadCloser, error) {
|
func getPayload(ctx context.Context, s user.Signer, c *client.Client, addr *oid.Address) (io.ReadCloser, error) {
|
||||||
|
var iorc io.ReadCloser
|
||||||
_, rc, err := c.ObjectGetInit(ctx, addr.Container(), addr.Object(), s, client.PrmObjectGet{})
|
_, rc, err := c.ObjectGetInit(ctx, addr.Container(), addr.Object(), s, client.PrmObjectGet{})
|
||||||
return rc, err
|
if rc != nil {
|
||||||
|
iorc = rc
|
||||||
|
}
|
||||||
|
return iorc, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func getRange(ctx context.Context, s user.Signer, c *client.Client, addr *oid.Address, ps ...string) (io.ReadCloser, error) {
|
func getRange(ctx context.Context, s user.Signer, c *client.Client, addr *oid.Address, ps ...string) (io.ReadCloser, error) {
|
||||||
|
var iorc io.ReadCloser
|
||||||
if len(ps) == 0 {
|
if len(ps) == 0 {
|
||||||
return nil, ErrInvalidRange
|
return nil, ErrInvalidRange
|
||||||
}
|
}
|
||||||
|
@ -136,7 +141,11 @@ func getRange(ctx context.Context, s user.Signer, c *client.Client, addr *oid.Ad
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.ObjectRangeInit(ctx, addr.Container(), addr.Object(), r.GetOffset(), r.GetLength(), s, client.PrmObjectRange{})
|
rc, err := c.ObjectRangeInit(ctx, addr.Container(), addr.Object(), r.GetOffset(), r.GetLength(), s, client.PrmObjectRange{})
|
||||||
|
if rc != nil {
|
||||||
|
iorc = rc
|
||||||
|
}
|
||||||
|
return iorc, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func getObjHeader(ctx context.Context, s user.Signer, c *client.Client, addr *oid.Address) (*object.Object, error) {
|
func getObjHeader(ctx context.Context, s user.Signer, c *client.Client, addr *oid.Address) (*object.Object, error) {
|
||||||
|
|
Loading…
Reference in a new issue