You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2016/09/05 15:04:37 UTC
[3/5] cayenne git commit: disable concurrent PK tests for HSQLDB
whose PK generator has no DB locks
disable concurrent PK tests for HSQLDB whose PK generator has no DB locks
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/66d3f0a9
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/66d3f0a9
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/66d3f0a9
Branch: refs/heads/master
Commit: 66d3f0a95768890b4d1aba0fbab2418b323b41be
Parents: 574eefb
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Mon Sep 5 17:54:37 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Mon Sep 5 17:54:37 2016 +0300
----------------------------------------------------------------------
.../org/apache/cayenne/dba/JdbcPkGenerator.java | 29 +++++++++---------
.../cayenne/dba/ConcurrentPkGeneratorIT.java | 9 ++++++
.../cayenne/unit/HSQLDBUnitDbAdapter.java | 6 ++++
.../org/apache/cayenne/unit/UnitDbAdapter.java | 32 +++++++++++---------
4 files changed, 47 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/66d3f0a9/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcPkGenerator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcPkGenerator.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcPkGenerator.java
index 4d9393f..9e159d2 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcPkGenerator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcPkGenerator.java
@@ -19,19 +19,6 @@
package org.apache.cayenne.dba;
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.sql.Types;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Queue;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentLinkedQueue;
-
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.DataRow;
import org.apache.cayenne.ObjectId;
@@ -45,6 +32,20 @@ import org.apache.cayenne.query.Query;
import org.apache.cayenne.query.SQLTemplate;
import org.apache.cayenne.util.IDUtil;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Queue;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.ConcurrentMap;
+
/**
* Default primary key generator implementation. Uses a lookup table named
* "AUTO_PK_SUPPORT" to search and increment primary keys for tables.
@@ -55,7 +56,7 @@ public class JdbcPkGenerator implements PkGenerator {
static final long DEFAULT_PK_START_VALUE = 200;
protected JdbcAdapter adapter;
- protected ConcurrentHashMap<String, Queue<Long>> pkCache = new ConcurrentHashMap<>();
+ protected ConcurrentMap<String, Queue<Long>> pkCache = new ConcurrentHashMap<>();
protected int pkCacheSize = DEFAULT_PK_CACHE_SIZE;
protected long pkStartValue = DEFAULT_PK_START_VALUE;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/66d3f0a9/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 7d2c06e..74bddb3 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
@@ -27,6 +27,7 @@ import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.query.SelectQuery;
import org.apache.cayenne.testdo.qualified.Qualified1;
+import org.apache.cayenne.unit.UnitDbAdapter;
import org.apache.cayenne.unit.di.server.CayenneProjects;
import org.apache.cayenne.unit.di.server.ServerCase;
import org.apache.cayenne.unit.di.server.UseServerRuntime;
@@ -47,12 +48,20 @@ public class ConcurrentPkGeneratorIT extends ServerCase {
@Inject
private ServerRuntime runtime;
+
+ @Inject
+ private UnitDbAdapter unitDbAdapter;
/*
* Attempts to discover any problems regarding thread locking in the PkGenerator
*/
@Test
public void testConcurrentInserts() throws Exception {
+
+ if(!unitDbAdapter.supportsPKGeneratorConcurrency()) {
+ return;
+ }
+
final DataMap dataMap = runtime.getDataDomain().getDataMap("qualified");
// clear out the table
http://git-wip-us.apache.org/repos/asf/cayenne/blob/66d3f0a9/cayenne-server/src/test/java/org/apache/cayenne/unit/HSQLDBUnitDbAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/HSQLDBUnitDbAdapter.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/HSQLDBUnitDbAdapter.java
index c78791f..4fb5e94 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/HSQLDBUnitDbAdapter.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/HSQLDBUnitDbAdapter.java
@@ -56,4 +56,10 @@ public class HSQLDBUnitDbAdapter extends UnitDbAdapter {
executeDDL(con, "hsqldb", "create-sp-aliases.sql");
}
}
+
+ @Override
+ public boolean supportsPKGeneratorConcurrency() {
+ // HSQL is not locking AUTO_PK_TABLE, so running PkGenerator in parallel may result in conflicting ranges
+ return false;
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/66d3f0a9/cayenne-server/src/test/java/org/apache/cayenne/unit/UnitDbAdapter.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/unit/UnitDbAdapter.java b/cayenne-server/src/test/java/org/apache/cayenne/unit/UnitDbAdapter.java
index b6ff454..6230943 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/UnitDbAdapter.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/UnitDbAdapter.java
@@ -19,6 +19,18 @@
package org.apache.cayenne.unit;
+import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.configuration.Constants;
+import org.apache.cayenne.configuration.RuntimeProperties;
+import org.apache.cayenne.dba.DbAdapter;
+import org.apache.cayenne.dba.QuotingStrategy;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.Procedure;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
@@ -33,18 +45,6 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
-import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.configuration.Constants;
-import org.apache.cayenne.configuration.RuntimeProperties;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.QuotingStrategy;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.Procedure;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
/**
* Defines API and a common superclass for testing various database features.
* Different databases support different feature sets that need to be tested
@@ -53,7 +53,7 @@ import org.apache.commons.logging.LogFactory;
*/
public class UnitDbAdapter {
- private static Log logger = LogFactory.getLog(UnitDbAdapter.class);
+ private static final Log logger = LogFactory.getLog(UnitDbAdapter.class);
@Inject
protected RuntimeProperties runtimeProperties;
@@ -66,6 +66,10 @@ public class UnitDbAdapter {
}
this.adapter = adapter;
}
+
+ public boolean supportsPKGeneratorConcurrency() {
+ return true;
+ }
public String getIdentifiersStartQuote() {
return "\"";
@@ -78,8 +82,6 @@ public class UnitDbAdapter {
/**
* Returns whether the target DB treats REAL values as DOUBLEs. Default is
* false, i.e. REALs are treated as FLOATs.
- *
- * @return
*/
public boolean realAsDouble() {
return false;