org.infinispan.configuration.cache.BackupConfigurationBuilder Maven / Gradle / Ivy
package org.infinispan.configuration.cache;
import static org.infinispan.configuration.cache.BackupConfiguration.ENABLED;
import static org.infinispan.configuration.cache.BackupConfiguration.FAILURE_POLICY;
import static org.infinispan.configuration.cache.BackupConfiguration.FAILURE_POLICY_CLASS;
import static org.infinispan.configuration.cache.BackupConfiguration.REPLICATION_TIMEOUT;
import static org.infinispan.configuration.cache.BackupConfiguration.SITE;
import static org.infinispan.configuration.cache.BackupConfiguration.STRATEGY;
import static org.infinispan.configuration.cache.BackupConfiguration.USE_TWO_PHASE_COMMIT;
import java.lang.invoke.MethodHandles;
import org.infinispan.commons.configuration.Builder;
import org.infinispan.commons.configuration.attributes.AttributeSet;
import org.infinispan.configuration.global.GlobalConfiguration;
import org.infinispan.util.logging.Log;
import org.infinispan.util.logging.LogFactory;
/**
* @author [email protected]
* @since 5.2
*/
public class BackupConfigurationBuilder extends AbstractConfigurationChildBuilder implements Builder {
private static final Log log = LogFactory.getLog(MethodHandles.lookup().lookupClass(), Log.class);
private final AttributeSet attributes;
private XSiteStateTransferConfigurationBuilder stateTransferBuilder;
private TakeOfflineConfigurationBuilder takeOfflineBuilder;
public BackupConfigurationBuilder(ConfigurationBuilder builder) {
super(builder);
attributes = BackupConfiguration.attributeDefinitionSet();
takeOfflineBuilder = new TakeOfflineConfigurationBuilder(builder, this);
stateTransferBuilder = new XSiteStateTransferConfigurationBuilder(builder, this);
}
/**
* @param site The name of the site where this cache backups. Must be a valid name, i.e. a site defined in the
* global config.
*/
public BackupConfigurationBuilder site(String site) {
attributes.attribute(SITE).set(site);
return this;
}
/**
* @see #site(String)
*/
public String site() {
return attributes.attribute(SITE).get();
}
/**
* If the failure policy is set to {@link BackupFailurePolicy#CUSTOM} then the failurePolicyClass is required and
* should return the fully qualified name of a class implementing {@link org.infinispan.xsite.CustomFailurePolicy}
*/
public String failurePolicyClass() {
return attributes.attribute(FAILURE_POLICY_CLASS).get();
}
/**
* @see #failurePolicyClass()
*/
public BackupConfigurationBuilder failurePolicyClass(String failurePolicy) {
attributes.attribute(FAILURE_POLICY_CLASS).set(failurePolicy);
return this;
}
/**
* Timeout(millis) used for replicating calls to other sites.
*/
public BackupConfigurationBuilder replicationTimeout(long replicationTimeout) {
attributes.attribute(REPLICATION_TIMEOUT).set(replicationTimeout);
return this;
}
/**
* Sets the strategy used for backing up data: sync or async. If not specified defaults
* to {@link org.infinispan.configuration.cache.BackupConfiguration.BackupStrategy#ASYNC}.
*/
public BackupConfigurationBuilder strategy(BackupConfiguration.BackupStrategy strategy) {
attributes.attribute(STRATEGY).set(strategy);
return this;
}
/**
* @see #strategy()
*/
public BackupConfiguration.BackupStrategy strategy() {
return attributes.attribute(STRATEGY).get();
}
public TakeOfflineConfigurationBuilder takeOffline() {
return takeOfflineBuilder;
}
/**
* Configures how the system behaves when the backup call fails. Only applies to sync backups.
* The default values is {@link org.infinispan.configuration.cache.BackupFailurePolicy#WARN}
*/
public BackupConfigurationBuilder backupFailurePolicy(BackupFailurePolicy backupFailurePolicy) {
attributes.attribute(FAILURE_POLICY).set(backupFailurePolicy);
return this;
}
/**
* Configures whether the replication happens in a 1PC or 2PC for sync backups.
* The default value is "false"
*/
public BackupConfigurationBuilder useTwoPhaseCommit(boolean useTwoPhaseCommit) {
attributes.attribute(USE_TWO_PHASE_COMMIT).set(useTwoPhaseCommit);
return this;
}
/**
* Configures whether this site is used for backing up data or not (defaults to true).
*/
public BackupConfigurationBuilder enabled(boolean isEnabled) {
attributes.attribute(ENABLED).set(isEnabled);
return this;
}
public XSiteStateTransferConfigurationBuilder stateTransfer() {
return this.stateTransferBuilder;
}
@Override
public void validate() {
takeOfflineBuilder.validate();
stateTransferBuilder.validate();
if (attributes.attribute(SITE).get() == null)
throw log.backupMissingSite();
if (attributes.attribute(FAILURE_POLICY).get() == BackupFailurePolicy.CUSTOM && (attributes.attribute(FAILURE_POLICY_CLASS).get() == null)) {
throw log.missingBackupFailurePolicyClass();
}
if (attributes.attribute(USE_TWO_PHASE_COMMIT).get() && attributes.attribute(STRATEGY).get() == BackupConfiguration.BackupStrategy.ASYNC) {
throw log.twoPhaseCommitAsyncBackup();
}
}
@Override
public void validate(GlobalConfiguration globalConfig) {
takeOfflineBuilder.validate(globalConfig);
stateTransferBuilder.validate(globalConfig);
}
@Override
public BackupConfiguration create() {
return new BackupConfiguration(attributes.protect(), takeOfflineBuilder.create(), stateTransferBuilder.create());
}
@Override
public BackupConfigurationBuilder read(BackupConfiguration template) {
attributes.read(template.attributes());
takeOfflineBuilder.read(template.takeOffline());
stateTransferBuilder.read(template.stateTransfer());
return this;
}
@Override
public String toString() {
return this.getClass().getSimpleName() + attributes;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy