use of org.locationtech.geowave.core.store.operations.ReaderParams in project geowave by locationtech.
the class FileSystemReader method createIterator.
private CloseableIterator<T> createIterator(final FileSystemClient client, final RangeReaderParams<T> readerParams, final GeoWaveRowIteratorTransformer<T> rowTransformer, final Collection<SinglePartitionQueryRanges> ranges, final Set<String> authorizations, final boolean async) {
final Iterator<CloseableIterator> it = Arrays.stream(ArrayUtils.toObject(readerParams.getAdapterIds())).map(adapterId -> new FileSystemQueryExecution(client, adapterId, readerParams.getInternalAdapterStore().getTypeName(adapterId), readerParams.getIndex().getName(), client.getFormat(), rowTransformer, ranges, new ClientVisibilityFilter(authorizations), DataStoreUtils.isMergingIteratorRequired(readerParams, client.isVisibilityEnabled()), async, FileSystemUtils.isGroupByRowAndIsSortByTime(readerParams, adapterId), FileSystemUtils.isSortByKeyRequired(readerParams)).results()).iterator();
final CloseableIterator<T>[] itArray = Iterators.toArray(it, CloseableIterator.class);
return new CloseableIteratorWrapper<>(new Closeable() {
AtomicBoolean closed = new AtomicBoolean(false);
@Override
public void close() throws IOException {
if (!closed.getAndSet(true)) {
Arrays.stream(itArray).forEach(it -> it.close());
}
}
}, Iterators.concat(itArray));
}
use of org.locationtech.geowave.core.store.operations.ReaderParams in project geowave by locationtech.
the class FileSystemReader method createIteratorForReader.
private CloseableIterator<T> createIteratorForReader(final FileSystemClient client, final ReaderParams<T> readerParams, final GeoWaveRowIteratorTransformer<T> rowTransformer, final boolean async) {
final Collection<SinglePartitionQueryRanges> ranges = readerParams.getQueryRanges().getPartitionQueryRanges();
final Set<String> authorizations = Sets.newHashSet(readerParams.getAdditionalAuthorizations());
if ((ranges != null) && !ranges.isEmpty()) {
return createIterator(client, readerParams, readerParams.getRowTransformer(), ranges, authorizations, async);
} else {
final List<CloseableIterator<GeoWaveRow>> iterators = new ArrayList<>();
final IndexFormatter indexFormatter = DataFormatterCache.getInstance().getFormatter(client.getFormat(), client.isVisibilityEnabled()).getIndexFormatter();
final String indexName = readerParams.getIndex().getName();
for (final short adapterId : readerParams.getAdapterIds()) {
final Pair<Boolean, Boolean> groupByRowAndSortByTime = FileSystemUtils.isGroupByRowAndIsSortByTime(readerParams, adapterId);
final String typeName = readerParams.getInternalAdapterStore().getTypeName(adapterId);
final String indexDirectory = indexFormatter.getDirectoryName(indexName, typeName);
final Stream<CloseableIterator<GeoWaveRow>> streamIt = FileSystemUtils.getPartitions(FileSystemUtils.getSubdirectory(client.getSubDirectory(), indexDirectory), indexFormatter, indexName, typeName).stream().map(p -> FileSystemUtils.getIndexTable(client, adapterId, typeName, indexName, p.getBytes(), groupByRowAndSortByTime.getRight()).iterator());
iterators.addAll(streamIt.collect(Collectors.toList()));
}
return wrapResults(new Closeable() {
AtomicBoolean closed = new AtomicBoolean(false);
@Override
public void close() throws IOException {
if (!closed.getAndSet(true)) {
iterators.forEach(it -> it.close());
}
}
}, Iterators.concat(iterators.iterator()), readerParams, rowTransformer, authorizations, client.isVisibilityEnabled());
}
}
use of org.locationtech.geowave.core.store.operations.ReaderParams in project geowave by locationtech.
the class RedisReader method createIteratorForReader.
private CloseableIterator<T> createIteratorForReader(final RedissonClient client, final Compression compression, final ReaderParams<T> readerParams, final GeoWaveRowIteratorTransformer<T> rowTransformer, final String namespace, final boolean visibilityEnabled, final boolean async) {
final Collection<SinglePartitionQueryRanges> ranges = readerParams.getQueryRanges().getPartitionQueryRanges();
final Set<String> authorizations = Sets.newHashSet(readerParams.getAdditionalAuthorizations());
if ((ranges != null) && !ranges.isEmpty()) {
return createIterator(client, compression, readerParams, readerParams.getRowTransformer(), namespace, ranges, authorizations, visibilityEnabled, async);
} else {
final Iterator<GeoWaveRedisRow>[] iterators = new Iterator[readerParams.getAdapterIds().length];
int i = 0;
for (final short adapterId : readerParams.getAdapterIds()) {
final Pair<Boolean, Boolean> groupByRowAndSortByTime = RedisUtils.isGroupByRowAndIsSortByTime(readerParams, adapterId);
final String setNamePrefix = RedisUtils.getRowSetPrefix(namespace, readerParams.getInternalAdapterStore().getTypeName(adapterId), readerParams.getIndex().getName());
final Stream<Pair<ByteArray, Iterator<ScoredEntry<GeoWaveRedisPersistedRow>>>> streamIt = RedisUtils.getPartitions(client, setNamePrefix).stream().map(p -> {
final Iterator<ScoredEntry<GeoWaveRedisPersistedRow>> result = RedisUtils.getRowSet(client, compression, setNamePrefix, p.getBytes(), groupByRowAndSortByTime.getRight(), visibilityEnabled).entryRange(Double.NEGATIVE_INFINITY, true, Double.POSITIVE_INFINITY, true);
final Iterator<ScoredEntry<GeoWaveRedisPersistedRow>> it = groupByRowAndSortByTime.getLeft() ? RedisUtils.groupByRow(result, groupByRowAndSortByTime.getRight()) : result;
return ImmutablePair.of(p, it);
});
iterators[i++] = Iterators.concat(streamIt.map(p -> Iterators.transform(p.getRight(), pr -> new GeoWaveRedisRow(pr.getValue(), adapterId, p.getLeft().getBytes(), RedisUtils.getFullSortKey(pr.getScore(), pr.getValue().getSortKeyPrecisionBeyondScore())))).iterator());
}
return wrapResults(Iterators.concat(iterators), readerParams, rowTransformer, authorizations, visibilityEnabled);
}
}
use of org.locationtech.geowave.core.store.operations.ReaderParams in project geowave by locationtech.
the class RedisReader method createIterator.
private CloseableIterator<T> createIterator(final RedissonClient client, final Compression compression, final RangeReaderParams<T> readerParams, final GeoWaveRowIteratorTransformer<T> rowTransformer, final String namespace, final Collection<SinglePartitionQueryRanges> ranges, final Set<String> authorizations, final boolean visibilityEnabled, final boolean async) {
final Iterator<CloseableIterator> it = Arrays.stream(ArrayUtils.toObject(readerParams.getAdapterIds())).map(adapterId -> new BatchedRangeRead(client, compression, RedisUtils.getRowSetPrefix(namespace, readerParams.getInternalAdapterStore().getTypeName(adapterId), readerParams.getIndex().getName()), adapterId, ranges, rowTransformer, new ClientVisibilityFilter(authorizations), DataStoreUtils.isMergingIteratorRequired(readerParams, visibilityEnabled), async, RedisUtils.isGroupByRowAndIsSortByTime(readerParams, adapterId), RedisUtils.isSortByKeyRequired(readerParams), visibilityEnabled).results()).iterator();
final CloseableIterator<T>[] itArray = Iterators.toArray(it, CloseableIterator.class);
return new CloseableIteratorWrapper<>(new Closeable() {
AtomicBoolean closed = new AtomicBoolean(false);
@Override
public void close() throws IOException {
if (!closed.getAndSet(true)) {
Arrays.stream(itArray).forEach(it -> it.close());
}
}
}, Iterators.concat(itArray));
}
use of org.locationtech.geowave.core.store.operations.ReaderParams in project geowave by locationtech.
the class RocksDBReader method createIterator.
private CloseableIterator<T> createIterator(final RocksDBClient client, final RangeReaderParams<T> readerParams, final GeoWaveRowIteratorTransformer<T> rowTransformer, final Collection<SinglePartitionQueryRanges> ranges, final Set<String> authorizations, final boolean async) {
final Iterator<CloseableIterator> it = Arrays.stream(ArrayUtils.toObject(readerParams.getAdapterIds())).map(adapterId -> new RocksDBQueryExecution(client, RocksDBUtils.getTablePrefix(readerParams.getInternalAdapterStore().getTypeName(adapterId), readerParams.getIndex().getName()), adapterId, rowTransformer, ranges, new ClientVisibilityFilter(authorizations), DataStoreUtils.isMergingIteratorRequired(readerParams, client.isVisibilityEnabled()), async, RocksDBUtils.isGroupByRowAndIsSortByTime(readerParams, adapterId), RocksDBUtils.isSortByKeyRequired(readerParams)).results()).iterator();
final CloseableIterator<T>[] itArray = Iterators.toArray(it, CloseableIterator.class);
return new CloseableIteratorWrapper<>(new Closeable() {
AtomicBoolean closed = new AtomicBoolean(false);
@Override
public void close() throws IOException {
if (!closed.getAndSet(true)) {
Arrays.stream(itArray).forEach(it -> it.close());
}
}
}, Iterators.concat(itArray));
}
Aggregations