use of io.pravega.client.tables.KeyValueTable in project pravega by pravega.
the class KeyValueTableTestBase method checkGlobalIterator.
private void checkGlobalIterator(KeyValueTable keyValueTable, Versions versions, int iteration) {
val itemsAtOnce = getSecondaryKeyCount() / 5;
// All expected Entries, indexed by Keys.
val allEntries = new HashMap<TableKey, TableEntry>();
forEveryKey((pk, sk) -> {
val k = new TableKey(pk, sk);
val e = new TableEntry(k, versions.get(getUniqueKeyId(k.getPrimaryKey(), k.getSecondaryKey())), getValue(pk, sk, iteration));
allEntries.put(k, e);
});
// All Keys, sorted.
val allKeys = allEntries.keySet().stream().sorted(KEY_COMPARATOR).collect(Collectors.toList());
// All unique Primary Keys.
val allPrimaryKeys = allKeys.stream().map(TableKey::getPrimaryKey).distinct().sorted(KEY_COMPARATOR::compare).collect(Collectors.toList());
// Issue various iterators (range) and verify against expected values.
for (int startIndex = 0; startIndex < allPrimaryKeys.size() / 2; startIndex++) {
val endIndex = allPrimaryKeys.size() - startIndex - 1;
val firstPK = allPrimaryKeys.get(startIndex);
val lastPK = allPrimaryKeys.get(endIndex);
val expectedKeys = allKeys.stream().filter(k -> KEY_COMPARATOR.compare(k.getPrimaryKey(), firstPK) >= 0 && KEY_COMPARATOR.compare(k.getPrimaryKey(), lastPK) <= 0).collect(Collectors.toList());
val iterator = keyValueTable.iterator().maxIterationSize(itemsAtOnce).forRange(firstPK, lastPK);
val iteratorKeys = new ArrayList<TableKey>();
iterator.keys().collectRemaining(ii -> iteratorKeys.addAll(ii.getItems())).join();
AssertExtensions.assertListEquals("Unexpected keys returned from iterator.keys()", expectedKeys, iteratorKeys, this::areEqual);
val expectedEntries = expectedKeys.stream().map(allEntries::get).collect(Collectors.toList());
val iteratorEntries = new ArrayList<TableEntry>();
iterator.entries().collectRemaining(ii -> iteratorEntries.addAll(ii.getItems())).join();
AssertExtensions.assertListEquals("Unexpected entries returned from iterator.entries()", expectedEntries, iteratorEntries, (e1, e2) -> areEqual(e1, e2) && e1.getVersion().equals(e2.getVersion()));
}
// Check all() iterator.
val allIterator = keyValueTable.iterator().maxIterationSize(itemsAtOnce).all();
val expectedAllEntries = allKeys.stream().map(allEntries::get).collect(Collectors.toList());
val allIteratorEntries = new ArrayList<TableEntry>();
allIterator.entries().collectRemaining(ii -> allIteratorEntries.addAll(ii.getItems())).join();
AssertExtensions.assertListEquals("Unexpected entries returned from allIterator.entries()", expectedAllEntries, allIteratorEntries, (e1, e2) -> areEqual(e1, e2) && e1.getVersion().equals(e2.getVersion()));
}
Aggregations