use of com.hazelcast.internal.util.collection.PartitionIdSet in project hazelcast by hazelcast.
the class MapKeySetTest method whenSelectingPartitionSubset_withIndex.
@Test
public void whenSelectingPartitionSubset_withIndex() {
PartitionIdSet partitionSubset = new PartitionIdSet(4, asList(1, 3));
Set<String> matchingKeys = new HashSet<>();
map = instance.getMap("indexed");
for (int i = 0; i < 5; i++) {
String key = generateKeyForPartition(instance, i);
map.put(key, key);
if (partitionSubset.contains(i)) {
matchingKeys.add(key);
}
}
// "" is sorted before any non-null string - internally all items from all partitions are added
// to the result (because the index is global), but there's a code that eliminates partitions not
// in the subset - this test aims to test that code
Predicate<String, String> predicate = Predicates.greaterThan("this", "");
Set<String> result = ((MapProxyImpl<String, String>) map).keySet(predicate, partitionSubset);
assertEquals(2, result.size());
assertEquals(matchingKeys, result);
}
use of com.hazelcast.internal.util.collection.PartitionIdSet in project hazelcast by hazelcast.
the class MapFetchIndexOperationTest method testRangeReverse.
@Test
public void testRangeReverse() throws ExecutionException, InterruptedException {
PartitionIdSet partitions = getLocalPartitions(instance);
IndexIterationPointer[] pointers = new IndexIterationPointer[1];
pointers[0] = IndexIterationPointer.create(30, true, 60, false, true, null);
MapOperationProvider operationProvider = getOperationProvider(map);
MapOperation operation = operationProvider.createFetchIndexOperation(mapName, orderedIndexName, pointers, partitions, 10);
Address address = instance.getCluster().getLocalMember().getAddress();
OperationServiceImpl operationService = getOperationService(instance);
MapFetchIndexOperationResult result = operationService.createInvocationBuilder(MapService.SERVICE_NAME, operation, address).<MapFetchIndexOperationResult>invoke().get();
assertResultSorted(result, Arrays.asList(new Person("person11", 45, "Dep5"), new Person("person10", 45, "Dep4"), new Person("person9", 45, "Dep3"), new Person("person4", 45, "Dep2"), new Person("person1", 45, "Dep1"), new Person("person5", 43, "Dep2"), new Person("person2", 39, "Dep1")));
}
use of com.hazelcast.internal.util.collection.PartitionIdSet in project hazelcast by hazelcast.
the class MapFetchIndexOperationTest method whenSizeLimitIsSmall_thenFetchInMultipleCalls_reverse.
@Test
public void whenSizeLimitIsSmall_thenFetchInMultipleCalls_reverse() throws ExecutionException, InterruptedException {
PartitionIdSet partitions = getLocalPartitions(instance);
IndexIterationPointer[] pointers = new IndexIterationPointer[2];
pointers[0] = IndexIterationPointer.create(50, true, 60, true, true, null);
pointers[1] = IndexIterationPointer.create(30, true, 50, false, true, null);
MapOperationProvider operationProvider = getOperationProvider(map);
MapOperation operation = operationProvider.createFetchIndexOperation(mapName, orderedIndexName, pointers, partitions, 5);
Address address = instance.getCluster().getLocalMember().getAddress();
OperationServiceImpl operationService = getOperationService(instance);
MapFetchIndexOperationResult result = operationService.createInvocationBuilder(MapService.SERVICE_NAME, operation, address).<MapFetchIndexOperationResult>invoke().get();
assertResultSorted(result, Arrays.asList(new Person("person3", 60, "Dep1"), new Person("person11", 45, "Dep5"), new Person("person10", 45, "Dep4"), new Person("person9", 45, "Dep3"), new Person("person4", 45, "Dep2")));
// First pointer is done in reverse case
assertEquals(1, result.getPointers().length);
operation = operationProvider.createFetchIndexOperation(mapName, orderedIndexName, result.getPointers(), partitions, 5);
result = operationService.createInvocationBuilder(MapService.SERVICE_NAME, operation, address).<MapFetchIndexOperationResult>invoke().get();
assertResultSorted(result, Arrays.asList(new Person("person1", 45, "Dep1"), new Person("person5", 43, "Dep2"), new Person("person2", 39, "Dep1")));
assertEquals(0, result.getPointers().length);
}
use of com.hazelcast.internal.util.collection.PartitionIdSet in project hazelcast by hazelcast.
the class MapFetchIndexOperationTest method testMigration.
// This test has different requirements, therefore depends on local variables.
// Before and After actions are dismissed.
@Test
public void testMigration() {
HazelcastInstance instance = new CustomTestInstanceFactory().newHazelcastInstance(config);
PartitionIdSet partitions = getLocalPartitions(instance);
List<Person> people = new ArrayList<>(Arrays.asList(new Person("person1", 45, null), new Person("person2", 39, null), new Person("person3", 60, null), new Person("person4", 45, null), new Person("person5", 43, null)));
IMap<String, Person> map = instance.getMap(mapName);
map.addIndex(new IndexConfig(IndexType.SORTED, "age").setName(orderedIndexName));
insertIntoMap(map, people);
IndexIterationPointer[] pointers = new IndexIterationPointer[1];
pointers[0] = IndexIterationPointer.create(10, true, 100, true, false, null);
MapOperationProvider operationProvider = getOperationProvider(map);
MapOperation operation = operationProvider.createFetchIndexOperation(mapName, orderedIndexName, pointers, partitions, 10);
Address address = instance.getCluster().getLocalMember().getAddress();
OperationServiceImpl operationService = getOperationService(instance);
try {
InvocationFuture<MapFetchIndexOperationResult> future = operationService.createInvocationBuilder(MapService.SERVICE_NAME, operation, address).invoke();
future.get();
} catch (Exception e) {
assertInstanceOf(MissingPartitionException.class, e.getCause());
} finally {
instance.shutdown();
}
}
use of com.hazelcast.internal.util.collection.PartitionIdSet in project hazelcast by hazelcast.
the class MapEntrySetTest method when_selectingPartitionSubset_and_partitionPredicate.
@Test
public void when_selectingPartitionSubset_and_partitionPredicate() {
PartitionIdSet partitionSubset = new PartitionIdSet(4, asList(1, 3));
Set<String> matchingKeys = new HashSet<>();
String key1 = null;
for (int i = 0; i < 5; i++) {
String key = generateKeyForPartition(instance, i);
if (i == 1) {
key1 = key;
}
map.put(key, key);
if (partitionSubset.contains(i)) {
matchingKeys.add(key);
}
}
Set<Entry<String, String>> result = ((MapProxyImpl<String, String>) map).entrySet(partitionPredicate(key1, Predicates.alwaysTrue()), partitionSubset);
assertEquals(1, result.size());
assertResultContains(result, key1, key1);
}
Aggregations