Search in sources :

Example 6 with Column

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;
}
Also used : Column(com.netflix.astyanax.model.Column) UUID(java.util.UUID)

Example 7 with Column

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);
    }
}
Also used : DataObject(com.emc.storageos.db.client.model.DataObject) Column(com.netflix.astyanax.model.Column)

Example 8 with Column

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++;
}
Also used : Column(com.netflix.astyanax.model.Column) DataObject(com.emc.storageos.db.client.model.DataObject)

Example 9 with Column

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);
    }
}
Also used : DatabaseException(com.emc.storageos.db.exceptions.DatabaseException) ConnectionException(com.netflix.astyanax.connectionpool.exceptions.ConnectionException) DataObject(com.emc.storageos.db.client.model.DataObject) Column(com.netflix.astyanax.model.Column) Keyspace(com.netflix.astyanax.Keyspace) Row(com.netflix.astyanax.model.Row) ConnectionException(com.netflix.astyanax.connectionpool.exceptions.ConnectionException) Rows(com.netflix.astyanax.model.Rows)

Example 10 with Column

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);
    }
}
Also used : URI(java.net.URI) DataObject(com.emc.storageos.db.client.model.DataObject) Column(com.netflix.astyanax.model.Column) Keyspace(com.netflix.astyanax.Keyspace) Row(com.netflix.astyanax.model.Row)

Aggregations

Column (com.netflix.astyanax.model.Column)15 DataObject (com.emc.storageos.db.client.model.DataObject)8 Keyspace (com.netflix.astyanax.Keyspace)6 Row (com.netflix.astyanax.model.Row)5 URI (java.net.URI)4 ConnectionException (com.netflix.astyanax.connectionpool.exceptions.ConnectionException)3 Rows (com.netflix.astyanax.model.Rows)3 URIQueryResultList (com.emc.storageos.db.client.constraint.URIQueryResultList)2 DatabaseException (com.emc.storageos.db.exceptions.DatabaseException)2 ArrayList (java.util.ArrayList)2 HashMap (java.util.HashMap)2 List (java.util.List)2 DecommissionedConstraint (com.emc.storageos.db.client.constraint.DecommissionedConstraint)1 NamedURI (com.emc.storageos.db.client.model.NamedURI)1 PropertyListDataObject (com.emc.storageos.db.client.model.PropertyListDataObject)1 NotFoundException (com.netflix.astyanax.connectionpool.exceptions.NotFoundException)1 ColumnList (com.netflix.astyanax.model.ColumnList)1 RowQuery (com.netflix.astyanax.query.RowQuery)1 RowSliceQuery (com.netflix.astyanax.query.RowSliceQuery)1 ByteBuffer (java.nio.ByteBuffer)1