1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
package modshared
import (
"context"
"errors"
"gitlab.com/gitlab-org/cluster-integration/gitlab-agent/v16/internal/tool/grpctool"
"gitlab.com/gitlab-org/cluster-integration/gitlab-agent/v16/internal/tool/retry"
"go.uber.org/zap"
)
type RpcApiStub struct {
StreamCtx context.Context
Logger *zap.Logger
}
func (a *RpcApiStub) PollWithBackoff(cfg retry.PollConfig, f retry.PollWithBackoffFunc) error {
// this context must only be used here, not inside of f() - connection should be closed only when idle.
ageCtx := grpctool.MaxConnectionAgeContextFromStreamContext(a.StreamCtx)
err := retry.PollWithBackoff(ageCtx, cfg, func(ctx context.Context) (error, retry.AttemptResult) {
return f()
})
if errors.Is(err, retry.ErrWaitTimeout) {
return nil // all good, ctx is done
}
return err
}
func (a *RpcApiStub) Log() *zap.Logger {
return a.Logger
}
|