Author: mreutegg
Date: Thu Jan 11 12:30:43 2018
New Revision: 1820871

URL: http://svn.apache.org/viewvc?rev=1820871&view=rev
Log:
OAK-7139: Wrap MongoException when query fails

Modified:
    
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
    
jackrabbit/oak/trunk/oak-store-document/src/test/java/com/mongodb/OakFongo.java
    
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDBExceptionTest.java

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java?rev=1820871&r1=1820870&r2=1820871&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
 Thu Jan 11 12:30:43 2018
@@ -490,7 +490,7 @@ public class MongoDocumentStore implemen
         } catch (RuntimeException e) {
             t = e;
         }
-        throw new DocumentStoreException("Failed to load document with " + 
key, t);
+        throw handleException(t, collection, key);
     }
 
     /**
@@ -526,7 +526,7 @@ public class MongoDocumentStore implemen
             }
         }
         if (ex != null) {
-            throw ex;
+            throw handleException(ex, collection, key);
         } else {
             // impossible to get here
             throw new IllegalStateException();
@@ -581,19 +581,23 @@ public class MongoDocumentStore implemen
                                               String indexedProperty,
                                               long startValue,
                                               int limit) {
-        return queryInternal(collection, fromKey, toKey, indexedProperty,
-                startValue, limit, maxQueryTimeMS);
+        try {
+            return queryInternal(collection, fromKey, toKey, indexedProperty,
+                    startValue, limit, maxQueryTimeMS);
+        } catch (MongoException e) {
+            throw handleException(e, collection, Lists.newArrayList(fromKey, 
toKey));
+        }
     }
 
     @SuppressWarnings("unchecked")
     @Nonnull
-    <T extends Document> List<T> queryInternal(Collection<T> collection,
-                                                       String fromKey,
-                                                       String toKey,
-                                                       String indexedProperty,
-                                                       long startValue,
-                                                       int limit,
-                                                       long maxQueryTime) {
+    protected <T extends Document> List<T> queryInternal(Collection<T> 
collection,
+                                                         String fromKey,
+                                                         String toKey,
+                                                         String 
indexedProperty,
+                                                         long startValue,
+                                                         int limit,
+                                                         long maxQueryTime) {
         log("query", fromKey, toKey, indexedProperty, startValue, limit);
         DBCollection dbCollection = getDBCollection(collection);
         QueryBuilder queryBuilder = QueryBuilder.start(Document.ID);
@@ -1700,7 +1704,7 @@ public class MongoDocumentStore implemen
         }
     }
 
-    private <T extends Document> DocumentStoreException 
handleException(Exception ex,
+    private <T extends Document> DocumentStoreException 
handleException(Throwable ex,
                                                                         
Collection<T> collection,
                                                                         
Iterable<String> ids) {
         if (collection == Collection.NODES) {
@@ -1711,7 +1715,7 @@ public class MongoDocumentStore implemen
         return DocumentStoreException.convert(ex, ids);
     }
 
-    private <T extends Document> DocumentStoreException 
handleException(Exception ex,
+    private <T extends Document> DocumentStoreException 
handleException(Throwable ex,
                                                                         
Collection<T> collection,
                                                                         String 
id) {
         return handleException(ex, collection, Collections.singleton(id));

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/test/java/com/mongodb/OakFongo.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/com/mongodb/OakFongo.java?rev=1820871&r1=1820870&r2=1820871&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/test/java/com/mongodb/OakFongo.java 
(original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/test/java/com/mongodb/OakFongo.java 
Thu Jan 11 12:30:43 2018
@@ -88,6 +88,10 @@ public class OakFongo extends Fongo {
                                                    List<?> writeRequests,
                                                    WriteConcern aWriteConcern) 
{}
 
+    protected void beforeFind(DBObject query, DBObject projection) {}
+
+    protected void afterFind(DBCursor cursor) {}
+
     protected void afterExecuteBulkWriteOperation(BulkWriteResult result) {}
     private class OakFongoDB extends FongoDB {
 
@@ -206,5 +210,13 @@ public class OakFongo extends Fongo {
             afterExecuteBulkWriteOperation(result);
             return result;
         }
+
+        @Override
+        public DBCursor find(DBObject query, DBObject projection) {
+            beforeFind(query, projection);
+            DBCursor result = super.find(query, projection);
+            afterFind(result);
+            return result;
+        }
     }
 }

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDBExceptionTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDBExceptionTest.java?rev=1820871&r1=1820870&r2=1820871&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDBExceptionTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDBExceptionTest.java
 Thu Jan 11 12:30:43 2018
@@ -35,6 +35,8 @@ import org.junit.Before;
 import org.junit.Test;
 
 import static java.util.Collections.singletonList;
+import static org.hamcrest.Matchers.containsString;
+import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -76,6 +78,11 @@ public class MongoDBExceptionTest {
                 maybeThrow();
             }
 
+            @Override
+            protected void beforeFind(DBObject query, DBObject projection) {
+                maybeThrow();
+            }
+
             private void maybeThrow() {
                 if (exceptionMsg != null) {
                     throw new MongoException(exceptionMsg);
@@ -124,5 +131,29 @@ public class MongoDBExceptionTest {
             assertTrue("Exception message does not contain id: '" + 
e.getMessage() + "'",
                     e.getMessage().contains(id));
         }
+
+        exceptionMsg = "find failed";
+        try {
+            store.find(Collection.NODES, id);
+            fail("DocumentStoreException expected");
+        } catch (DocumentStoreException e) {
+            assertThat(e.getMessage(), containsString(exceptionMsg));
+            assertTrue("Exception message does not contain id: '" + 
e.getMessage() + "'",
+                    e.getMessage().contains(id));
+        }
+
+        String fromKey = Utils.getKeyLowerLimit("/foo");
+        String toKey = Utils.getKeyUpperLimit("/foo");
+        exceptionMsg = "query failed";
+        try {
+            store.query(Collection.NODES, fromKey, toKey, 100);
+            fail("DocumentStoreException expected");
+        } catch (DocumentStoreException e) {
+            assertThat(e.getMessage(), containsString(exceptionMsg));
+            assertTrue("Exception message does not contain id: '" + 
e.getMessage() + "'",
+                    e.getMessage().contains(fromKey));
+            assertTrue("Exception message does not contain id: '" + 
e.getMessage() + "'",
+                    e.getMessage().contains(toKey));
+        }
     }
 }


Reply via email to