An interface for replicating files. Allows a producer to {@link #publish(Revision) publish} {@link Revision}s and consumers to {@link #checkForUpdate(String) check for updates}. When a client needs to be updated, it is given a {@link SessionToken} through which it can{@link #obtainFile(String,String,String) obtain} the files of thatrevision. After the client has finished obtaining all the files, it should {@link #release(String) release} the given session, so that the files can bereclaimed if they are not needed anymore.
A client is always updated to the newest revision available. That is, if a client is on revision r1 and revisions r2 and r3 were published, then when the cllient will next check for update, it will receive r3.
@lucene.experimental