Repository: cayenne Updated Branches: refs/heads/master 31befb1b9 -> 6b804098f
Cleanup Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/6b804098 Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/6b804098 Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/6b804098 Branch: refs/heads/master Commit: 6b804098fcc0f7f674a6c4cc2ae506fedad558f2 Parents: 31befb1 Author: Nikita Timofeev <stari...@gmail.com> Authored: Thu Feb 15 17:59:23 2018 +0300 Committer: Nikita Timofeev <stari...@gmail.com> Committed: Thu Feb 15 17:59:23 2018 +0300 ---------------------------------------------------------------------- .../cayenne/dba/ConcurrentPkGeneratorIT.java | 47 ++++++++------------ 1 file changed, 19 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/6b804098/cayenne-server/src/test/java/org/apache/cayenne/dba/ConcurrentPkGeneratorIT.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/test/java/org/apache/cayenne/dba/ConcurrentPkGeneratorIT.java b/cayenne-server/src/test/java/org/apache/cayenne/dba/ConcurrentPkGeneratorIT.java index 74bddb3..3510455 100644 --- a/cayenne-server/src/test/java/org/apache/cayenne/dba/ConcurrentPkGeneratorIT.java +++ b/cayenne-server/src/test/java/org/apache/cayenne/dba/ConcurrentPkGeneratorIT.java @@ -19,7 +19,6 @@ package org.apache.cayenne.dba; -import org.apache.cayenne.Cayenne; import org.apache.cayenne.ObjectContext; import org.apache.cayenne.configuration.server.ServerRuntime; import org.apache.cayenne.di.Inject; @@ -33,8 +32,6 @@ import org.apache.cayenne.unit.di.server.ServerCase; import org.apache.cayenne.unit.di.server.UseServerRuntime; import org.junit.Test; -import java.util.Collections; -import java.util.Comparator; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -56,7 +53,7 @@ public class ConcurrentPkGeneratorIT extends ServerCase { * Attempts to discover any problems regarding thread locking in the PkGenerator */ @Test - public void testConcurrentInserts() throws Exception { + public void testConcurrentInserts() { if(!unitDbAdapter.supportsPKGeneratorConcurrency()) { return; @@ -72,22 +69,22 @@ public class ConcurrentPkGeneratorIT extends ServerCase { // perform concurrent inserts int numThreads = 2; + int insertsPerThread = 100; + ExecutorService executor = Executors.newFixedThreadPool(numThreads); - Runnable task = new Runnable() { - public void run() { - try { - ObjectContext context = runtime.newContext(); - for (ObjEntity entity : dataMap.getObjEntities()) { - context.newObject(entity.getJavaClass()); - } - context.commitChanges(); - } catch (Exception e) { - e.printStackTrace(); - } - } - }; + Runnable task = () -> { + try { + ObjectContext context1 = runtime.newContext(); + for (ObjEntity entity : dataMap.getObjEntities()) { + context1.newObject(entity.getJavaClass()); + } + context1.commitChanges(); + } catch (Exception e) { + e.printStackTrace(); + } + }; - for (int j = 0; j < 100; j++) { + for (int j = 0; j < insertsPerThread; j++) { for (int i = 0; i < numThreads; i++) { executor.submit(task); } @@ -107,17 +104,11 @@ public class ConcurrentPkGeneratorIT extends ServerCase { // check for gaps in the generated sequence numbers qualified1s = context.select(SelectQuery.query(Qualified1.class, null)); - assertEquals(100 * numThreads, qualified1s.size()); - - Collections.sort(qualified1s, new Comparator<Qualified1>() { - public int compare(Qualified1 left, Qualified1 right) { - Integer leftPk = Cayenne.intPKForObject(left); - Integer rightPk = Cayenne.intPKForObject(right); - return leftPk.compareTo(rightPk); - } - }); - + assertEquals(insertsPerThread * numThreads, qualified1s.size()); + // PKs will be used in order most of the time, but the implementation doesn't guarantee it. +// qualified1s.sort(Comparator.comparing(Cayenne::intPKForObject)); +// // int lastPk = Cayenne.intPKForObject(qualified1s.get(0)) - 1; // for (Qualified1 qualified1 : qualified1s) { // if (lastPk+1 != Cayenne.intPKForObject(qualified1)) {