package org.infinispan.counter.impl.strong;
import java.util.concurrent.CompletionException;
import org.infinispan.AdvancedCache;
import org.infinispan.commons.logging.LogFactory;
import org.infinispan.counter.api.CounterConfiguration;
import org.infinispan.counter.api.CounterState;
import org.infinispan.counter.impl.entries.CounterValue;
import org.infinispan.counter.logging.Log;
/**
* An unbounded strong consistent counter.
*
* @author Pedro Ruivo
* @see AbstractStrongCounter
* @since 9.0
*/
public class UnboundedStrongCounter extends AbstractStrongCounter {
private static final Log log = LogFactory.getLog(AbstractStrongCounter.class, Log.class);
public UnboundedStrongCounter(String counterName, AdvancedCache<StrongCounterKey, CounterValue> cache,
CounterConfiguration configuration) {
super(counterName, cache, configuration);
}
@Override
protected Boolean handleCASResult(CounterState state) {
return state == CounterState.VALID;
}
@Override
protected long handleAddResult(CounterValue counterValue) {
if (counterValue == null) {
throw new CompletionException(log.counterDeleted());
}
return counterValue.getValue();
}
@Override
protected Log getLog() {
return log;
}
@Override
public String toString() {
return "UnboundedStrongCounter{" +
"counterName=" + key.getCounterName() +
'}';
}
}