package org.infinispan.query.impl.massindex;
import org.hibernate.search.engine.spi.EntityIndexBinding;
import org.hibernate.search.indexes.spi.DirectoryBasedIndexManager;
import org.hibernate.search.indexes.spi.IndexManager;
import org.infinispan.configuration.cache.Configuration;
import org.infinispan.query.affinity.AffinityIndexManager;
import org.infinispan.query.indexmanager.InfinispanIndexManager;
/**
* @author gustavonalle
* @since 8.2
*/
final class MassIndexStrategyFactory {
private MassIndexStrategyFactory() {
}
static MassIndexStrategy calculateStrategy(EntityIndexBinding indexBinding, Configuration cacheConfiguration) {
IndexManager[] indexManagers = indexBinding.getIndexManagers();
IndexManager indexManager = indexBinding.getIndexManagers()[0];
boolean sharded = indexManagers.length > 1;
boolean replicated = cacheConfiguration.clustering().cacheMode().isReplicated();
boolean singleMaster = !sharded && indexManager instanceof InfinispanIndexManager;
boolean multiMaster = indexManager instanceof AffinityIndexManager;
boolean custom = !(indexManager instanceof DirectoryBasedIndexManager);
if (singleMaster || custom) {
return MassIndexStrategy.SHARED_INDEX_STRATEGY;
}
if (multiMaster) {
return MassIndexStrategy.PER_NODE_PRIMARY;
}
if (sharded || replicated) {
return MassIndexStrategy.PER_NODE_ALL_DATA;
}
return MassIndexStrategy.PER_NODE_PRIMARY;
}
}