-
Notifications
You must be signed in to change notification settings - Fork 97
Expand file tree
/
Copy pathDataLoader_NoBatching_Caching_JCStress.java
More file actions
54 lines (40 loc) · 1.59 KB
/
DataLoader_NoBatching_Caching_JCStress.java
File metadata and controls
54 lines (40 loc) · 1.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package org.dataloader;
import org.openjdk.jcstress.annotations.Actor;
import org.openjdk.jcstress.annotations.Arbiter;
import org.openjdk.jcstress.annotations.JCStressTest;
import org.openjdk.jcstress.annotations.Outcome;
import org.openjdk.jcstress.annotations.State;
import org.openjdk.jcstress.infra.results.II_Result;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicInteger;
import static org.openjdk.jcstress.annotations.Expect.ACCEPTABLE;
import static org.openjdk.jcstress.annotations.Expect.ACCEPTABLE_INTERESTING;
@JCStressTest
@State
@Outcome(id = "1000, 1000", expect = ACCEPTABLE, desc = "No keys loaded twice")
@Outcome(id = "1.*, 1000", expect = ACCEPTABLE_INTERESTING, desc = "Some keys loaded twice")
public class DataLoader_NoBatching_Caching_JCStress {
AtomicInteger batchLoaderCount = new AtomicInteger();
BatchLoader<String, String> batchLoader = keys -> {
batchLoaderCount.getAndAdd(keys.size());
return CompletableFuture.completedFuture(keys);
};
DataLoader<String, String> dataLoader = DataLoaderFactory.newDataLoader(batchLoader, DataLoaderOptions.newOptions().setBatchingEnabled(false).build());
@Actor
public void load1() {
for (int i = 0; i < 1000; i++) {
dataLoader.load("load-1-" + i);
}
}
@Actor
public void load2() {
for (int i = 0; i < 1000; i++) {
dataLoader.load("load-1-" + i);
}
}
@Arbiter
public void arbiter(II_Result r) {
r.r1 = batchLoaderCount.get();
r.r2 = dataLoader.getCacheMap().size();
}
}