Deferred.group(client.put(put1), client.put(put2),
client.put(put3)).join();
// Scan the same 3 rows created above twice.
for (int i = 0; i < 2; i++) {
LOG.info("------------ iteration #" + i);
final Scanner scanner = client.newScanner(table);
scanner.setStartKey("s0");
scanner.setStopKey("s9");
// Callback class to keep scanning recursively.
class cb implements Callback<Object, ArrayList<ArrayList<KeyValue>>> {
private int n = 0;
public Object call(final ArrayList<ArrayList<KeyValue>> rows) {
if (rows == null) {
return null;
}
n++;
try {
assertSizeIs(1, rows);
final ArrayList<KeyValue> kvs = rows.get(0);
final KeyValue kv = kvs.get(0);
assertSizeIs(1, kvs);
assertEq("s" + n, kv.key());
assertEq("q", kv.qualifier());
assertEq("v" + n, kv.value());
return scanner.nextRows(1).addCallback(this);
} catch (AssertionError e) {
// Deferred doesn't catch Errors on purpose, so transform any
// assertion failure into an Exception.
throw new RuntimeException("Asynchronous failure", e);
}
}
}
try {
scanner.nextRows(1).addCallback(new cb()).join();
} finally {
scanner.close().join();
}
}
}