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);
+    }
 }