Author: catholicon
Date: Sat Mar  9 21:42:18 2019
New Revision: 1855130

URL: http://svn.apache.org/viewvc?rev=1855130&view=rev
Log:
OAK-8121: RDBExport should handle db2 dump where del files refers to lob files 
without offset and length params

Modified:
    
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBExport.java

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBExport.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBExport.java?rev=1855130&r1=1855129&r2=1855130&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBExport.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBExport.java
 Sat Mar  9 21:42:18 2019
@@ -42,6 +42,7 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.oak.commons.json.JsopBuilder;
 import org.apache.jackrabbit.oak.plugins.document.Collection;
@@ -203,20 +204,28 @@ public class RDBExport {
             byte[] bytes = null;
             if (sbdata.length() != 0) {
                 String lobfile = sbdata.replace("/", "");
-                int lastdot = lobfile.lastIndexOf('.');
-                String length = lobfile.substring(lastdot + 1);
-                lobfile = lobfile.substring(0, lastdot);
-                lastdot = lobfile.lastIndexOf('.');
-                String startpos = lobfile.substring(lastdot + 1);
-                lobfile = lobfile.substring(0, lastdot);
-                int s = Integer.valueOf(startpos);
-                int l = Integer.valueOf(length);
-                File lf = new File(lobDirectory, lobfile);
-                InputStream is = new FileInputStream(lf);
-                bytes = new byte[l];
-                IOUtils.skip(is, s);
-                IOUtils.read(is, bytes, 0, l);
-                IOUtils.closeQuietly(is);
+
+                if (!lobfile.endsWith(".lob")) {
+                    int lastdot = lobfile.lastIndexOf('.');
+                    String length = lobfile.substring(lastdot + 1);
+                    lobfile = lobfile.substring(0, lastdot);
+                    lastdot = lobfile.lastIndexOf('.');
+                    String startpos = lobfile.substring(lastdot + 1);
+                    lobfile = lobfile.substring(0, lastdot);
+
+                    System.err.println("lastdot: " + lastdot + "; length: " + 
length + "; lobfile: " + lobfile + "; lastdot: " + lastdot + "; startpos: " + 
startpos);
+                    int s = Integer.valueOf(startpos);
+                    int l = Integer.valueOf(length);
+                    File lf = new File(lobDirectory, lobfile);
+                    InputStream is = new FileInputStream(lf);
+                    bytes = new byte[l];
+                    IOUtils.skip(is, s);
+                    IOUtils.read(is, bytes, 0, l);
+                    IOUtils.closeQuietly(is);
+                } else {
+                    File lf = new File(lobDirectory, lobfile);
+                    bytes = FileUtils.readFileToByteArray(lf);
+                }
             }
             try {
                 RDBRow row = new RDBRow(id, "1".equals(shasbinary) ? 1L : 0L, 
"1".equals(sdeletedonce),
@@ -235,6 +244,9 @@ public class RDBExport {
                 }
             } catch (DocumentStoreException ex) {
                 System.err.println("Error: skipping line for ID " + id + " 
because of " + ex.getMessage());
+            } catch (Exception e) {
+                System.err.println("Error reading fields: " + fields);
+                throw e;
             }
             line = br.readLine();
         }


Reply via email to