func()

in client.go [67:92]


func (client *Client) doRetry(ctx context.Context, fun func() error) error {
	var err error
	for i := 0; i <= client.MaxRetries; i++ {
		if ctx.Err() != nil {
			return ctx.Err() // ctx canceled, don't retry
		}
		if err = client.getConn(ctx); err != nil {
			continue
		}

		err = fun()
		// check if we have encountered a server-side error before retrying
		var ioError *Error
		if errors.As(err, &ioError) {
			return fmt.Errorf("ZK server returned error: %w", err) // server errors are non-retryable
		}

		if err != nil {
			continue // retry
		}

		return nil
	}

	return fmt.Errorf("%w (%d): %v", ErrMaxRetries, client.MaxRetries, err)
}