• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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