Package org.apache.lucene.replicator
Class ReplicationClient
java.lang.Object
org.apache.lucene.replicator.ReplicationClient
- All Implemented Interfaces:
Closeable
,AutoCloseable
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.
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic interface
Handler for revisions obtained by the client.static interface
Resolves a session and source into aDirectory
to use for copying the session files to. -
Field Summary
Modifier and TypeFieldDescriptionstatic final String
The component name to use withInfoStream.isEnabled(String)
. -
Constructor Summary
ConstructorDescriptionReplicationClient
(Replicator replicator, ReplicationClient.ReplicationHandler handler, ReplicationClient.SourceDirectoryFactory factory) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
protected final void
ThrowsAlreadyClosedException
if the client has already been closed.protected void
Called when an exception is hit by the replication thread.boolean
Returns true if the update thread is alive.protected Map<String,
List<RevisionFile>> requiredFiles
(Map<String, List<RevisionFile>> newRevisionFiles) Returns the files required for replication.void
setInfoStream
(InfoStream infoStream) Sets theInfoStream
to use for logging messages.void
startUpdateThread
(long intervalMillis, String threadName) Start the update thread with the specified interval in milliseconds.void
Stop the update thread.toString()
void
Executes the update operation immediately, irregardless if an update thread is running or not.
-
Field Details
-
INFO_STREAM_COMPONENT
The component name to use withInfoStream.isEnabled(String)
.- See Also:
-
-
Constructor Details
-
ReplicationClient
public ReplicationClient(Replicator replicator, ReplicationClient.ReplicationHandler handler, ReplicationClient.SourceDirectoryFactory factory) Constructor.- Parameters:
replicator
- theReplicator
used for checking for updateshandler
- notified when new revisions are readyfactory
- returns aDirectory
for a given source and session
-
-
Method Details
-
ensureOpen
protected final void ensureOpen()ThrowsAlreadyClosedException
if the client has already been closed. -
handleUpdateException
Called when an exception is hit by the replication thread. The default implementation prints the full stacktrace to theInfoStream
set insetInfoStream(InfoStream)
, or thedefault
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 bystartUpdateThread(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 interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
-
startUpdateThread
Start the update thread with the specified interval in milliseconds. For debugging purposes, you can optionally set the name to set onThread.setName(String)
. If you passnull
, 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 beenstarted
and notstopped
, as well as didn't hit an error which caused it to terminate (i.e.handleUpdateException(Throwable)
threw the exception further). -
toString
-
updateNow
Executes the update operation immediately, irregardless if an update thread is running or not.- Throws:
IOException
-
setInfoStream
Sets theInfoStream
to use for logging messages.
-