use of com.netflix.astyanax.thrift.AbstractOperationImpl in project coprhd-controller by CoprHD.
the class SchemaUtil method dropColumnFamily.
/**
* Drop CF
*
* @param cfName column family name
* @param context
* @return
*/
@SuppressWarnings("unchecked")
public String dropColumnFamily(final String cfName, AstyanaxContext<Cluster> context) {
final KeyspaceTracerFactory ks = EmptyKeyspaceTracerFactory.getInstance();
ConnectionPool<Cassandra.Client> pool = (ConnectionPool<Cassandra.Client>) context.getConnectionPool();
_log.info("Dropping CF: {}", cfName);
try {
return pool.executeWithFailover(new AbstractOperationImpl<String>(ks.newTracer(CassandraOperationType.UPDATE_COLUMN_FAMILY)) {
@Override
public String internalExecute(Cassandra.Client client, ConnectionContext context) throws Exception {
client.set_keyspace(_keyspaceName);
return client.system_drop_column_family(cfName);
}
}, context.getAstyanaxConfiguration().getRetryPolicy().duplicate()).getResult();
} catch (final OperationException e) {
throw DatabaseException.retryables.operationFailed(e);
} catch (final ConnectionException e) {
throw DatabaseException.retryables.connectionFailed(e);
}
}
use of com.netflix.astyanax.thrift.AbstractOperationImpl in project coprhd-controller by CoprHD.
the class DbClientContext method alterKeyspaceWithThrift.
/**
* Update the keyspace definition using low-level thrift API
* This is to bypass the precheck logic in Astyanax that throws SchemaDisagreementException when there are
* unreachable nodes in the cluster. Refer to https://github.com/Netflix/astyanax/issues/443 for details.
*
* @param kd existing keyspace definition, could be null
* @param update new keyspace definition
* @return new schema version after the update
*/
private String alterKeyspaceWithThrift(KeyspaceDefinition kd, KeyspaceDefinition update) throws ConnectionException {
final KeyspaceTracerFactory ks = EmptyKeyspaceTracerFactory.getInstance();
ConnectionPool<Cassandra.Client> pool = (ConnectionPool<Cassandra.Client>) clusterContext.getConnectionPool();
final KsDef def = ((ThriftKeyspaceDefinitionImpl) update).getThriftKeyspaceDefinition();
if (kd != null) {
return pool.executeWithFailover(new AbstractOperationImpl<String>(ks.newTracer(CassandraOperationType.UPDATE_KEYSPACE)) {
@Override
public String internalExecute(Cassandra.Client client, ConnectionContext context) throws Exception {
return client.system_update_keyspace(def);
}
}, clusterContext.getAstyanaxConfiguration().getRetryPolicy().duplicate()).getResult();
} else {
return pool.executeWithFailover(new AbstractOperationImpl<String>(ks.newTracer(CassandraOperationType.ADD_KEYSPACE)) {
@Override
public String internalExecute(Cassandra.Client client, ConnectionContext context) throws Exception {
return client.system_add_keyspace(def);
}
}, clusterContext.getAstyanaxConfiguration().getRetryPolicy().duplicate()).getResult();
}
}
use of com.netflix.astyanax.thrift.AbstractOperationImpl in project coprhd-controller by CoprHD.
the class SchemaUtil method updateColumnFamily.
/**
* Updates CF
*
* @param def
* @return
*/
@SuppressWarnings("unchecked")
public String updateColumnFamily(final ThriftColumnFamilyDefinitionImpl def) {
AstyanaxContext<Cluster> context = clientContext.getClusterContext();
final KeyspaceTracerFactory ks = EmptyKeyspaceTracerFactory.getInstance();
ConnectionPool<Cassandra.Client> pool = (ConnectionPool<Cassandra.Client>) context.getConnectionPool();
_log.info("Updating CF: {}", def.getName());
try {
return pool.executeWithFailover(new AbstractOperationImpl<String>(ks.newTracer(CassandraOperationType.UPDATE_COLUMN_FAMILY)) {
@Override
public String internalExecute(Cassandra.Client client, ConnectionContext context) throws Exception {
client.set_keyspace(_keyspaceName);
return client.system_update_column_family(def.getThriftColumnFamilyDefinition());
}
}, context.getAstyanaxConfiguration().getRetryPolicy().duplicate()).getResult();
} catch (final OperationException e) {
throw DatabaseException.retryables.operationFailed(e);
} catch (final ConnectionException e) {
throw DatabaseException.retryables.connectionFailed(e);
}
}
use of com.netflix.astyanax.thrift.AbstractOperationImpl in project coprhd-controller by CoprHD.
the class SchemaUtil method addColumnFamily.
/**
* Adds CF to keyspace
*
* @param def
* @return
*/
@SuppressWarnings("unchecked")
public String addColumnFamily(final ThriftColumnFamilyDefinitionImpl def) {
AstyanaxContext<Cluster> context = clientContext.getClusterContext();
final KeyspaceTracerFactory ks = EmptyKeyspaceTracerFactory.getInstance();
ConnectionPool<Cassandra.Client> pool = (ConnectionPool<Cassandra.Client>) context.getConnectionPool();
final String cfname = def.getName();
_log.info("Adding CF: {}", cfname);
try {
return pool.executeWithFailover(new AbstractOperationImpl<String>(ks.newTracer(CassandraOperationType.ADD_COLUMN_FAMILY)) {
@Override
public String internalExecute(Cassandra.Client client, ConnectionContext context) throws Exception {
client.set_keyspace(_keyspaceName);
// This method can be retried several times, so server may already have received the 'creating CF' request
// and created the CF, we check the existence of the CF first before issuing another 'creating CF' request
// which will cause the 'CF already exists' exception
KsDef kd = client.describe_keyspace(_keyspaceName);
List<CfDef> cfs = kd.getCf_defs();
for (CfDef cf : cfs) {
if (cf.getName().equals(cfname)) {
_log.info("The CF {} has already been created", cfname);
return null;
}
}
_log.info("To create CF {}", cfname);
return client.system_add_column_family(def.getThriftColumnFamilyDefinition());
}
}, context.getAstyanaxConfiguration().getRetryPolicy().duplicate()).getResult();
} catch (final OperationException e) {
throw DatabaseException.retryables.operationFailed(e);
} catch (final ConnectionException e) {
throw DatabaseException.retryables.connectionFailed(e);
}
}
Aggregations