Author: reschke
Date: Tue Jun 16 14:22:37 2015
New Revision: 1685845
URL: http://svn.apache.org/r1685845
Log:
OAK-2995: RDB*Store: check transaction isolation level (ported to 1.2)
Modified:
jackrabbit/oak/branches/1.2/ (props changed)
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBJDBCTools.java
Propchange: jackrabbit/oak/branches/1.2/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jun 16 14:22:37 2015
@@ -1,3 +1,3 @@
/jackrabbit/oak/branches/1.0:1665962
-/jackrabbit/oak/trunk:1672350,1672468,1672537,1672603,1672642,1672644,1672834-1672835,1673351,1673410,1673414-1673415,1673436,1673644,1673662-1673664,1673669,1673695,1673738,1673787,1673791,1674046,1674065,1674075,1674107,1674228,1674780,1674880,1675054-1675055,1675319,1675332,1675354,1675357,1675382,1675555,1675566,1675593,1676198,1676237,1676407,1676458,1676539,1676670,1676693,1676703,1676725,1677579,1677581,1677609,1677611,1677774,1677788,1677797,1677804,1677806,1677939,1677991,1678173,1678323,1678758,1678938,1678954,1679144,1679165,1679191,1679232,1679235,1679958,1679961,1680182,1680222,1680232,1680236,1680461,1680633,1680643,1680805-1680806,1680903,1681282,1681767,1681918,1682218,1682235,1682437,1682494,1682555,1682855,1682904,1683089,1683213,1683249,1683259,1683278,1683323,1683687,1684174-1684175,1684186,1684376,1684442,1684561,1684570,1684601,1684618,1684868,1685023,1685370,1685552,1685589
+/jackrabbit/oak/trunk:1672350,1672468,1672537,1672603,1672642,1672644,1672834-1672835,1673351,1673410,1673414-1673415,1673436,1673644,1673662-1673664,1673669,1673695,1673738,1673787,1673791,1674046,1674065,1674075,1674107,1674228,1674780,1674880,1675054-1675055,1675319,1675332,1675354,1675357,1675382,1675555,1675566,1675593,1676198,1676237,1676407,1676458,1676539,1676670,1676693,1676703,1676725,1677579,1677581,1677609,1677611,1677774,1677788,1677797,1677804,1677806,1677939,1677991,1678173,1678323,1678758,1678938,1678954,1679144,1679165,1679191,1679232,1679235,1679958,1679961,1680182,1680222,1680232,1680236,1680461,1680633,1680643,1680805-1680806,1680903,1681282,1681767,1681918,1682218,1682235,1682437,1682494,1682555,1682855,1682904,1683089,1683213,1683249,1683259,1683278,1683323,1683687,1684174-1684175,1684186,1684376,1684442,1684561,1684570,1684601,1684618,1684868,1685023,1685370,1685552,1685589,1685840
/jackrabbit/trunk:1345480
Modified:
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java?rev=1685845&r1=1685844&r2=1685845&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
(original)
+++
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
Tue Jun 16 14:22:37 2015
@@ -275,6 +275,16 @@ public class RDBBlobStore extends Cachin
this.ch = new RDBConnectionHandler(ds);
Connection con = this.ch.getRWConnection();
+
+ int isolation = con.getTransactionIsolation();
+ String isolationDiags = RDBJDBCTools.isolationLevelToString(isolation);
+ if (isolation != Connection.TRANSACTION_READ_COMMITTED) {
+ LOG.info("Detected transaction isolation level " + isolationDiags
+ " is "
+ + (isolation < Connection.TRANSACTION_READ_COMMITTED ?
"lower" : "higher") + " than expected "
+ +
RDBJDBCTools.isolationLevelToString(Connection.TRANSACTION_READ_COMMITTED)
+ + " - check datasource configuration");
+ }
+
DatabaseMetaData md = con.getMetaData();
String dbDesc = String.format("%s %s (%d.%d)",
md.getDatabaseProductName(), md.getDatabaseProductVersion(),
md.getDatabaseMajorVersion(), md.getDatabaseMinorVersion());
@@ -330,7 +340,7 @@ public class RDBBlobStore extends Cachin
}
LOG.info("RDBBlobStore instantiated for database " + dbDesc + ",
using driver: " + driverDesc + ", connecting to: "
- + dbUrl);
+ + dbUrl + ", transaction isolation level: " +
isolationDiags);
if (!tablesPresent.isEmpty()) {
LOG.info("Tables present upon startup: " + tablesPresent);
}
Modified:
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java?rev=1685845&r1=1685844&r2=1685845&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
(original)
+++
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
Tue Jun 16 14:22:37 2015
@@ -821,6 +821,16 @@ public class RDBDocumentStore implements
this.cacheStats = new CacheStats(nodesCache, "Document-Documents",
builder.getWeigher(), builder.getDocumentCacheSize());
Connection con = this.ch.getRWConnection();
+
+ int isolation = con.getTransactionIsolation();
+ String isolationDiags = RDBJDBCTools.isolationLevelToString(isolation);
+ if (isolation != Connection.TRANSACTION_READ_COMMITTED) {
+ LOG.info("Detected transaction isolation level " + isolationDiags
+ " is "
+ + (isolation < Connection.TRANSACTION_READ_COMMITTED ?
"lower" : "higher") + " than expected "
+ +
RDBJDBCTools.isolationLevelToString(Connection.TRANSACTION_READ_COMMITTED)
+ + " - check datasource configuration");
+ }
+
DatabaseMetaData md = con.getMetaData();
String dbDesc = String.format("%s %s (%d.%d)",
md.getDatabaseProductName(), md.getDatabaseProductVersion(),
md.getDatabaseMajorVersion(), md.getDatabaseMinorVersion());
@@ -867,7 +877,7 @@ public class RDBDocumentStore implements
String diag = db.getAdditionalDiagnostics(this.ch, this.tnNodes);
LOG.info("RDBDocumentStore instantiated for database " + dbDesc + ",
using driver: " + driverDesc + ", connecting to: "
- + dbUrl + (diag.isEmpty() ? "" : (", properties: " + diag)));
+ + dbUrl + (diag.isEmpty() ? "" : (", properties: " + diag)) +
", transaction isolation level: " + isolationDiags);
if (!tablesPresent.isEmpty()) {
LOG.info("Tables present upon startup: " + tablesPresent);
}
Modified:
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBJDBCTools.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBJDBCTools.java?rev=1685845&r1=1685844&r2=1685845&view=diff
==============================================================================
---
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBJDBCTools.java
(original)
+++
jackrabbit/oak/branches/1.2/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBJDBCTools.java
Tue Jun 16 14:22:37 2015
@@ -16,10 +16,15 @@
*/
package org.apache.jackrabbit.oak.plugins.document.rdb;
+import java.sql.Connection;
import java.util.Locale;
+import java.util.Map;
import javax.annotation.Nonnull;
+/**
+ * Convenience methods dealing with JDBC specifics.
+ */
public class RDBJDBCTools {
protected static String jdbctype(String jdbcurl) {
@@ -86,4 +91,32 @@ public class RDBJDBCTools {
}
return p + b;
}
+
+ /**
+ * Return string representation of transaction isolation level.
+ */
+ protected static @Nonnull String isolationLevelToString(int
isolationLevel) {
+ String name;
+ switch (isolationLevel) {
+ case Connection.TRANSACTION_NONE:
+ name = "TRANSACTION_NONE";
+ break;
+ case Connection.TRANSACTION_READ_COMMITTED:
+ name = "TRANSACTION_READ_COMMITTED";
+ break;
+ case Connection.TRANSACTION_READ_UNCOMMITTED:
+ name = "TRANSACTION_READ_UNCOMMITTED";
+ break;
+ case Connection.TRANSACTION_REPEATABLE_READ:
+ name = "TRANSACTION_REPEATABLE_READ";
+ break;
+ case Connection.TRANSACTION_SERIALIZABLE:
+ name = "TRANSACTION_SERIALIZABLE";
+ break;
+ default:
+ name = "unknown";
+ break;
+ }
+ return String.format("%s (%d)", name, isolationLevel);
+ }
}