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.backend.impl.lucene.WorkspaceHolder;
import org.hibernate.search.indexes.spi.IndexManager;
import org.infinispan.query.logging.Log;
import org.infinispan.util.logging.LogFactory;
/**
* The IndexingBackend which directly couples to the Hibernate Search WorkspaceHolder.
* Normally this will be the "lucene" backend, writing to the index.
*
* @see org.hibernate.search.backend.impl.lucene.WorkspaceHolder
* @author Sanne Grinovero <sanne@hibernate.org> (C) 2014 Red Hat Inc.
* @since 7.0
*/
final class LocalIndexingBackend implements IndexingBackend {
private static final Log log = LogFactory.getLog(LocalIndexingBackend.class, Log.class);
private final WorkspaceHolder workspaceHolder;
public LocalIndexingBackend(WorkspaceHolder workspaceHolder) {
this.workspaceHolder = workspaceHolder;
}
@Override
public void applyWork(List<LuceneWork> workList, IndexingMonitor monitor, IndexManager indexManager) {
log.applyingChangeListLocally(workList);
workspaceHolder.applyWork(workList, monitor);
}
@Override
public void applyStreamWork(LuceneWork singleOperation, IndexingMonitor monitor, IndexManager indexManager) {
workspaceHolder.applyStreamWork(singleOperation, monitor);
}
@Override
public boolean isMasterLocal() {
return true;
}
@Override
public void flushAndClose(IndexingBackend replacement) {
workspaceHolder.close();
log.debug("Downgraded from Master role: Index lock released.");
}
public String toString() {
return "LocalIndexingBackend";
}
}