-
Notifications
You must be signed in to change notification settings - Fork 97
Expand file tree
/
Copy pathDataLoader_Batching_Caching_JCStress.java
More file actions
108 lines (90 loc) · 3.01 KB
/
DataLoader_Batching_Caching_JCStress.java
File metadata and controls
108 lines (90 loc) · 3.01 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
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.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicInteger;
import static org.openjdk.jcstress.annotations.Expect.ACCEPTABLE;
@JCStressTest
@State
@Outcome(id = "2000, 2000", expect = ACCEPTABLE, desc = "accepted")
public class DataLoader_Batching_Caching_JCStress {
AtomicInteger counter = new AtomicInteger();
AtomicInteger batchLoaderCount = new AtomicInteger();
volatile boolean finished1;
volatile boolean finished2;
BatchLoader<String, String> batchLoader = keys -> {
return CompletableFuture.supplyAsync(() -> {
batchLoaderCount.getAndAdd(keys.size());
return keys;
});
};
DataLoader<String, String> dataLoader = DataLoaderFactory.newDataLoader(batchLoader);
public DataLoader_Batching_Caching_JCStress() {
}
@Actor
public void load1() {
for (int i = 0; i < 1000; i++) {
dataLoader.load("load-1-" + i);
}
// we load the same keys again
for (int i = 0; i < 1000; i++) {
dataLoader.load("load-1-" + i);
}
finished1 = true;
}
@Actor
public void load2() {
for (int i = 0; i < 1000; i++) {
dataLoader.load("load-2-" + i);
}
// we load the same keys again
for (int i = 0; i < 1000; i++) {
dataLoader.load("load-2-" + i);
}
finished2 = true;
}
@Actor
public void dispatch1() {
while (!finished1 || !finished2) {
try {
List<String> dispatchedResult = dataLoader.dispatch().get();
counter.getAndAdd(dispatchedResult.size());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
try {
List<String> dispatchedResult = dataLoader.dispatch().get();
counter.getAndAdd(dispatchedResult.size());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Actor
public void dispatch2() {
while (!finished1 || !finished2) {
try {
List<String> dispatchedResult = dataLoader.dispatch().get();
counter.getAndAdd(dispatchedResult.size());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
try {
List<String> dispatchedResult = dataLoader.dispatch().get();
counter.getAndAdd(dispatchedResult.size());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Arbiter
public void arbiter(II_Result r) {
r.r1 = counter.get();
r.r2 = batchLoaderCount.get();
}
}