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 2014/05/22 12:06:44 UTC

svn commit: r1596796 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.java

Author: reschke
Date: Thu May 22 10:06:44 2014
New Revision: 1596796

URL: http://svn.apache.org/r1596796
Log:
OAK-1851 - fix RDBBlobStore read cache

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBBlobStore.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=1596796&r1=1596795&r2=1596796&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 Thu May 22 10:06:44 2014
@@ -217,24 +217,27 @@ public class RDBBlobStore extends Cachin
 
         String id = StringUtils.convertBytesToHex(blockId.getDigest());
         byte[] data = cache.get(id);
-        Connection con = getConnection();
 
-        try {
-            PreparedStatement prep = con.prepareStatement("select data from datastore_data where id = ?");
+        if (data == null) {
+            Connection con = getConnection();
+
             try {
-                prep.setString(1, id);
-                ResultSet rs = prep.executeQuery();
-                if (!rs.next()) {
-                    throw new IOException("Datastore block " + id + " not found");
+                PreparedStatement prep = con.prepareStatement("select data from datastore_data where id = ?");
+                try {
+                    prep.setString(1, id);
+                    ResultSet rs = prep.executeQuery();
+                    if (!rs.next()) {
+                        throw new IOException("Datastore block " + id + " not found");
+                    }
+                    data = rs.getBytes(1);
+                } finally {
+                    prep.close();
                 }
-                data = rs.getBytes(1);
+                cache.put(id, data);
             } finally {
-                prep.close();
+                con.commit();
+                con.close();
             }
-            cache.put(id, data);
-        } finally {
-            con.commit();
-            con.close();
         }
         // System.out.println("    read block " + id + " blockLen: " +
         // data.length + " [0]: " + data[0]);