[#279] pool: Count errors in object search
All checks were successful
DCO / DCO (pull_request) Successful in 1m0s
Tests and linters / Tests (pull_request) Successful in 1m14s
Tests and linters / Lint (pull_request) Successful in 1m31s

Signed-off-by: Marina Biryukova <m.biryukova@yadro.com>
This commit is contained in:
Marina Biryukova 2024-10-21 11:59:37 +03:00
parent 79f387317a
commit 5594551a52
2 changed files with 12 additions and 5 deletions

View file

@ -220,7 +220,7 @@ func (x *ObjectListReader) Close() (*ResObjectSearch, error) {
defer x.cancelCtxStream()
if x.err != nil && !errors.Is(x.err, io.EOF) {
return nil, x.err
return &x.res, x.err
}
return &x.res, nil

View file

@ -1085,7 +1085,7 @@ func (c *clientWrapper) objectSearch(ctx context.Context, prm PrmObjectSearch) (
return ResObjectSearch{}, fmt.Errorf("init object searching on client: %w", err)
}
return ResObjectSearch{r: res}, nil
return ResObjectSearch{r: res, handleError: c.handleError}, nil
}
// sessionCreate invokes sdkClient.SessionCreate parse response status to error and return result as is.
@ -1276,7 +1276,7 @@ func needCountError(ctx context.Context, err error) bool {
return false
}
if errors.Is(ctx.Err(), context.Canceled) {
if ctx != nil && errors.Is(ctx.Err(), context.Canceled) {
return false
}
@ -2724,17 +2724,24 @@ func (p *Pool) ObjectRange(ctx context.Context, prm PrmObjectRange) (ResObjectRa
// Must be initialized using Pool.SearchObjects, any other usage is unsafe.
type ResObjectSearch struct {
r *sdkClient.ObjectListReader
handleError func(context.Context, apistatus.Status, error) error
}
// Read reads another list of the object identifiers.
func (x *ResObjectSearch) Read(buf []oid.ID) (int, error) {
n, ok := x.r.Read(buf)
if !ok {
_, err := x.r.Close()
res, err := x.r.Close()
if err == nil {
return n, io.EOF
}
var status apistatus.Status
if res != nil {
status = res.Status()
}
err = x.handleError(nil, status, err)
return n, err
}