You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by re...@apache.org on 2015/06/16 16:03:21 UTC
svn commit: r1685840 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb:
RDBBlobStore.java RDBDocumentStore.java RDBJDBCTools.java
Author: reschke
Date: Tue Jun 16 14:03:21 2015
New Revision: 1685840
URL: http://svn.apache.org/r1685840
Log:
OAK-2995: RDB*Store: check transaction isolation level
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBJDBCTools.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java?rev=1685840&r1=1685839&r2=1685840&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java Tue Jun 16 14:03:21 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/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java?rev=1685840&r1=1685839&r2=1685840&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java Tue Jun 16 14:03:21 2015
@@ -822,6 +822,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());
@@ -869,7 +879,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/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBJDBCTools.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBJDBCTools.java?rev=1685840&r1=1685839&r2=1685840&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBJDBCTools.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBJDBCTools.java Tue Jun 16 14:03:21 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);
+ }
}