Class KeepAliveEnforcer

java.lang.Object
io.grpc.internal.KeepAliveEnforcer

public final class KeepAliveEnforcer extends Object
Monitors the client's PING usage to make sure the rate is permitted.
  • Field Details

    • MAX_PING_STRIKES

      public static final int MAX_PING_STRIKES
      See Also:
    • IMPLICIT_PERMIT_TIME_NANOS

      public static final long IMPLICIT_PERMIT_TIME_NANOS
    • permitWithoutCalls

      private final boolean permitWithoutCalls
    • minTimeNanos

      private final long minTimeNanos
    • ticker

      private final KeepAliveEnforcer.Ticker ticker
    • epoch

      private final long epoch
    • lastValidPingTime

      private long lastValidPingTime
    • hasOutstandingCalls

      private boolean hasOutstandingCalls
    • pingStrikes

      private int pingStrikes
  • Constructor Details

    • KeepAliveEnforcer

      public KeepAliveEnforcer(boolean permitWithoutCalls, long minTime, TimeUnit unit)
    • KeepAliveEnforcer

      KeepAliveEnforcer(boolean permitWithoutCalls, long minTime, TimeUnit unit, KeepAliveEnforcer.Ticker ticker)
  • Method Details

    • pingAcceptable

      @CheckReturnValue public boolean pingAcceptable()
      Returns false when client is misbehaving and should be disconnected.
    • resetCounters

      public void resetCounters()
      Reset any counters because PINGs are allowed in response to something sent. Typically called when sending HEADERS and DATA frames.
    • onTransportActive

      public void onTransportActive()
      There are outstanding RPCs on the transport.
    • onTransportIdle

      public void onTransportIdle()
      There are no outstanding RPCs on the transport.
    • compareNanos

      private static long compareNanos(long time1, long time2)
      Positive when time1 is greater; negative when time2 is greater; 0 when equal. It is important to use something like this instead of directly comparing nano times. See System.nanoTime().