Search in sources :

Example 1 with TbResultSetFuture

use of org.thingsboard.server.dao.nosql.TbResultSetFuture in project thingsboard by thingsboard.

the class CassandraBaseTimeseriesDao method removePartition.

@Override
public ListenableFuture<Void> removePartition(TenantId tenantId, EntityId entityId, DeleteTsKvQuery query) {
    long minPartition = toPartitionTs(query.getStartTs());
    long maxPartition = toPartitionTs(query.getEndTs());
    if (minPartition == maxPartition) {
        return Futures.immediateFuture(null);
    } else {
        TbResultSetFuture partitionsFuture = fetchPartitions(tenantId, entityId, query.getKey(), minPartition, maxPartition);
        final SimpleListenableFuture<Void> resultFuture = new SimpleListenableFuture<>();
        final ListenableFuture<List<Long>> partitionsListFuture = Futures.transformAsync(partitionsFuture, getPartitionsArrayFunction(), readResultsProcessingExecutor);
        Futures.addCallback(partitionsListFuture, new FutureCallback<List<Long>>() {

            @Override
            public void onSuccess(@Nullable List<Long> partitions) {
                int index = 0;
                if (minPartition != query.getStartTs()) {
                    index = 1;
                }
                List<Long> partitionsToDelete = new ArrayList<>();
                for (int i = index; i < partitions.size() - 1; i++) {
                    partitionsToDelete.add(partitions.get(i));
                }
                QueryCursor cursor = new QueryCursor(entityId.getEntityType().name(), entityId.getId(), query, partitionsToDelete);
                deletePartitionAsync(tenantId, cursor, resultFuture);
            }

            @Override
            public void onFailure(Throwable t) {
                log.error("[{}][{}] Failed to fetch partitions for interval {}-{}", entityId.getEntityType().name(), entityId.getId(), minPartition, maxPartition, t);
            }
        }, readResultsProcessingExecutor);
        return resultFuture;
    }
}
Also used : TbResultSetFuture(org.thingsboard.server.dao.nosql.TbResultSetFuture) List(java.util.List) ArrayList(java.util.ArrayList)

Example 2 with TbResultSetFuture

use of org.thingsboard.server.dao.nosql.TbResultSetFuture in project thingsboard by thingsboard.

the class CassandraBaseTimeseriesDao method remove.

@Override
public ListenableFuture<Void> remove(TenantId tenantId, EntityId entityId, DeleteTsKvQuery query) {
    long minPartition = toPartitionTs(query.getStartTs());
    long maxPartition = toPartitionTs(query.getEndTs());
    TbResultSetFuture partitionsFuture = fetchPartitions(tenantId, entityId, query.getKey(), minPartition, maxPartition);
    final SimpleListenableFuture<Void> resultFuture = new SimpleListenableFuture<>();
    final ListenableFuture<List<Long>> partitionsListFuture = Futures.transformAsync(partitionsFuture, getPartitionsArrayFunction(), readResultsProcessingExecutor);
    Futures.addCallback(partitionsListFuture, new FutureCallback<List<Long>>() {

        @Override
        public void onSuccess(@Nullable List<Long> partitions) {
            QueryCursor cursor = new QueryCursor(entityId.getEntityType().name(), entityId.getId(), query, partitions);
            deleteAsync(tenantId, cursor, resultFuture);
        }

        @Override
        public void onFailure(Throwable t) {
            log.error("[{}][{}] Failed to fetch partitions for interval {}-{}", entityId.getEntityType().name(), entityId.getId(), minPartition, maxPartition, t);
        }
    }, readResultsProcessingExecutor);
    return resultFuture;
}
Also used : TbResultSetFuture(org.thingsboard.server.dao.nosql.TbResultSetFuture) List(java.util.List) ArrayList(java.util.ArrayList)

Aggregations

ArrayList (java.util.ArrayList)2 List (java.util.List)2 TbResultSetFuture (org.thingsboard.server.dao.nosql.TbResultSetFuture)2