Home | History | Annotate | Download | only in grpc
      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