1 /* 2 * Copyright 2016 The gRPC Authors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package io.grpc; 18 19 /** 20 * The connectivity states. 21 * 22 * @see <a href="https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md"> 23 * more information</a> 24 */ 25 @ExperimentalApi("https://github.com/grpc/grpc-java/issues/4359") 26 public enum ConnectivityState { 27 /** 28 * The channel is trying to establish a connection and is waiting to make progress on one of the 29 * steps involved in name resolution, TCP connection establishment or TLS handshake. This may be 30 * used as the initial state for channels upon creation. 31 */ 32 CONNECTING, 33 34 /** 35 * The channel has successfully established a connection all the way through TLS handshake (or 36 * equivalent) and all subsequent attempt to communicate have succeeded (or are pending without 37 * any known failure ). 38 */ 39 READY, 40 41 /** 42 * There has been some transient failure (such as a TCP 3-way handshake timing out or a socket 43 * error). Channels in this state will eventually switch to the CONNECTING state and try to 44 * establish a connection again. Since retries are done with exponential backoff, channels that 45 * fail to connect will start out spending very little time in this state but as the attempts 46 * fail repeatedly, the channel will spend increasingly large amounts of time in this state. For 47 * many non-fatal failures (e.g., TCP connection attempts timing out because the server is not 48 * yet available), the channel may spend increasingly large amounts of time in this state. 49 */ 50 TRANSIENT_FAILURE, 51 52 /** 53 * This is the state where the channel is not even trying to create a connection because of a 54 * lack of new or pending RPCs. New RPCs MAY be created in this state. Any attempt to start an 55 * RPC on the channel will push the channel out of this state to connecting. When there has been 56 * no RPC activity on a channel for a configurable IDLE_TIMEOUT, i.e., no new or pending (active) 57 * RPCs for this period, channels that are READY or CONNECTING switch to IDLE. Additionaly, 58 * channels that receive a GOAWAY when there are no active or pending RPCs should also switch to 59 * IDLE to avoid connection overload at servers that are attempting to shed connections. 60 */ 61 IDLE, 62 63 /** 64 * This channel has started shutting down. Any new RPCs should fail immediately. Pending RPCs 65 * may continue running till the application cancels them. Channels may enter this state either 66 * because the application explicitly requested a shutdown or if a non-recoverable error has 67 * happened during attempts to connect communicate . (As of 6/12/2015, there are no known errors 68 * (while connecting or communicating) that are classified as non-recoverable) Channels that 69 * enter this state never leave this state. 70 */ 71 SHUTDOWN 72 } 73