package org.compass.core.lucene.engine.indexdeletionpolicy;
import java.util.List;
import org.apache.lucene.index.IndexCommitPoint;
import org.apache.lucene.index.IndexDeletionPolicy;
import org.compass.core.CompassException;
import org.compass.core.config.CompassConfigurable;
import org.compass.core.config.CompassSettings;
import org.compass.core.lucene.LuceneEnvironment;
/**
* An index deletion policy that keepds the last "N" commits. Configured using
* {@link org.compass.core.lucene.LuceneEnvironment.IndexDeletionPolicy.KeepLastN} settings with
* the number of last commits to save. Defaults to <code>10</code>.
*
* @author kimchy
* @see org.compass.core.lucene.engine.indexdeletionpolicy.IndexDeletionPolicyFactory
*/
public class KeepLastNDeletionPolicy implements IndexDeletionPolicy, CompassConfigurable {
private int numToKeep;
public void configure(CompassSettings settings) throws CompassException {
numToKeep = settings.getSettingAsInt(LuceneEnvironment.IndexDeletionPolicy.KeepLastN.NUM_TO_KEEP, 10);
}
public void onInit(List commits) {
onCommit(commits);
}
public void onCommit(List commits) {
int size = commits.size();
for (int i = 0; i < size - numToKeep; i++) {
((IndexCommitPoint) commits.get(i)).delete();
}
}
public String toString() {
return super.toString() + " numToKeep [" + numToKeep + "]";
}
}