Skip to content

Commit db33bbd

Browse files
committed
Revert "Stateless session should use batching"
This reverts commit 4d8de16.
1 parent 26d70aa commit db33bbd

3 files changed

Lines changed: 22 additions & 15 deletions

File tree

frameworks/Java/quarkus/resteasy-reactive-hibernate-reactive/src/main/java/io/quarkus/benchmark/repository/WorldRepository.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,18 @@ public Uni<Void> createData() {
3737
});
3838
}
3939

40-
public Uni<List<World>> update(Mutiny.StatelessSession session, List<World> worlds) {
41-
return session.updateMultiple(worlds).replaceWith(() -> worlds);
40+
public Uni<List<World>> update(Mutiny.Session session, List<World> worlds) {
41+
return session
42+
.setBatchSize(worlds.size())
43+
.flush()
44+
.map(v -> worlds);
4245
}
4346

44-
public Uni<List<World>> findStateless(Mutiny.StatelessSession s, int count) {
47+
public Uni<List<World>> findStateless(int count) {
48+
return inStatelessSession(session -> findStateless(session, count));
49+
}
50+
51+
private Uni<List<World>> findStateless(Mutiny.StatelessSession s, int count) {
4552
//The rules require individual load: we can't use the Hibernate feature which allows load by multiple IDs
4653
// as one single operation as Hibernate is too smart and will switch to use batched loads automatically.
4754
// Hence, use this awkward alternative:

frameworks/Java/quarkus/resteasy-reactive-hibernate-reactive/src/main/java/io/quarkus/benchmark/resource/DbResource.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,17 @@ public Uni<Void> createData() {
4444
return worldRepository.createData();
4545
}
4646

47-
private Uni<List<World>> randomWorldsForWrite(Mutiny.StatelessSession session, int count) {
48-
return worldRepository.findStateless(session, count);
47+
private Uni<List<World>> randomWorldsForWrite(Mutiny.Session session, int count) {
48+
return worldRepository.findManaged(session, count);
4949
}
5050

5151
@GET
5252
@Path("updates")
5353
public Uni<List<World>> updates(@QueryParam("queries") String queries) {
54-
return worldRepository.inStatelessSession(session -> {
54+
return worldRepository.inSession(session -> {
55+
56+
session.setFlushMode(FlushMode.MANUAL);
57+
5558
Uni<List<World>> worlds = randomWorldsForWrite(session, parseQueryCount(queries));
5659
return worlds.flatMap(worldsCollection -> {
5760
final LocalRandom localRandom = Randomizer.current();
@@ -63,6 +66,7 @@ public Uni<List<World>> updates(@QueryParam("queries") String queries) {
6366
//the verification:
6467
w.setRandomNumber(localRandom.getNextRandomExcluding(previousRead));
6568
} );
69+
6670
return worldRepository.update(session, worldsCollection);
6771
});
6872
});

frameworks/Java/quarkus/resteasy-reactive-hibernate/src/main/java/io/quarkus/benchmark/repository/WorldRepository.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package io.quarkus.benchmark.repository;
22

3-
import java.util.ArrayList;
4-
import java.util.List;
5-
63
import io.quarkus.benchmark.model.World;
74
import io.quarkus.benchmark.utils.LocalRandom;
85
import io.quarkus.benchmark.utils.Randomizer;
@@ -56,22 +53,21 @@ public World[] loadNWorlds(final int count) {
5653

5754
public World[] updateNWorlds(final int count) {
5855
//We're again forced to use the "individual load" pattern by the rules:
59-
final World[] worlds = loadNWorlds(count);
60-
final List<World> worldList = new ArrayList<>(worlds.length);
56+
final World[] list = loadNWorlds(count);
6157
final LocalRandom random = Randomizer.current();
6258
try (StatelessSession s = sf.openStatelessSession()) {
63-
for (World w : worlds) {
59+
s.setJdbcBatchSize(count);
60+
for (World w : list) {
6461
//Read the one field, as required by the following rule:
6562
// # vi. At least the randomNumber field must be read from the database result set.
6663
final int previousRead = w.getRandomNumber();
6764
//Update it, but make sure to exclude the current number as Hibernate optimisations would otherwise
6865
// skip the write operation:
6966
w.setRandomNumber(random.getNextRandomExcluding(previousRead));
70-
worldList.add(w);
67+
s.update(w);
7168
}
72-
s.updateMultiple(worldList);
7369
}
74-
return worlds;
70+
return list;
7571
}
7672

7773
}

0 commit comments

Comments
 (0)