package systems.composable.dropwizard.cassandra.speculativeexecution;
import com.datastax.driver.core.policies.ConstantSpeculativeExecutionPolicy;
import com.datastax.driver.core.policies.SpeculativeExecutionPolicy;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import io.dropwizard.util.Duration;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
/**
* A factory for configuring and building {@link ConstantSpeculativeExecutionPolicy} instances.
* <p/>
* <b>Configuration Parameters:</b>
* <table>
* <tr>
* <td>Name</td>
* <td>Default</td>
* <td>Description</td>
* </tr>
* <tr>
* <td>delay</td>
* <td>No default. You must provide a value.</td>
* <td>The delay between each speculative execution. Must be strictly positive.</td>
* </tr>
* <tr>
* <td>maxSpeculativeExecutions</td>
* <td>No default. You must provide a value.</td>
* <td>The number of speculative executions. Must be strictly positive.</td>
* </tr>
* </table>
*/
@JsonTypeName("constant")
public class ConstantSpeculativeExecutionPolicyFactory implements SpeculativeExecutionPolicyFactory {
@NotNull
private Duration delay;
@NotNull
@Min(1)
private Integer maxSpeculativeExecutions;
@JsonProperty
public Duration getDelay() {
return delay;
}
@JsonProperty
public void setDelay(Duration delay) {
this.delay = delay;
}
@JsonProperty
public Integer getMaxSpeculativeExecutions() {
return maxSpeculativeExecutions;
}
@JsonProperty
public void setMaxSpeculativeExecutions(Integer maxSpeculativeExecutions) {
this.maxSpeculativeExecutions = maxSpeculativeExecutions;
}
@Override
public SpeculativeExecutionPolicy build() {
return new ConstantSpeculativeExecutionPolicy(delay.toMilliseconds(), maxSpeculativeExecutions);
}
}