Class Watchdog

java.lang.Object
com.google.api.gax.rpc.Watchdog
All Implemented Interfaces:
BackgroundResource, AutoCloseable, Runnable

public final class Watchdog extends Object implements Runnable, BackgroundResource
Prevents the streams from hanging indefinitely. This middleware garbage collects idle streams in case the user forgot to close a ServerStream or if a connection is reset and GRPC does not get notified.

For every checkInterval, this class checks two thresholds:

  • waitingTimeout: the amount of time to wait for a response (after the caller signaled demand) before forcefully closing the stream. Duration.ZERO disables the timeout.
  • idleTimeout: the amount of time to wait before assuming that the caller forgot to close the stream and forcefully closing the stream. This is measured from the last time the caller had no outstanding demand. Duration.ZERO disables the timeout.
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    awaitTermination(long duration, TimeUnit unit)
    Blocks until all work has completed execution after a shutdown request, or the timeout occurs, or the current thread is interrupted, whichever happens first.
    void
     
    static Watchdog
    create(ApiClock clock, org.threeten.bp.Duration scheduleInterval, ScheduledExecutorService executor)
    returns a Watchdog which is scheduled at the provided interval.
    boolean
    Returns true if this background resource has been shut down.
    boolean
    Returns true if all work has completed following shut down.
    void
    run()
     
    void
    Initiates an orderly shutdown in which previously submitted work is finished, but no new work will be accepted.
    void
    Attempts to stop all actively executing work and halts the processing of waiting work.
    <ResponseT>
    ResponseObserver<ResponseT>
    watch(ResponseObserver<ResponseT> innerObserver, org.threeten.bp.Duration waitTimeout, org.threeten.bp.Duration idleTimeout)
    Wraps the target observer with timing constraints.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Method Details

    • create

      public static Watchdog create(ApiClock clock, org.threeten.bp.Duration scheduleInterval, ScheduledExecutorService executor)
      returns a Watchdog which is scheduled at the provided interval.
    • watch

      public <ResponseT> ResponseObserver<ResponseT> watch(ResponseObserver<ResponseT> innerObserver, @Nonnull org.threeten.bp.Duration waitTimeout, @Nonnull org.threeten.bp.Duration idleTimeout)
      Wraps the target observer with timing constraints.
    • run

      public void run()
      Specified by:
      run in interface Runnable
    • shutdown

      public void shutdown()
      Description copied from interface: BackgroundResource
      Initiates an orderly shutdown in which previously submitted work is finished, but no new work will be accepted. Invocation has no additional effect if already shut down.

      This method does not wait for previously submitted work to complete execution. Use awaitTermination to do that.

      Specified by:
      shutdown in interface BackgroundResource
    • isShutdown

      public boolean isShutdown()
      Description copied from interface: BackgroundResource
      Returns true if this background resource has been shut down.
      Specified by:
      isShutdown in interface BackgroundResource
    • isTerminated

      public boolean isTerminated()
      Description copied from interface: BackgroundResource
      Returns true if all work has completed following shut down. Note that isTerminated is never true unless either shutdown or shutdownNow was called first.
      Specified by:
      isTerminated in interface BackgroundResource
    • shutdownNow

      public void shutdownNow()
      Description copied from interface: BackgroundResource
      Attempts to stop all actively executing work and halts the processing of waiting work.

      This method does not wait for actively executing work to terminate. Use awaitTermination to do that.

      There are no guarantees beyond best-effort attempts to stop processing actively executing work. For example, typical implementations will cancel via Thread.interrupt(), so any task that fails to respond to interrupts may never terminate.

      Specified by:
      shutdownNow in interface BackgroundResource
    • awaitTermination

      public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException
      Description copied from interface: BackgroundResource
      Blocks until all work has completed execution after a shutdown request, or the timeout occurs, or the current thread is interrupted, whichever happens first.
      Specified by:
      awaitTermination in interface BackgroundResource
      Throws:
      InterruptedException
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable