Package org.apache.lucene.replicator
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 aReplicator
. It can be used to either periodically check for updates by invokingstartUpdateThread(long, java.lang.String)
, or manually by callingupdateNow()
.Whenever a new revision is available, the
requiredFiles(Map)
are copied to theDirectory
specified byPerSessionDirectoryFactory
and a handler is notified.- WARNING: This API is experimental and might change in incompatible ways in the next release.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
ReplicationClient.ReplicationHandler
Handler for revisions obtained by the client.static interface
ReplicationClient.SourceDirectoryFactory
Resolves a session and source into aDirectory
to use for copying the session files to.
-
Field Summary
Fields Modifier and Type Field Description static String
INFO_STREAM_COMPONENT
The component name to use withInfoStream.isEnabled(String)
.
-
Constructor Summary
Constructors Constructor Description ReplicationClient(Replicator replicator, ReplicationClient.ReplicationHandler handler, ReplicationClient.SourceDirectoryFactory factory)
Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close()
protected void
ensureOpen()
ThrowsAlreadyClosedException
if the client has already been closed.protected void
handleUpdateException(Throwable t)
Called when an exception is hit by the replication thread.boolean
isUpdateThreadAlive()
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
stopUpdateThread()
Stop the update thread.String
toString()
void
updateNow()
Executes the update operation immediately, irregardless if an update thread is running or not.
-
-
-
Field Detail
-
INFO_STREAM_COMPONENT
public static final String INFO_STREAM_COMPONENT
The component name to use withInfoStream.isEnabled(String)
.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
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 Detail
-
ensureOpen
protected final void ensureOpen()
ThrowsAlreadyClosedException
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 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
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 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).
-
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 theInfoStream
to use for logging messages.
-
-