package org.infinispan.query.indexmanager;
import java.util.List;
import org.hibernate.search.backend.IndexingMonitor;
import org.hibernate.search.backend.LuceneWork;
import org.hibernate.search.indexes.spi.IndexManager;
/**
* The main IndexingBackend implementations are the one forwarding to another node, and the one applying to the local node.
* We when defined a set of additional implementations to handle intermediate transitionaly behaviour, each such implementation
* respects this contract.
*
* @see ClusteredSwitchingBackend
* @author Sanne Grinovero <sanne@hibernate.org> (C) 2014 Red Hat Inc.
* @since 7.0
*/
interface IndexingBackend {
/**
* Signals that the current implementation is being discarded, and if any pending update
* operations are being buffered these should be delegated for further processing to the
* replacement IndexingBackend.
* @param replacement the new IndexingBackend taking the place of this.
*/
void flushAndClose(IndexingBackend replacement);
/**
* Receives transactional index update operations from the Search engine.
*/
void applyWork(List<LuceneWork> workList, IndexingMonitor monitor, IndexManager indexManager);
/**
* Receives stream-style index update operations from the Search engine.
*/
void applyStreamWork(LuceneWork singleOperation, IndexingMonitor monitor, IndexManager indexManager);
/**
* Mostly useful for testing and diagnostics.
* @return {@code true} if this node is actively able to write to the index, without delegating or postponing the write operations.
*/
boolean isMasterLocal();
}