RYA-413 Fixed how MongoDBRyaDAO closed its internal mongoClient. Updated 
AbstractMongoDBRdfConfigurationBuilder config tags. Closes #263.


Project: http://git-wip-us.apache.org/repos/asf/incubator-rya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rya/commit/6ec8cd2a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rya/tree/6ec8cd2a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rya/diff/6ec8cd2a

Branch: refs/heads/master
Commit: 6ec8cd2aa7b5d8ce7631ee095336b5cf58eb99dc
Parents: d0146ce
Author: eric.white <[email protected]>
Authored: Fri Jan 5 11:38:48 2018 -0500
Committer: caleb <[email protected]>
Committed: Wed Jan 17 15:40:25 2018 -0500

----------------------------------------------------------------------
 .../AbstractMongoDBRdfConfigurationBuilder.java |  26 ++--
 .../org/apache/rya/mongodb/MongoDBRyaDAO.java   |   3 -
 .../apache/rya/mongodb/MongoDBRyaDAO2IT.java    |  65 ++++++++
 .../org/apache/rya/mongodb/MongoDBRyaDAOIT.java |  61 ++++++++
 .../sail/config/RyaMongoDbSailFactoryTest.java  | 149 +++++++++++++++++++
 5 files changed, 288 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6ec8cd2a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/AbstractMongoDBRdfConfigurationBuilder.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/AbstractMongoDBRdfConfigurationBuilder.java
 
b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/AbstractMongoDBRdfConfigurationBuilder.java
index 369f7a0..8afcb42 100644
--- 
a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/AbstractMongoDBRdfConfigurationBuilder.java
+++ 
b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/AbstractMongoDBRdfConfigurationBuilder.java
@@ -40,23 +40,23 @@ public abstract class 
AbstractMongoDBRdfConfigurationBuilder<B extends AbstractM
     private boolean useMock = false;
     private String host = "localhost";
     private String port = DEFAULT_MONGO_PORT;
-    protected static final String DEFAULT_MONGO_PORT = "27017";
+    public static final String DEFAULT_MONGO_PORT = "27017";
     private String mongoCollectionPrefix = "rya_";
     private String mongoDBName = "rya";
     private boolean usePipeline = false;
 
-    protected static final String MONGO_USER = "mongo.user";
-    protected static final String MONGO_PASSWORD = "mongo.password";
-    protected static final String MONGO_DB_NAME = "mongo.db.name";
-    protected static final String MONGO_COLLECTION_PREFIX = 
"mongo.collection.prefix";
-    protected static final String MONGO_HOST = "mongo.host";
-    protected static final String MONGO_PORT = "mongo.port";
-    protected static final String MONGO_AUTHS = "mongo.auths";
-    protected static final String MONGO_VISIBILITIES = "mongo.visibilities";
-    protected static final String MONGO_RYA_PREFIX = "mongo.rya.prefix";
-    protected static final String USE_INFERENCE = "use.inference";
-    protected static final String USE_DISPLAY_QUERY_PLAN = "use.display.plan";
-    protected static final String USE_MOCK_MONGO = "use.mock";
+    public static final String MONGO_USER = "mongo.user";
+    public static final String MONGO_PASSWORD = "mongo.password";
+    public static final String MONGO_DB_NAME = "mongo.db.name";
+    public static final String MONGO_COLLECTION_PREFIX = 
"mongo.collection.prefix";
+    public static final String MONGO_HOST = "mongo.host";
+    public static final String MONGO_PORT = "mongo.port";
+    public static final String MONGO_AUTHS = "mongo.auths";
+    public static final String MONGO_VISIBILITIES = "mongo.visibilities";
+    public static final String MONGO_RYA_PREFIX = "mongo.rya.prefix";
+    public static final String USE_INFERENCE = "use.inference";
+    public static final String USE_DISPLAY_QUERY_PLAN = "use.display.plan";
+    public static final String USE_MOCK_MONGO = "use.mock";
 
     /**
      * Sets Mongo user.

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6ec8cd2a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java 
b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java
index 75e33d1..d01c2d7 100644
--- a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java
+++ b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java
@@ -152,9 +152,6 @@ public final class MongoDBRyaDAO implements 
RyaDAO<StatefulMongoDBRdfConfigurati
                 log.error("Error closing indexer: " + 
indexer.getClass().getSimpleName(), e);
             }
         }
-        if (mongoClient != null) {
-            mongoClient.close();
-        }
 
         IOUtils.closeQuietly(queryEngine);
     }

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6ec8cd2a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAO2IT.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAO2IT.java 
b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAO2IT.java
index f2d24ad..67002d7 100644
--- a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAO2IT.java
+++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAO2IT.java
@@ -18,7 +18,10 @@
  */
 package org.apache.rya.mongodb;
 
+import static 
org.apache.rya.mongodb.dao.SimpleMongoDBStorageStrategy.DOCUMENT_VISIBILITY;
+import static 
org.apache.rya.mongodb.dao.SimpleMongoDBStorageStrategy.TIMESTAMP;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
 
@@ -26,6 +29,7 @@ import org.apache.rya.api.domain.RyaStatement;
 import org.apache.rya.api.domain.RyaStatement.RyaStatementBuilder;
 import org.apache.rya.api.domain.RyaURI;
 import org.apache.rya.api.persist.RyaDAOException;
+import org.apache.rya.mongodb.document.visibility.DocumentVisibility;
 import org.bson.Document;
 import org.junit.Test;
 
@@ -135,4 +139,65 @@ public class MongoDBRyaDAO2IT extends MongoITBase {
             dao.destroy();
         }
     }
+
+    @Test
+    public void testReconstructDao() throws RyaDAOException, IOException {
+        MongoDBRyaDAO dao = new MongoDBRyaDAO();
+        try {
+            dao.setConf(conf);
+            dao.init();
+
+            final RyaStatementBuilder builder = new RyaStatementBuilder();
+            builder.setPredicate(new RyaURI("http://temp.com";));
+            builder.setSubject(new RyaURI("http://subject.com";));
+            builder.setObject(new RyaURI("http://object.com";));
+            builder.setColumnVisibility(new DocumentVisibility("B").flatten());
+
+            final MongoDatabase db = 
conf.getMongoClient().getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+            final MongoCollection<Document> coll = 
db.getCollection(conf.getTriplesCollectionName());
+
+            dao.add(builder.build());
+
+            assertEquals(coll.count(), 1);
+
+            final Document dbo = coll.find().first();
+            assertTrue(dbo.containsKey(DOCUMENT_VISIBILITY));
+            assertTrue(dbo.containsKey(TIMESTAMP));
+        }  finally {
+            dao.destroy();
+        }
+
+        // Test reinitializing the same instance
+        try {
+            dao.init();
+        } finally {
+            dao.destroy();
+        }
+
+        // Reconstruct new DAO and try again
+        dao = new MongoDBRyaDAO();
+        try {
+            dao.setConf(conf);
+            dao.init();
+
+            final RyaStatementBuilder builder = new RyaStatementBuilder();
+            builder.setPredicate(new RyaURI("http://temp.com";));
+            builder.setSubject(new RyaURI("http://subject.com";));
+            builder.setObject(new RyaURI("http://object.com";));
+            builder.setColumnVisibility(new DocumentVisibility("B").flatten());
+
+            final MongoDatabase db = 
conf.getMongoClient().getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+            final MongoCollection<Document> coll = 
db.getCollection(conf.getTriplesCollectionName());
+
+            dao.add(builder.build());
+
+            assertEquals(coll.count(), 1);
+
+            final Document dbo = coll.find().first();
+            assertTrue(dbo.containsKey(DOCUMENT_VISIBILITY));
+            assertTrue(dbo.containsKey(TIMESTAMP));
+        }  finally {
+            dao.destroy();
+        }
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6ec8cd2a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java 
b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java
index a05393c..c5ff223 100644
--- a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java
+++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java
@@ -154,6 +154,67 @@ public class MongoDBRyaDAOIT extends MongoITBase {
     }
 
     @Test
+    public void testReconstructDao() throws RyaDAOException, IOException {
+        MongoDBRyaDAO dao = new MongoDBRyaDAO();
+        try {
+            dao.setConf(conf);
+            dao.init();
+
+            final RyaStatementBuilder builder = new RyaStatementBuilder();
+            builder.setPredicate(new RyaURI("http://temp.com";));
+            builder.setSubject(new RyaURI("http://subject.com";));
+            builder.setObject(new RyaURI("http://object.com";));
+            builder.setColumnVisibility(new DocumentVisibility("B").flatten());
+
+            final MongoDatabase db = 
conf.getMongoClient().getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+            final MongoCollection<Document> coll = 
db.getCollection(conf.getTriplesCollectionName());
+
+            dao.add(builder.build());
+
+            assertEquals(coll.count(), 1);
+
+            final Document dbo = coll.find().first();
+            assertTrue(dbo.containsKey(DOCUMENT_VISIBILITY));
+            assertTrue(dbo.containsKey(TIMESTAMP));
+        }  finally {
+            dao.destroy();
+        }
+
+        // Test reinitializing the same instance
+        try {
+            dao.init();
+        } finally {
+            dao.destroy();
+        }
+
+        // Reconstruct new DAO and try again
+        dao = new MongoDBRyaDAO();
+        try {
+            dao.setConf(conf);
+            dao.init();
+
+            final RyaStatementBuilder builder = new RyaStatementBuilder();
+            builder.setPredicate(new RyaURI("http://temp.com";));
+            builder.setSubject(new RyaURI("http://subject.com";));
+            builder.setObject(new RyaURI("http://object.com";));
+            builder.setColumnVisibility(new DocumentVisibility("B").flatten());
+
+            final MongoDatabase db = 
conf.getMongoClient().getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+            final MongoCollection<Document> coll = 
db.getCollection(conf.getTriplesCollectionName());
+
+            dao.add(builder.build());
+
+            assertEquals(coll.count(), 1);
+
+            final Document dbo = coll.find().first();
+            assertTrue(dbo.containsKey(DOCUMENT_VISIBILITY));
+            assertTrue(dbo.containsKey(TIMESTAMP));
+        }  finally {
+            dao.destroy();
+        }
+    }
+
+    @Test
     public void testVisibility() throws RyaDAOException, MongoException, 
IOException {
         final MongoDBRyaDAO dao = new MongoDBRyaDAO();
         try {

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/6ec8cd2a/extras/indexing/src/test/java/org/apache/rya/sail/config/RyaMongoDbSailFactoryTest.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/sail/config/RyaMongoDbSailFactoryTest.java
 
b/extras/indexing/src/test/java/org/apache/rya/sail/config/RyaMongoDbSailFactoryTest.java
new file mode 100644
index 0000000..6cfd4ea
--- /dev/null
+++ 
b/extras/indexing/src/test/java/org/apache/rya/sail/config/RyaMongoDbSailFactoryTest.java
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.rya.sail.config;
+
+import static org.junit.Assert.assertFalse;
+
+import org.apache.rya.mongodb.MongoITBase;
+import org.junit.Assert;
+import org.junit.Test;
+import org.openrdf.model.Statement;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.repository.sail.SailRepository;
+import org.openrdf.repository.sail.SailRepositoryConnection;
+import org.openrdf.sail.Sail;
+
+/**
+ * Tests {@link RyaSailFactory} with a MongoDB backend.
+ */
+public class RyaMongoDbSailFactoryTest extends MongoITBase {
+    @Test
+    public void testCreateMongoDbSail() throws Exception {
+        Sail sail = null;
+        SailRepository repo = null;
+        SailRepositoryConnection conn = null;
+        try {
+            sail = RyaSailFactory.getInstance(conf);
+            repo = new SailRepository(sail);
+            conn = repo.getConnection();
+        } finally {
+            if (conn != null) {
+                conn.close();
+            }
+            if (repo != null) {
+                repo.shutDown();
+            }
+            if (sail != null) {
+                sail.shutDown();
+            }
+        }
+    }
+
+    @Test
+    public void testAddStatement() throws Exception {
+        Sail sail = null;
+        SailRepository repo = null;
+        SailRepositoryConnection conn = null;
+        try {
+            sail = RyaSailFactory.getInstance(conf);
+            repo = new SailRepository(sail);
+            conn = repo.getConnection();
+
+            final ValueFactory vf = conn.getValueFactory();
+            final Statement s = vf.createStatement(vf.createURI("u:a"), 
vf.createURI("u:b"), vf.createURI("u:c"));
+
+            assertFalse(conn.hasStatement(s, false));
+
+            conn.add(s);
+
+            Assert.assertTrue(conn.hasStatement(s, false));
+        } finally {
+            if (conn != null) {
+                conn.close();
+            }
+            if (repo != null) {
+                repo.shutDown();
+            }
+            if (sail != null) {
+                sail.shutDown();
+            }
+        }
+    }
+
+    @Test
+    public void testReuseSail() throws Exception {
+        Sail sail = null;
+        SailRepository repo = null;
+        SailRepositoryConnection conn = null;
+        try {
+            sail = RyaSailFactory.getInstance(conf);
+            repo = new SailRepository(sail);
+            conn = repo.getConnection();
+
+            final ValueFactory vf = conn.getValueFactory();
+            final Statement s = vf.createStatement(vf.createURI("u:a"), 
vf.createURI("u:b"), vf.createURI("u:c"));
+
+            assertFalse(conn.hasStatement(s, false));
+
+            conn.add(s);
+
+            Assert.assertTrue(conn.hasStatement(s, false));
+
+            conn.remove(s);
+
+            Assert.assertFalse(conn.hasStatement(s, false));
+        } finally {
+            if (conn != null) {
+                conn.close();
+            }
+            if (repo != null) {
+                repo.shutDown();
+            }
+            if (sail != null) {
+                sail.shutDown();
+            }
+        }
+
+        // Reuse Sail after shutdown
+        try {
+            sail = RyaSailFactory.getInstance(conf);
+            repo = new SailRepository(sail);
+            conn = repo.getConnection();
+
+            final ValueFactory vf = conn.getValueFactory();
+            final Statement s = vf.createStatement(vf.createURI("u:a"), 
vf.createURI("u:b"), vf.createURI("u:c"));
+
+            assertFalse(conn.hasStatement(s, false));
+
+            conn.add(s);
+
+            Assert.assertTrue(conn.hasStatement(s, false));
+        } finally {
+            if (conn != null) {
+                conn.close();
+            }
+            if (repo != null) {
+                repo.shutDown();
+            }
+            if (sail != null) {
+                sail.shutDown();
+            }
+        }
+    }
+}
\ No newline at end of file

Reply via email to