Class ReplicationClient

java.lang.Object
org.apache.lucene.replicator.ReplicationClient
All Implemented Interfaces:
Closeable, AutoCloseable

public class ReplicationClient extends Object implements Closeable
A client which monitors and obtains new revisions from a Replicator. It can be used to either periodically check for updates by invoking startUpdateThread(long, java.lang.String), or manually by calling updateNow().

Whenever a new revision is available, the requiredFiles(Map) are copied to the Directory specified by PerSessionDirectoryFactory and a handler is notified.

WARNING: This API is experimental and might change in incompatible ways in the next release.
  • Field Details

  • Constructor Details

  • Method Details

    • ensureOpen

      protected final void ensureOpen()
      Throws AlreadyClosedException if the client has already been closed.
    • handleUpdateException

      protected void handleUpdateException(Throwable t)
      Called when an exception is hit by the replication thread. The default implementation prints the full stacktrace to the InfoStream set in setInfoStream(InfoStream), or the default one. You can override to log the exception elswhere.

      NOTE: if you override this method to throw the exception further, the replication thread will be terminated. The only way to restart it is to call stopUpdateThread() followed by startUpdateThread(long, String).

    • requiredFiles

      protected Map<String,List<RevisionFile>> requiredFiles(Map<String,List<RevisionFile>> newRevisionFiles)
      Returns the files required for replication. By default, this method returns all files that exist in the new revision, but not in the handler.
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
    • startUpdateThread

      public void startUpdateThread(long intervalMillis, String threadName)
      Start the update thread with the specified interval in milliseconds. For debugging purposes, you can optionally set the name to set on Thread.setName(String). If you pass null, a default name will be set.
      Throws:
      IllegalStateException - if the thread has already been started
    • stopUpdateThread

      public void stopUpdateThread()
      Stop the update thread. If the update thread is not running, silently does nothing. This method returns after the update thread has stopped.
    • isUpdateThreadAlive

      public boolean isUpdateThreadAlive()
      Returns true if the update thread is alive. The update thread is alive if it has been started and not stopped, as well as didn't hit an error which caused it to terminate (i.e. handleUpdateException(Throwable) threw the exception further).
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • updateNow

      public void updateNow() throws IOException
      Executes the update operation immediately, irregardless if an update thread is running or not.
      Throws:
      IOException
    • setInfoStream

      public void setInfoStream(InfoStream infoStream)
      Sets the InfoStream to use for logging messages.