package org.infinispan.query.impl.massindex; /** * Execution plan of a MassIndexer * * @author gustavonalle * @since 8.2 */ interface MassIndexStrategy { enum CleanExecutionMode {ONCE_BEFORE, PER_NODE} enum FlushExecutionMode {PER_NODE, ONCE_AFTER} enum IndexingExecutionMode {PRIMARY_OWNER, ALL} FlushExecutionMode getFlushStrategy(); CleanExecutionMode getCleanStrategy(); IndexingExecutionMode getIndexingStrategy(); /** * The shared strategy will purge the index from the calling node, * index only primary owners on each node in parallel, and will execute a * single flush in the end. */ MassIndexStrategy SHARED_INDEX_STRATEGY = new MassIndexStrategy() { @Override public FlushExecutionMode getFlushStrategy() { return FlushExecutionMode.ONCE_AFTER; } @Override public CleanExecutionMode getCleanStrategy() { return CleanExecutionMode.ONCE_BEFORE; } @Override public IndexingExecutionMode getIndexingStrategy() { return IndexingExecutionMode.PRIMARY_OWNER; } }; /** * The per node all data strategy will execute all the work on a per node basis, * including purging, indexing (not only primary owners) and flushing. */ MassIndexStrategy PER_NODE_ALL_DATA = new MassIndexStrategy() { @Override public FlushExecutionMode getFlushStrategy() { return FlushExecutionMode.PER_NODE; } @Override public CleanExecutionMode getCleanStrategy() { return CleanExecutionMode.PER_NODE; } @Override public IndexingExecutionMode getIndexingStrategy() { return IndexingExecutionMode.ALL; } }; /** * The per node primary strategy will execute all the work on a per node basis, * considering only primary owners when indexing. */ MassIndexStrategy PER_NODE_PRIMARY = new MassIndexStrategy() { @Override public FlushExecutionMode getFlushStrategy() { return FlushExecutionMode.PER_NODE; } @Override public CleanExecutionMode getCleanStrategy() { return CleanExecutionMode.PER_NODE; } @Override public IndexingExecutionMode getIndexingStrategy() { return IndexingExecutionMode.PRIMARY_OWNER; } }; }