1// Copyright 2016, Google Inc. 2// All rights reserved. 3// 4// Redistribution and use in source and binary forms, with or without 5// modification, are permitted provided that the following conditions are 6// met: 7// 8// * Redistributions of source code must retain the above copyright 9// notice, this list of conditions and the following disclaimer. 10// * Redistributions in binary form must reproduce the above 11// copyright notice, this list of conditions and the following disclaimer 12// in the documentation and/or other materials provided with the 13// distribution. 14// * Neither the name of Google Inc. nor the names of its 15// contributors may be used to endorse or promote products derived from 16// this software without specific prior written permission. 17// 18// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 30package gax 31 32import ( 33 v2 "github.com/googleapis/gax-go/v2" 34 "google.golang.org/grpc" 35 "google.golang.org/grpc/codes" 36) 37 38// CallOption is an option used by Invoke to control behaviors of RPC calls. 39// CallOption works by modifying relevant fields of CallSettings. 40type CallOption = v2.CallOption 41 42// Retryer is used by Invoke to determine retry behavior. 43type Retryer = v2.Retryer 44 45// WithRetry sets CallSettings.Retry to fn. 46func WithRetry(fn func() Retryer) CallOption { 47 return v2.WithRetry(fn) 48} 49 50// OnCodes returns a Retryer that retries if and only if 51// the previous attempt returns a GRPC error whose error code is stored in cc. 52// Pause times between retries are specified by bo. 53// 54// bo is only used for its parameters; each Retryer has its own copy. 55func OnCodes(cc []codes.Code, bo Backoff) Retryer { 56 return v2.OnCodes(cc, bo) 57} 58 59// Backoff implements exponential backoff. 60// The wait time between retries is a random value between 0 and the "retry envelope". 61// The envelope starts at Initial and increases by the factor of Multiplier every retry, 62// but is capped at Max. 63type Backoff = v2.Backoff 64 65// WithGRPCOptions allows passing gRPC call options during client creation. 66func WithGRPCOptions(opt ...grpc.CallOption) CallOption { 67 return v2.WithGRPCOptions(opt...) 68} 69 70// CallSettings allow fine-grained control over how calls are made. 71type CallSettings = v2.CallSettings 72