package com.netflix.astyanax.contrib.dualwrites;
import java.util.Collections;
import com.google.common.util.concurrent.ListenableFuture;
import com.netflix.astyanax.connectionpool.OperationResult;
import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
import com.netflix.astyanax.cql.CqlPreparedStatement;
import com.netflix.astyanax.cql.CqlStatement;
import com.netflix.astyanax.cql.CqlStatementResult;
import com.netflix.astyanax.model.ConsistencyLevel;
public class DualWritesCqlStatement implements CqlStatement {
private final CqlStatement primary;
private final CqlStatement secondary;
private final DualWritesStrategy execStrategy;
private final DualKeyspaceMetadata ksMd;
public DualWritesCqlStatement(CqlStatement primaryCql, CqlStatement secondarycql, DualWritesStrategy strategy, DualKeyspaceMetadata keyspaceMd) {
primary = primaryCql;
secondary = secondarycql;
execStrategy = strategy;
ksMd = keyspaceMd;
}
@Override
public CqlStatement withConsistencyLevel(ConsistencyLevel cl) {
primary.withConsistencyLevel(cl);
secondary.withConsistencyLevel(cl);
return this;
}
@Override
public CqlStatement withCql(String cql) {
primary.withCql(cql);
secondary.withCql(cql);
return this;
}
@Override
public CqlPreparedStatement asPreparedStatement() {
CqlPreparedStatement pstmtPrimary = primary.asPreparedStatement();
CqlPreparedStatement pstmtSecondary = primary.asPreparedStatement();
return new DualWritesCqlPreparedStatement(pstmtPrimary, pstmtSecondary, execStrategy, ksMd);
}
@Override
public OperationResult<CqlStatementResult> execute() throws ConnectionException {
WriteMetadata writeMd = new WriteMetadata(ksMd, null, null);
return execStrategy.wrapExecutions(primary, secondary, Collections.singletonList(writeMd)).execute();
}
@Override
public ListenableFuture<OperationResult<CqlStatementResult>> executeAsync() throws ConnectionException {
WriteMetadata writeMd = new WriteMetadata(ksMd, null, null);
return execStrategy.wrapExecutions(primary, secondary, Collections.singletonList(writeMd)).executeAsync();
}
}