use of org.apache.ignite.internal.util.typedef.CI2 in project ignite by apache.
the class GridCacheBalancingStoreSelfTest method testLoads.
/**
* @throws Exception If failed.
*/
@Test
public void testLoads() throws Exception {
final int range = 300;
final AtomicInteger cycles = new AtomicInteger();
final AtomicReference<Exception> err = new AtomicReference<>();
final CacheStoreBalancingWrapper<Integer, Integer> w = new CacheStoreBalancingWrapper<>(new VerifyStore(range));
final AtomicBoolean finish = new AtomicBoolean();
IgniteInternalFuture<Long> fut = GridTestUtils.runMultiThreadedAsync(new IgniteCallable<Void>() {
@Override
public Void call() throws Exception {
try {
ThreadLocalRandom rnd = ThreadLocalRandom.current();
while (!finish.get()) {
int cnt = rnd.nextInt(CacheStoreBalancingWrapper.DFLT_LOAD_ALL_THRESHOLD) + 1;
if (cnt == 1) {
int key = rnd.nextInt(range);
assertEquals((Integer) key, w.load(key));
} else {
Collection<Integer> keys = new HashSet<>(cnt);
for (int i = 0; i < cnt; i++) keys.add(rnd.nextInt(range));
final Map<Integer, Integer> loaded = new HashMap<>();
w.loadAll(keys, new CI2<Integer, Integer>() {
@Override
public void apply(Integer k, Integer v) {
loaded.put(k, v);
}
});
for (Integer key : keys) assertEquals(key, loaded.get(key));
}
int c = cycles.incrementAndGet();
if (c > 0 && c % 2_000_000 == 0)
info("Finished cycles: " + c);
}
} catch (Exception e) {
e.printStackTrace();
err.compareAndSet(null, e);
}
return null;
}
}, 10, "test");
try {
Thread.sleep(30_000);
} finally {
finish.set(true);
}
fut.get();
if (err.get() != null)
throw err.get();
info("Total: " + cycles.get());
}
Aggregations