package org.infinispan.configuration.cache;
import static org.infinispan.configuration.cache.SingletonStoreConfiguration.ENABLED;
import static org.infinispan.configuration.cache.SingletonStoreConfiguration.PUSH_STATE_TIMEOUT;
import static org.infinispan.configuration.cache.SingletonStoreConfiguration.PUSH_STATE_WHEN_COORDINATOR;
import java.util.concurrent.TimeUnit;
import org.infinispan.commons.CacheConfigurationException;
import org.infinispan.commons.configuration.Builder;
import org.infinispan.commons.configuration.attributes.AttributeSet;
import org.infinispan.configuration.global.GlobalConfiguration;
/**
* @deprecated Singleton writers will be removed in 10.0. If it is desirable that all nodes don't write to the underlying store
* then a shared store should be used instead, as this only performs store writes at a key's primary owner.
*/
@Deprecated
public class SingletonStoreConfigurationBuilder<S> extends AbstractStoreConfigurationChildBuilder<S> implements Builder<SingletonStoreConfiguration> {
private final AttributeSet attributes;
SingletonStoreConfigurationBuilder(AbstractStoreConfigurationBuilder<? extends AbstractStoreConfiguration, ?> builder) {
super(builder);
attributes = SingletonStoreConfiguration.attributeDefinitionSet();
}
/**
* Enable the singleton store cache store
*/
public SingletonStoreConfigurationBuilder<S> enable() {
attributes.attribute(ENABLED).set(true);
return this;
}
/**
* If true, the singleton store cache store is enabled.
*/
public SingletonStoreConfigurationBuilder<S> enabled(boolean enabled) {
attributes.attribute(ENABLED).set(enabled);
return this;
}
/**
* Enable the singleton store cache store
*/
public SingletonStoreConfigurationBuilder<S> disable() {
attributes.attribute(ENABLED).set(false);
return this;
}
/**
* If pushStateWhenCoordinator is true, this property sets the maximum number of milliseconds
* that the process of pushing the in-memory state to the underlying cache loader should take.
*/
public SingletonStoreConfigurationBuilder<S> pushStateTimeout(long l) {
attributes.attribute(PUSH_STATE_TIMEOUT).set(l);
return this;
}
/**
* If pushStateWhenCoordinator is true, this property sets the maximum number of milliseconds
* that the process of pushing the in-memory state to the underlying cache loader should take.
*/
public SingletonStoreConfigurationBuilder<S> pushStateTimeout(long l, TimeUnit unit) {
return pushStateTimeout(unit.toMillis(l));
}
/**
* If true, when a node becomes the coordinator, it will transfer in-memory state to the
* underlying cache store. This can be very useful in situations where the coordinator crashes
* and there's a gap in time until the new coordinator is elected.
*/
public SingletonStoreConfigurationBuilder<S> pushStateWhenCoordinator(boolean b) {
attributes.attribute(PUSH_STATE_WHEN_COORDINATOR).set(b);
return this;
}
@Override
public void validate() {
}
@Override
public void validate(GlobalConfiguration globalConfig) {
if (globalConfig.transport().transport() == null) {
throw new CacheConfigurationException("Must have a transport set in the global configuration in " +
"order to configure a singleton store");
}
}
@Override
public SingletonStoreConfiguration create() {
return new SingletonStoreConfiguration(attributes.protect());
}
@Override
public SingletonStoreConfigurationBuilder<S> read(SingletonStoreConfiguration template) {
attributes.read(template.attributes());
return this;
}
@Override
public String toString() {
return "SingletonStoreConfigurationBuilder [attributes=" + attributes + "]";
}
}