1/* 2 * 3 * Copyright 2017 gRPC authors. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 */ 18 19// Package connectivity defines connectivity semantics. 20// For details, see https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md. 21// All APIs in this package are experimental. 22package connectivity 23 24import ( 25 "golang.org/x/net/context" 26 "google.golang.org/grpc/grpclog" 27) 28 29// State indicates the state of connectivity. 30// It can be the state of a ClientConn or SubConn. 31type State int 32 33func (s State) String() string { 34 switch s { 35 case Idle: 36 return "IDLE" 37 case Connecting: 38 return "CONNECTING" 39 case Ready: 40 return "READY" 41 case TransientFailure: 42 return "TRANSIENT_FAILURE" 43 case Shutdown: 44 return "SHUTDOWN" 45 default: 46 grpclog.Errorf("unknown connectivity state: %d", s) 47 return "Invalid-State" 48 } 49} 50 51const ( 52 // Idle indicates the ClientConn is idle. 53 Idle State = iota 54 // Connecting indicates the ClienConn is connecting. 55 Connecting 56 // Ready indicates the ClientConn is ready for work. 57 Ready 58 // TransientFailure indicates the ClientConn has seen a failure but expects to recover. 59 TransientFailure 60 // Shutdown indicates the ClientConn has started shutting down. 61 Shutdown 62) 63 64// Reporter reports the connectivity states. 65type Reporter interface { 66 // CurrentState returns the current state of the reporter. 67 CurrentState() State 68 // WaitForStateChange blocks until the reporter's state is different from the given state, 69 // and returns true. 70 // It returns false if <-ctx.Done() can proceed (ctx got timeout or got canceled). 71 WaitForStateChange(context.Context, State) bool 72} 73