Author: vholani
Date: Tue Jun  2 11:05:04 2020
New Revision: 1878390

URL: http://svn.apache.org/viewvc?rev=1878390&view=rev
Log:
OAK-9096 : Getting {String or binary data would be truncated... } error as it 
is not handled cause error code for the same is updated recently in MSSQL. 
Fixed the same.

Merge from http://svn.apache.org/r1878387

Modified:
    
jackrabbit/oak/branches/1.22/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
    
jackrabbit/oak/branches/1.22/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStorePerformanceTest.java
    
jackrabbit/oak/branches/1.22/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreTest.java

Modified: 
jackrabbit/oak/branches/1.22/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.22/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java?rev=1878390&r1=1878389&r2=1878390&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.22/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
 (original)
+++ 
jackrabbit/oak/branches/1.22/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
 Tue Jun  2 11:05:04 2020
@@ -2127,7 +2127,8 @@ public class RDBDocumentStore implements
 
     private static void continueIfStringOverflow(SQLException ex) throws 
SQLException {
         String state = ex.getSQLState();
-        if ("22001".equals(state) /* everybody */|| ("72000".equals(state) && 
1489 == ex.getErrorCode()) /* Oracle */) {
+        if ("22001".equals(state) /* everybody */|| ("72000".equals(state) && 
1489 == ex.getErrorCode()) /* Oracle */
+                       || ("S0001".equals(state) && 2628 == ex.getErrorCode()) 
/* MSSQL update*/) {
             // ok
         } else {
             throw (ex);

Modified: 
jackrabbit/oak/branches/1.22/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStorePerformanceTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.22/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStorePerformanceTest.java?rev=1878390&r1=1878389&r2=1878390&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.22/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStorePerformanceTest.java
 (original)
+++ 
jackrabbit/oak/branches/1.22/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStorePerformanceTest.java
 Tue Jun  2 11:05:04 2020
@@ -192,7 +192,8 @@ public class RDBDocumentStorePerformance
                         // ex.printStackTrace();
                         String state = ex.getSQLState();
                         if ("22001".equals(state)
-                                /* everybody */ || ("72000".equals(state) && 
1489 == ex.getErrorCode()) /* Oracle */) {
+                                /* everybody */ || ("72000".equals(state) && 
1489 == ex.getErrorCode()) /* Oracle */
+                                || ("S0001".equals(state) && 2628 == 
ex.getErrorCode()) /* MSSQL update*/) {
                             // overflow
                             stmt = close(stmt);
                             connection.rollback();
@@ -239,6 +240,7 @@ public class RDBDocumentStorePerformance
                 }
             } catch (SQLException ex) {
                 LOG.error(ex.getMessage() + " " + ex.getSQLState() + " " + 
ex.getErrorCode(), ex);
+                throw(ex);
             } finally {
                 connection = close(connection);
             }

Modified: 
jackrabbit/oak/branches/1.22/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.22/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreTest.java?rev=1878390&r1=1878389&r2=1878390&view=diff
==============================================================================
--- 
jackrabbit/oak/branches/1.22/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreTest.java
 (original)
+++ 
jackrabbit/oak/branches/1.22/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStoreTest.java
 Tue Jun  2 11:05:04 2020
@@ -232,4 +232,23 @@ public class RDBDocumentStoreTest extend
             assertEquals(NUM_DOCS, ids.size());
         }
     }
+
+    @Test
+    public void testAppendStringColumnLimit() {
+        if (ds instanceof RDBDocumentStore) {
+            String id = this.getClass().getName() + 
".testAppendStringColumnLimit";
+            UpdateOp up = new UpdateOp(id, true);
+            assertTrue(ds.create(Collection.NODES, 
Collections.singletonList(up)));
+            removeMe.add(id);
+            int count = 1;
+            long duration = 1000;
+            long end = System.currentTimeMillis() + duration;
+            while (System.currentTimeMillis() < end) {
+                UpdateOp op = new UpdateOp(id, false);
+                String value = generateString(512, true);
+                op.set("foo-" + count++, value);
+                assertNotNull(ds.findAndUpdate(NODES, op));
+            }
+        }
+    }
 }


Reply via email to