use of com.netflix.astyanax.model.Column in project coprhd-controller by CoprHD.
the class TimeSeriesDbIndex method removeColumn.
@Override
boolean removeColumn(String recordKey, Column<CompositeColumnName> column, String className, RowMutator mutator, Map<String, List<Column<CompositeColumnName>>> fieldColumnMap) {
UUID uuid = column.getName().getTimeUUID();
if (!className.equals(Order.class.getSimpleName())) {
throw new RuntimeException("Can not remove TimeSeriesIndex on non Order object");
}
List<Column<CompositeColumnName>> value = fieldColumnMap.get("tenant");
Column<CompositeColumnName> tenantCol = value.get(0);
String tid = tenantCol.getStringValue();
ColumnListMutation<TimeSeriesIndexColumnName> indexColList = mutator.getIndexColumnList(indexCF, tid);
TimeSeriesIndexColumnName col = new TimeSeriesIndexColumnName(className, recordKey, uuid);
indexColList.deleteColumn(col);
return true;
}
use of com.netflix.astyanax.model.Column in project coprhd-controller by CoprHD.
the class DataObjectType method deserialize.
public <T extends DataObject> T deserialize(Class<T> clazz, Row<String, CompositeColumnName> row, IndexCleanupList cleanupList, LazyLoader lazyLoader) {
if (!_clazz.isAssignableFrom(clazz)) {
throw new IllegalArgumentException();
}
try {
String key = row.getKey();
Class<? extends DataObject> type = (_instrumentedClazz == null) ? clazz : _instrumentedClazz;
DataObject obj = DataObject.createInstance(type, URI.create(row.getKey()));
Iterator<Column<CompositeColumnName>> it = row.getColumns().iterator();
while (it.hasNext()) {
Column<CompositeColumnName> column = it.next();
cleanupList.add(key, column);
ColumnField columnField = _columnFieldMap.get(column.getName().getOne());
if (columnField != null) {
columnField.deserialize(column, obj);
} else {
_log.debug("an unexpected column in db, it might because geo system has multiple vdc but in different version");
}
}
cleanupList.addObject(key, obj);
obj.trackChanges();
setLazyLoaders(obj, lazyLoader);
return clazz.cast(obj);
} catch (final InstantiationException e) {
throw DatabaseException.fatals.deserializationFailed(clazz, e);
} catch (final IllegalAccessException e) {
throw DatabaseException.fatals.deserializationFailed(clazz, e);
}
}
use of com.netflix.astyanax.model.Column in project coprhd-controller by CoprHD.
the class SumPrimitiveFieldAggregator method aggregate.
@Override
public void aggregate(Row<String, CompositeColumnName> row) {
if (row.getColumns().size() == 0) {
return;
}
Iterator<Column<CompositeColumnName>> columnIter = row.getColumns().iterator();
String prevColumnName = "";
Object prevValue = null;
DoubleValue prevDValue = null;
while (columnIter.hasNext()) {
Column<CompositeColumnName> column = columnIter.next();
String curName = column.getName().getOne();
if (!_valueMap.containsKey(curName)) {
if (prevValue != null) {
prevDValue = _valueMap.get(prevColumnName);
prevDValue.value += getDouble(prevValue);
}
prevValue = null;
prevDValue = null;
prevColumnName = curName;
} else {
if (!prevColumnName.equals(curName) && prevValue != null) {
prevDValue.value += getDouble(prevValue);
}
ColumnField field = _doType.getColumnField(curName);
Object curValue = ColumnValue.getPrimitiveColumnValue(column, field.getPropertyDescriptor());
prevValue = curValue;
prevDValue = _valueMap.get(curName);
prevColumnName = curName;
}
}
if (prevValue != null) {
prevDValue.value += getDouble(prevValue);
}
n_records++;
}
use of com.netflix.astyanax.model.Column in project coprhd-controller by CoprHD.
the class InternalDbClient method resetFields.
public void resetFields(Class<? extends DataObject> clazz, Map<String, ColumnField> setFields, boolean ignore) throws Exception {
DataObjectType doType = TypeMap.getDoType(clazz);
if (doType == null) {
throw new IllegalArgumentException();
}
try {
Keyspace ks = getKeyspace(clazz);
OperationResult<Rows<String, CompositeColumnName>> result = ks.prepareQuery(doType.getCF()).getAllRows().setRowLimit(DEFAULT_PAGE_SIZE).execute();
Iterator<Row<String, CompositeColumnName>> it = result.getResult().iterator();
RemovedColumnsList removedList = new RemovedColumnsList();
List<DataObject> objects = new ArrayList<>(DEFAULT_PAGE_SIZE);
String key = null;
Exception lastEx = null;
while (it.hasNext()) {
try {
Row<String, CompositeColumnName> row = it.next();
if (row.getColumns().size() == 0) {
continue;
}
key = row.getKey();
DataObject obj = DataObject.createInstance(clazz, URI.create(key));
obj.trackChanges();
objects.add(obj);
Iterator<Column<CompositeColumnName>> columnIterator = row.getColumns().iterator();
while (columnIterator.hasNext()) {
Column<CompositeColumnName> column = columnIterator.next();
ColumnField columnField = setFields.get(column.getName().getOne());
if (columnField != null) {
columnField.deserialize(column, obj);
removedList.add(key, column);
}
}
if (objects.size() == DEFAULT_PAGE_SIZE) {
boolean retryFailedWriteWithLocalQuorum = shouldRetryFailedWriteWithLocalQuorum(clazz);
RowMutator mutator = new RowMutator(ks, retryFailedWriteWithLocalQuorum);
_indexCleaner.removeColumnAndIndex(mutator, doType, removedList);
persistObject(objects);
objects.clear();
removedList.clear();
}
} catch (Exception e) {
String message = String.format("DB migration failed reason: reset data key='%s'", key);
log.error(message);
log.error("e=", e);
if (ignore) {
lastEx = e;
continue;
}
throw e;
}
}
if (lastEx != null) {
throw lastEx;
}
if (!objects.isEmpty()) {
boolean retryFailedWriteWithLocalQuorum = shouldRetryFailedWriteWithLocalQuorum(clazz);
RowMutator mutator = new RowMutator(ks, retryFailedWriteWithLocalQuorum);
_indexCleaner.removeColumnAndIndex(mutator, doType, removedList);
persistObject(objects);
}
} catch (ConnectionException e) {
throw DatabaseException.retryables.connectionFailed(e);
} catch (final InstantiationException e) {
throw DatabaseException.fatals.queryFailed(e);
} catch (final IllegalAccessException e) {
throw DatabaseException.fatals.queryFailed(e);
}
}
use of com.netflix.astyanax.model.Column in project coprhd-controller by CoprHD.
the class InternalDbClient method generateFieldIndex.
// TODO geo : migration only works for local keyspace; need to expand to use local or global
public <T extends DataObject> void generateFieldIndex(Class<T> clazz, String fieldName) {
DataObjectType doType = TypeMap.getDoType(clazz);
if (doType == null) {
throw new IllegalArgumentException();
}
ColumnField columnField = doType.getColumnField(fieldName);
if (columnField == null) {
throw new IllegalArgumentException();
}
List<URI> allrecs = queryByType(clazz, false);
Keyspace ks = getKeyspace(clazz);
Iterator<URI> recIt = allrecs.iterator();
List<URI> batch = getNextBatch(recIt);
while (!batch.isEmpty()) {
Rows<String, CompositeColumnName> rows = queryRowsWithAColumn(ks, batch, doType.getCF(), columnField);
List<T> objects = new ArrayList<T>(rows.size());
Iterator<Row<String, CompositeColumnName>> it = rows.iterator();
while (it.hasNext()) {
Row<String, CompositeColumnName> row = it.next();
try {
if (row.getColumns().size() == 0) {
continue;
}
DataObject obj = DataObject.createInstance(clazz, URI.create(row.getKey()));
obj.trackChanges();
Iterator<Column<CompositeColumnName>> columnIterator = row.getColumns().iterator();
while (columnIterator.hasNext()) {
Column<CompositeColumnName> column = columnIterator.next();
columnField.deserialize(column, obj);
}
// set changed for ChangeTracking structures
columnField.setChanged(obj);
objects.add(clazz.cast(obj));
} catch (final InstantiationException e) {
throw DatabaseException.fatals.queryFailed(e);
} catch (final IllegalAccessException e) {
throw DatabaseException.fatals.queryFailed(e);
}
}
updateAndReindexObject(objects);
batch = getNextBatch(recIt);
}
}
Aggregations