use of org.locationtech.geowave.core.index.simple.RoundRobinKeyIndexStrategy in project geowave by locationtech.
the class RocksDBLockfileTest method testLockfile.
private void testLockfile(final int numThreads, final boolean secondaryIndexing) {
final RocksDBOptions options = new RocksDBOptions();
options.setDirectory(DEFAULT_DB_DIRECTORY);
options.getStoreOptions().setSecondaryIndexing(secondaryIndexing);
final DataStore store = new RocksDBStoreFactoryFamily().getDataStoreFactory().createStore(options);
store.deleteAll();
store.addType(BasicDataTypeAdapter.newAdapter(POI_TYPE_NAME, POI.class, "name"));
Index index = AttributeDimensionalityTypeProvider.createIndexFromOptions(store, new AttributeIndexOptions(POI_TYPE_NAME, "latitude"));
index = new CustomNameIndex(new CompoundIndexStrategy(new RoundRobinKeyIndexStrategy(32), index.getIndexStrategy()), index.getIndexModel(), index.getName() + "_" + PartitionStrategy.ROUND_ROBIN.name() + "_" + 32);
final Index latAttributeIndex = new IndexWrapper(index);
store.addIndex(POI_TYPE_NAME, latAttributeIndex);
final DataStore store2 = new RocksDBStoreFactoryFamily().getDataStoreFactory().createStore(options);
IntStream.range(0, numThreads).mapToObj(i -> CompletableFuture.runAsync(() -> {
double offset = i * numThreads;
try (Writer<POI> w = store.createWriter(POI_TYPE_NAME)) {
w.write(new POI("name" + offset, offset, offset));
}
try (CloseableIterator<POI> poiIt = store2.query(QueryBuilder.newBuilder(POI.class).build())) {
if (numThreads == 1) {
Assert.assertEquals(1, Iterators.size(poiIt));
} else {
Assert.assertTrue(Iterators.size(poiIt) >= 1);
}
}
offset++;
try (Writer<POI> w = store2.createWriter(POI_TYPE_NAME)) {
w.write(new POI("name" + offset, offset, offset));
}
try (CloseableIterator<POI> poiIt = store.query(QueryBuilder.newBuilder(POI.class).build())) {
if (numThreads == 1) {
Assert.assertEquals(2, Iterators.size(poiIt));
} else {
Assert.assertTrue(Iterators.size(poiIt) >= 2);
}
}
offset++;
try (Writer<POI> w = store2.createWriter(POI_TYPE_NAME)) {
w.write(new POI("name" + offset, offset, offset));
try (CloseableIterator<POI> poiIt = store.query(QueryBuilder.newBuilder(POI.class).build())) {
if (numThreads == 1) {
Assert.assertEquals(2, Iterators.size(poiIt));
} else {
Assert.assertTrue(Iterators.size(poiIt) >= 2);
}
}
w.flush();
try (CloseableIterator<POI> poiIt = store.query(QueryBuilder.newBuilder(POI.class).build())) {
if (numThreads == 1) {
Assert.assertEquals(3, Iterators.size(poiIt));
} else {
Assert.assertTrue(Iterators.size(poiIt) >= 3);
}
}
}
try (CloseableIterator<POI> poiIt = store2.query(QueryBuilder.newBuilder(POI.class).build())) {
if (numThreads == 1) {
Assert.assertEquals(3, Iterators.size(poiIt));
} else {
Assert.assertTrue(Iterators.size(poiIt) >= 3);
}
}
}));
store.deleteAll();
}
use of org.locationtech.geowave.core.index.simple.RoundRobinKeyIndexStrategy in project geowave by locationtech.
the class CompoundHierarchicalIndexStrategyWrapper method findHierarchicalStrategy.
public static HierarchicalNumericIndexStrategy findHierarchicalStrategy(final NumericIndexStrategy indexStrategy, final List<CompoundIndexStrategy> parentStrategies) {
if (indexStrategy instanceof HierarchicalNumericIndexStrategy) {
return (HierarchicalNumericIndexStrategy) indexStrategy;
}
if (indexStrategy instanceof CompoundIndexStrategy) {
final PartitionIndexStrategy<MultiDimensionalNumericData, MultiDimensionalNumericData> primaryIndex = ((CompoundIndexStrategy) indexStrategy).getPrimarySubStrategy();
final NumericIndexStrategy secondaryIndex = ((CompoundIndexStrategy) indexStrategy).getSecondarySubStrategy();
// warn if round robin is used
if (primaryIndex instanceof RoundRobinKeyIndexStrategy) {
LOGGER.warn("Round Robin partitioning won't work correctly with raster merge strategies");
} else if (secondaryIndex instanceof RoundRobinKeyIndexStrategy) {
LOGGER.warn("Round Robin partitioning won't work correctly with raster merge strategies");
}
final HierarchicalNumericIndexStrategy secondary = findHierarchicalStrategy(secondaryIndex);
if (secondary != null) {
// add it to beginning because we are recursing back from the
// leaf strategy up to the parent
parentStrategies.add(0, (CompoundIndexStrategy) indexStrategy);
return secondary;
}
}
return null;
}
use of org.locationtech.geowave.core.index.simple.RoundRobinKeyIndexStrategy in project geowave by locationtech.
the class AccumuloUtils method setSplitsByRandomPartitions.
/**
* Set splits on a table based on a partition ID
*/
public static void setSplitsByRandomPartitions(final Connector connector, final String namespace, final Index index, final int randomPartitions) throws AccumuloException, AccumuloSecurityException, IOException, TableNotFoundException {
final AccumuloOperations operations = new AccumuloOperations(connector, namespace, new AccumuloOptions());
final RoundRobinKeyIndexStrategy partitions = new RoundRobinKeyIndexStrategy(randomPartitions);
operations.createTable(index.getName(), true, true);
for (final byte[] p : partitions.getPartitionKeys()) {
operations.ensurePartition(new ByteArray(p), index.getName());
}
}
Aggregations