RYA-414 Introduced the stateful mongo configuratino object so that it is the arbitor of MongoDB state within a Sail object.
Project: http://git-wip-us.apache.org/repos/asf/incubator-rya/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-rya/commit/767349da Tree: http://git-wip-us.apache.org/repos/asf/incubator-rya/tree/767349da Diff: http://git-wip-us.apache.org/repos/asf/incubator-rya/diff/767349da Branch: refs/heads/master Commit: 767349dac9822cd13e92f9b117d1b5d2dad13e3d Parents: 62de7c5 Author: kchilton2 <[email protected]> Authored: Fri Dec 22 20:52:27 2017 -0500 Committer: kchilton2 <[email protected]> Committed: Wed Dec 27 14:08:11 2017 -0500 ---------------------------------------------------------------------- .../AbstractMongoDBRdfConfigurationBuilder.java | 39 +- .../rya/mongodb/EmbeddedMongoFactory.java | 25 +- .../rya/mongodb/MongoConnectorFactory.java | 134 ---- .../apache/rya/mongodb/MongoDBQueryEngine.java | 48 +- .../rya/mongodb/MongoDBRdfConfiguration.java | 275 ++++--- .../org/apache/rya/mongodb/MongoDBRyaDAO.java | 71 +- .../StatefulMongoDBRdfConfiguration.java | 79 ++ .../mongodb/dao/MongoDBNamespaceManager.java | 20 +- .../dao/SimpleMongoDBNamespaceManager.java | 12 +- .../rya/mongodb/EmbeddedMongoSingleton.java | 55 +- .../rya/mongodb/MongoDBQueryEngineTest.java | 152 ++-- .../mongodb/MongoDBRdfConfigurationTest.java | 49 +- .../rya/mongodb/MongoDBRyaBatchWriterIT.java | 34 +- .../org/apache/rya/mongodb/MongoDBRyaDAOIT.java | 654 ++++++++-------- .../apache/rya/mongodb/MongoDBRyaDAOTest.java | 147 ++-- .../apache/rya/mongodb/MongoRyaTestBase.java | 73 -- .../org/apache/rya/mongodb/MongoTestBase.java | 36 +- .../src/test/resources/log4j.properties | 27 + .../indexing/entity/EntityIndexOptimizer.java | 5 + .../entity/update/mongo/MongoEntityIndexer.java | 31 +- .../indexing/mongodb/AbstractMongoIndexer.java | 36 +- .../rya/indexing/mongodb/MongoDbSmartUri.java | 19 +- .../matching/RyaQueryEngineFactory.java | 29 +- .../apache/rya/sail/config/RyaSailFactory.java | 167 ++++- .../rya/indexing/mongo/MongoEntityIndexIT.java | 183 +++-- .../mongo/MongoFreeTextIndexerTest.java | 58 +- .../mongo/MongoIndexingConfigurationTest.java | 8 +- .../mongo/MongoTemporalIndexerTest.java | 751 ++++++++++--------- .../metadata/MongoStatementMetadataIT.java | 97 ++- ...tatementMetadataExternalSetProviderTest.java | 20 +- .../StatementMetadataOptimizerTest.java | 16 +- .../src/main/java/InferenceExamples.java | 11 +- .../src/main/java/MongoRyaDirectExample.java | 2 - .../org/apache/rya/indexing/export/ITBase.java | 2 +- 34 files changed, 1769 insertions(+), 1596 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/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 f50bf9a..a2bd03f 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 @@ -59,11 +59,11 @@ public abstract class AbstractMongoDBRdfConfigurationBuilder<B extends AbstractM /** * Sets Mongo user. - * + * * @param user - user name used to connect to Mongo * @return specified builder for chaining method invocations */ - public B setMongoUser(String user) { + public B setMongoUser(final String user) { this.user = user; return confBuilder(); } @@ -71,11 +71,11 @@ public abstract class AbstractMongoDBRdfConfigurationBuilder<B extends AbstractM /** * Sets password for Mongo user specified by * {@link AbstractMongoDBRdfConfigurationBuilder#setMongoUser(String)}. - * + * * @param password - password used to connect to Mongo * @return specified builder for chaining method invocations */ - public B setMongoPassword(String password) { + public B setMongoPassword(final String password) { this.pass = password; return confBuilder(); } @@ -83,11 +83,11 @@ public abstract class AbstractMongoDBRdfConfigurationBuilder<B extends AbstractM /** * Sets Mongo port. This parameter must be set to connect to an instance of * MongoDB and will default to "27017" if no value is specified. - * + * * @param port - port used to connect Mongo * @return specified builder for chaining method invocations */ - public B setMongoPort(String port) { + public B setMongoPort(final String port) { this.port = port; return confBuilder(); } @@ -95,11 +95,11 @@ public abstract class AbstractMongoDBRdfConfigurationBuilder<B extends AbstractM /** * Sets Mongo host. This parameter must be set to connect to an instance of * MongoDB and will default to "localhost" if no value is specified. - * + * * @param host - host used to connect to Mongo * @return specified builder for chaining method invocations */ - public B setMongoHost(String host) { + public B setMongoHost(final String host) { this.host = host; return confBuilder(); } @@ -107,11 +107,11 @@ public abstract class AbstractMongoDBRdfConfigurationBuilder<B extends AbstractM /** * Sets MongoDB name. This parameter must be set to connect to an instance * of MongoDB and will default to "rya_triples" is no value is specified. - * + * * @param name - name of MongoDB to connect to * @return specified builder for chaining method invocations */ - public B setMongoDBName(String name) { + public B setMongoDBName(final String name) { this.mongoDBName = name; return confBuilder(); } @@ -120,11 +120,11 @@ public abstract class AbstractMongoDBRdfConfigurationBuilder<B extends AbstractM * Sets MongoDB Collection prefix. This parameter must be set to connect to * an instance of MongoDB and will default to "rya_" is no value is * specified. - * + * * @param name - name of Collection to connect to * @return specified builder for chaining method invocations */ - public B setMongoCollectionPrefix(String prefix) { + public B setMongoCollectionPrefix(final String prefix) { this.mongoCollectionPrefix = prefix; return confBuilder(); } @@ -132,11 +132,11 @@ public abstract class AbstractMongoDBRdfConfigurationBuilder<B extends AbstractM /** * Set whether to use instance of embedded Mongo as backend for Rya * instance. - * + * * @param useMock - indicates whether to use embedded Mongo as Rya backing * @return specified builder for chaining method invocations */ - public B setUseMockMongo(boolean useMock) { + public B setUseMockMongo(final boolean useMock) { this.useMock = useMock; return confBuilder(); } @@ -144,21 +144,22 @@ public abstract class AbstractMongoDBRdfConfigurationBuilder<B extends AbstractM /** * @return extension of {@link MongoDBRdfConfiguration} with specified parameters set */ + @Override public C build() { return getConf(super.build()); } /** * Assigns builder values to appropriate parameters within the {@link Configuration} object. - * + * * @param conf - Configuration object * @return - Configuration object with parameters set */ - private C getConf(C conf) { + private C getConf(final C conf) { conf.setUseMock(useMock); conf.set("sc.useMongo", "true"); - + if (user != null) { conf.setMongoUser(user); } @@ -166,9 +167,9 @@ public abstract class AbstractMongoDBRdfConfigurationBuilder<B extends AbstractM conf.setMongoPassword(pass); } conf.setMongoDBName(mongoDBName); - conf.setCollectionName(mongoCollectionPrefix); + conf.setRyaInstance(mongoCollectionPrefix); conf.setTablePrefix(mongoCollectionPrefix); - conf.setMongoInstance(host); + conf.setMongoHostname(host); conf.setMongoPort(port); return conf; http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/EmbeddedMongoFactory.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/EmbeddedMongoFactory.java b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/EmbeddedMongoFactory.java index f023739..d695ffa 100644 --- a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/EmbeddedMongoFactory.java +++ b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/EmbeddedMongoFactory.java @@ -6,9 +6,9 @@ * 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 @@ -46,7 +46,7 @@ public class EmbeddedMongoFactory { public static EmbeddedMongoFactory newFactory() throws IOException { return EmbeddedMongoFactory.with(Version.Main.PRODUCTION); } - + public static EmbeddedMongoFactory with(final IFeatureAwareVersion version) throws IOException { return new EmbeddedMongoFactory(version); } @@ -56,9 +56,9 @@ public class EmbeddedMongoFactory { /** * Create the testing utility using the specified version of MongoDB. - * + * * @param version - * version of MongoDB. + * - version of MongoDB. */ private EmbeddedMongoFactory(final IFeatureAwareVersion version) throws IOException { final MongodStarter runtime = MongodStarter.getInstance(new RuntimeConfigBuilder().defaultsWithLogger(Command.MongoD, logger).build()); @@ -67,7 +67,7 @@ public class EmbeddedMongoFactory { } private IMongodConfig newMongodConfig(final IFeatureAwareVersion version) throws UnknownHostException, IOException { - Net net = new Net(findRandomOpenPortOnAllLocalInterfaces(), false); + final Net net = new Net(findRandomOpenPortOnAllLocalInterfaces(), false); return new MongodConfigBuilder().version(version).net(net).build(); } @@ -79,7 +79,7 @@ public class EmbeddedMongoFactory { /** * Creates a new Mongo connection. - * + * * @throws MongoException * @throws UnknownHostException */ @@ -88,10 +88,19 @@ public class EmbeddedMongoFactory { } /** + * Gives access to the process configuration. + * + */ + public IMongodConfig getMongoServerDetails() { + return mongodProcess.getConfig(); + } + + + /** * Cleans up the resources created by the utility. */ public void shutdown() { mongodProcess.stop(); mongodExecutable.stop(); } -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoConnectorFactory.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoConnectorFactory.java b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoConnectorFactory.java deleted file mode 100644 index 50c3a52..0000000 --- a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoConnectorFactory.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * 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.mongodb; - -import java.io.IOException; -import java.util.Arrays; - -import org.apache.commons.configuration.ConfigurationRuntimeException; -import org.apache.commons.io.IOUtils; -import org.apache.hadoop.conf.Configuration; -import org.apache.http.annotation.ThreadSafe; - -import com.mongodb.MongoClient; -import com.mongodb.MongoCredential; -import com.mongodb.MongoException; -import com.mongodb.ServerAddress; - -import edu.umd.cs.findbugs.annotations.DefaultAnnotation; -import edu.umd.cs.findbugs.annotations.NonNull; -/** - * Mongo convention generally allows for a single instance of a {@link MongoClient} - * throughout the life cycle of an application. This MongoConnectorFactory lazy - * loads a Mongo Client and uses the same one whenever {@link MongoConnectorFactory#getMongoClient(Configuration)} - * is invoked. - */ -@ThreadSafe -@DefaultAnnotation(NonNull.class) -public class MongoConnectorFactory { - private static MongoClient mongoClient; - - private final static String MSG_INTRO = "Failed to connect to MongoDB: "; - - /** - * @param conf The {@link Configuration} defining how to construct the MongoClient. - * @return A {@link MongoClient}. This client is lazy loaded and the same one - * is used throughout the lifecycle of the application. - * @throws IOException - if MongodForTestsFactory constructor has an io exception. - * @throws ConfigurationRuntimeException - Thrown if the configured server, port, user, or others are missing. - * @throws MongoException if can't connect despite conf parameters are given - */ - public static synchronized MongoClient getMongoClient(final Configuration conf) - throws ConfigurationRuntimeException, MongoException { - if (mongoClient == null) { - if(conf instanceof MongoDBRdfConfiguration && ((MongoDBRdfConfiguration) conf).getMongoClient() != null) { - mongoClient = ((MongoDBRdfConfiguration) conf).getMongoClient(); - } else { - createMongoClientForServer(conf); - } - } - return mongoClient; - } - - /** - * Silently closes the underlying Mongo client. - */ - public static synchronized void closeMongoClient() { - IOUtils.closeQuietly(mongoClient); - mongoClient = null; - } - - /** - * Create a MongoDB client object and assign it to this class's static mongoClient - * @param conf configuration containing connection parameters - * @throws ConfigurationRuntimeException - Thrown if the configured server, port, user, or others are missing. - * @throws MongoException if can't connect despite conf parameters are given - */ - private static void createMongoClientForServer(final Configuration conf) - throws ConfigurationRuntimeException, MongoException { - // Connect to a running Mongo server - final String host = requireNonNull(conf.get(MongoDBRdfConfiguration.MONGO_INSTANCE), MSG_INTRO+"host name is required"); - final int port = requireNonNullInt(conf.get(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT), MSG_INTRO+"Port number is required."); - final ServerAddress server = new ServerAddress(host, port); - // check for authentication credentials - if (conf.get(MongoDBRdfConfiguration.MONGO_USER) != null) { - final String username = conf.get(MongoDBRdfConfiguration.MONGO_USER); - final String dbName = requireNonNull(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME), - MSG_INTRO + MongoDBRdfConfiguration.MONGO_DB_NAME + " is null but required configuration if " - + MongoDBRdfConfiguration.MONGO_USER + " is configured."); - final char[] pswd = requireNonNull(conf.get(MongoDBRdfConfiguration.MONGO_USER_PASSWORD), - MSG_INTRO + MongoDBRdfConfiguration.MONGO_USER_PASSWORD + " is null but required configuration if " - + MongoDBRdfConfiguration.MONGO_USER + " is configured.").toCharArray(); - final MongoCredential cred = MongoCredential.createCredential(username, dbName, pswd); - mongoClient = new MongoClient(server, Arrays.asList(cred)); - } else { - // No user was configured: - mongoClient = new MongoClient(server); - } - } - - /** - * Throw exception for un-configured required values. - * - * @param required String to check - * @param message throw configuration exception with this description - * @return unaltered required string - * @throws ConfigurationRuntimeException if required is null - */ - private static String requireNonNull(final String required, final String message) throws ConfigurationRuntimeException { - if (required == null) { - throw new ConfigurationRuntimeException(message); - } - return required; - } - - /* - * Same as above, check that it is a integer and return the parsed integer. - */ - private static int requireNonNullInt(final String required, final String message) throws ConfigurationRuntimeException { - if (required == null) { - throw new ConfigurationRuntimeException(message); - } - try { - return Integer.parseInt(required); - } catch (final NumberFormatException e) { - throw new ConfigurationRuntimeException(message); - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBQueryEngine.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBQueryEngine.java b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBQueryEngine.java index f1115b1..d107d43 100644 --- a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBQueryEngine.java +++ b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBQueryEngine.java @@ -1,5 +1,4 @@ -package org.apache.rya.mongodb; -/* +/** * 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 @@ -17,8 +16,7 @@ package org.apache.rya.mongodb; * specific language governing permissions and limitations * under the License. */ - -import static com.google.common.base.Preconditions.checkNotNull; +package org.apache.rya.mongodb; import java.io.IOException; import java.util.AbstractMap; @@ -47,7 +45,6 @@ import org.openrdf.query.impl.MapBindingSet; import com.google.common.base.Preconditions; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; @@ -57,48 +54,41 @@ import info.aduna.iteration.CloseableIteration; * Date: 7/17/12 * Time: 9:28 AM */ -public class MongoDBQueryEngine implements RyaQueryEngine<MongoDBRdfConfiguration> { - - private MongoDBRdfConfiguration configuration; - private final MongoClient mongoClient; - private final MongoDBStorageStrategy<RyaStatement> strategy; - - public MongoDBQueryEngine(final MongoDBRdfConfiguration conf, final MongoClient mongoClient) { - this.mongoClient = checkNotNull(mongoClient); - strategy = new SimpleMongoDBStorageStrategy(); - } +public class MongoDBQueryEngine implements RyaQueryEngine<StatefulMongoDBRdfConfiguration> { + private StatefulMongoDBRdfConfiguration configuration; + private final MongoDBStorageStrategy<RyaStatement> strategy = new SimpleMongoDBStorageStrategy(); @Override - public void setConf(final MongoDBRdfConfiguration conf) { + public void setConf(final StatefulMongoDBRdfConfiguration conf) { configuration = conf; } @Override - public MongoDBRdfConfiguration getConf() { + public StatefulMongoDBRdfConfiguration getConf() { return configuration; } @Override public CloseableIteration<RyaStatement, RyaDAOException> query( - final RyaStatement stmt, MongoDBRdfConfiguration conf) + final RyaStatement stmt, final StatefulMongoDBRdfConfiguration conf) throws RyaDAOException { Preconditions.checkNotNull(stmt); Preconditions.checkNotNull(conf); - - Entry<RyaStatement, BindingSet> entry = new AbstractMap.SimpleEntry<>(stmt, new MapBindingSet()); - Collection<Entry<RyaStatement, BindingSet>> collection = Collections.singleton(entry); - + + final Entry<RyaStatement, BindingSet> entry = new AbstractMap.SimpleEntry<>(stmt, new MapBindingSet()); + final Collection<Entry<RyaStatement, BindingSet>> collection = Collections.singleton(entry); + return new RyaStatementCursorIterator(queryWithBindingSet(collection, conf)); } @Override public CloseableIteration<? extends Entry<RyaStatement, BindingSet>, RyaDAOException> queryWithBindingSet( final Collection<Entry<RyaStatement, BindingSet>> stmts, - MongoDBRdfConfiguration conf) throws RyaDAOException { + final StatefulMongoDBRdfConfiguration conf) throws RyaDAOException { Preconditions.checkNotNull(stmts); Preconditions.checkNotNull(conf); - + final Multimap<RyaStatement, BindingSet> rangeMap = HashMultimap.create(); //TODO: cannot span multiple tables here @@ -121,7 +111,7 @@ public class MongoDBQueryEngine implements RyaQueryEngine<MongoDBRdfConfiguratio } @Override public CloseableIteration<RyaStatement, RyaDAOException> batchQuery( - final Collection<RyaStatement> stmts, MongoDBRdfConfiguration conf) + final Collection<RyaStatement> stmts, final StatefulMongoDBRdfConfiguration conf) throws RyaDAOException { final Map<RyaStatement, BindingSet> queries = new HashMap<>(); @@ -131,7 +121,7 @@ public class MongoDBQueryEngine implements RyaQueryEngine<MongoDBRdfConfiguratio return new RyaStatementCursorIterator(queryWithBindingSet(queries.entrySet(), conf)); } - + @Override public CloseableIterable<RyaStatement> query(final RyaQuery ryaQuery) throws RyaDAOException { @@ -151,12 +141,12 @@ public class MongoDBQueryEngine implements RyaQueryEngine<MongoDBRdfConfiguratio queries.put(stmt, new MapBindingSet()); } - Iterator<RyaStatement> iterator = new RyaStatementCursorIterator(queryWithBindingSet(queries.entrySet(), getConf())); + final Iterator<RyaStatement> iterator = new RyaStatementCursorIterator(queryWithBindingSet(queries.entrySet(), getConf())); return CloseableIterables.wrap((Iterable<RyaStatement>) () -> iterator); } - private MongoCollection<Document> getCollection(final MongoDBRdfConfiguration conf) { - final MongoDatabase db = mongoClient.getDatabase(conf.getMongoDBName()); + private MongoCollection<Document> getCollection(final StatefulMongoDBRdfConfiguration conf) { + final MongoDatabase db = conf.getMongoClient().getDatabase(conf.getMongoDBName()); return db.getCollection(conf.getTriplesCollectionName()); } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRdfConfiguration.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRdfConfiguration.java b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRdfConfiguration.java index 418a155..4d06ea1 100644 --- a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRdfConfiguration.java +++ b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRdfConfiguration.java @@ -1,6 +1,4 @@ -package org.apache.rya.mongodb; - -/* +/** * 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 @@ -18,72 +16,75 @@ package org.apache.rya.mongodb; * specific language governing permissions and limitations * under the License. */ +package org.apache.rya.mongodb; + +import static java.util.Objects.requireNonNull; -import java.util.List; import java.util.Properties; import org.apache.accumulo.core.security.Authorizations; import org.apache.hadoop.conf.Configuration; import org.apache.rya.api.RdfCloudTripleStoreConfiguration; -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; -import com.mongodb.MongoClient; +import edu.umd.cs.findbugs.annotations.Nullable; +/** + * A {@link RdfCloudTripleStoreConfiguration} that configures how Rya connects to a MongoDB Rya triple store. + */ public class MongoDBRdfConfiguration extends RdfCloudTripleStoreConfiguration { - public static final String MONGO_INSTANCE = "mongo.db.instance"; - public static final String MONGO_INSTANCE_PORT = "mongo.db.port"; - public static final String MONGO_GEO_MAXDISTANCE = "mongo.geo.maxdist"; + + // MongoDB Server connection values. + public static final String MONGO_HOSTNAME = "mongo.db.instance"; + public static final String MONGO_PORT = "mongo.db.port"; + + // MongoDB Database values. public static final String MONGO_DB_NAME = "mongo.db.name"; - public static final String MONGO_COLLECTION_PREFIX = "mongo.db.collectionprefix"; public static final String MONGO_USER = "mongo.db.user"; public static final String MONGO_USER_PASSWORD = "mongo.db.userpassword"; - public static final String CONF_ADDITIONAL_INDEXERS = "ac.additional.indexers"; + + // Rya Instance values. + public static final String MONGO_COLLECTION_PREFIX = "mongo.db.collectionprefix"; + + // Rya Sail configuration values. public static final String USE_MOCK_MONGO = ".useMockInstance"; public static final String CONF_FLUSH_EACH_UPDATE = "rya.mongodb.dao.flusheachupdate"; + public static final String CONF_ADDITIONAL_INDEXERS = "ac.additional.indexers"; + public static final String MONGO_GEO_MAXDISTANCE = "mongo.geo.maxdist"; - private MongoClient mongoClient; - + /** + * Constructs an empty instance of {@link MongoDBRdfConfiguration}. + */ public MongoDBRdfConfiguration() { super(); } + /** + * Constructs an instance of {@link MongoDBRdfConfiguration} pre-loaded with values. + * + * @param other - The values that will be cloned into the constructed object. (not null) + */ public MongoDBRdfConfiguration(final Configuration other) { - super(other); + super( requireNonNull(other) ); } /** - * Creates a MongoRdfConfiguration object from a Properties file. This - * method assumes that all values in the Properties file are Strings and - * that the Properties file uses the keys below. + * Reads a {@link Properties} object into a {@link MongoDBRdfConfiguration}. + * See {@link MongoDBRdfConfigurationBuilder#fromProperties(Properties)} for which keys + * are to be used within the properties object. This method will replace that object's keys + * with the configuration object's keys since they are not the same. * - * <br> - * <ul> - * <li>"mongo.auths" - String of Mongo authorizations. Empty auths used by default. - * <li>"mongo.visibilities" - String of Mongo visibilities assigned to ingested triples. - * <li>"mongo.user" - Mongo user. Empty by default. - * <li>"mongo.password" - Mongo password. Empty by default. - * <li>"mongo.host" - Mongo host. Default host is "localhost" - * <li>"mongo.port" - Mongo port. Default port is "27017". - * <li>"mongo.db.name" - Name of MongoDB. Default name is "rya_triples". - * <li>"mongo.collection.prefix" - Mongo collection prefix. Default is "rya_". - * <li>"mongo.rya.prefix" - Prefix for Mongo Rya instance. Same as value of "mongo.collection.prefix". - * <li>"use.mock" - Use a Embedded Mongo instance as back-end for Rya instance. False by default. - * <li>"use.display.plan" - Display query plan during evaluation. Useful for debugging. True by default. - * <li>"use.inference" - Use backward chaining inference during query. False by default. - * </ul> - * <br> - * - * @param props - * - Properties file containing Mongo specific configuration - * parameters - * @return MongoRdfConfiguration with properties set + * @param props - The properties containing Mongo specific configuration parameters. (not null) + * @return A {@link } loaded with the values that were in {@code props}. */ public static MongoDBRdfConfiguration fromProperties(final Properties props) { + requireNonNull(props); return MongoDBRdfConfigurationBuilder.fromProperties(props); } - public MongoDBRdfConfigurationBuilder getBuilder() { + /** + * @return A new instance of {@link MongoDBRdfConfigurationBuilder}. + */ + public static MongoDBRdfConfigurationBuilder getBuilder() { return new MongoDBRdfConfigurationBuilder(); } @@ -92,184 +93,162 @@ public class MongoDBRdfConfiguration extends RdfCloudTripleStoreConfiguration { return new MongoDBRdfConfiguration(this); } - public Authorizations getAuthorizations() { - final String[] auths = getAuths(); - if (auths == null || auths.length == 0) { - return MongoDbRdfConstants.ALL_AUTHORIZATIONS; - } - return new Authorizations(auths); - } - /** - * @return {@code true} if each statement added to the batch writer should - * be flushed and written right away to the datastore. {@code false} if the - * statements should be queued and written to the datastore when the queue - * is full or after enough time has passed without a write.<p> - * Defaults to {@code true} if nothing is specified. + * Set whether the Rya client should spin up an embedded MongoDB instance and connect to that + * or if it should connect to a MongoDB Server that is running somewhere. + * + * @param useMock - {@true} to use an embedded Mongo DB instance; {@code false} to connect to a real server. */ - public boolean flushEachUpdate(){ - return getBoolean(CONF_FLUSH_EACH_UPDATE, true); + public void setUseMock(final boolean useMock) { + this.setBoolean(USE_MOCK_MONGO, useMock); } /** - * Sets the {@link #CONF_FLUSH_EACH_UPDATE} property of the configuration. - * @param flush {@code true} if each statement added to the batch writer - * should be flushed and written right away to the datastore. {@code false} - * if the statements should be queued and written to the datastore when the - * queue is full or after enough time has passed without a write. + * Indicates whether the Rya client should spin up an embedded MongoDB instance and connect to that + * or if it should connect to a MongoDB Server that is running somewhere. + * + * @return {@true} to use an embedded Mongo DB instance; {@code false} to connect to a real server. */ - public void setFlush(final boolean flush){ - setBoolean(CONF_FLUSH_EACH_UPDATE, flush); + public boolean getUseMock() { + return getBoolean(USE_MOCK_MONGO, false); } /** - * @return name of Mongo Collection containing Rya triples + * @return The hostname of the MongoDB Server to connect to. (default: localhost) */ - public String getTriplesCollectionName() { - return this.get(MONGO_COLLECTION_PREFIX, "rya") + "_triples"; + public String getMongoHostname() { + return get(MONGO_HOSTNAME, "localhost"); } /** - * @return name of Mongo Collection + * @param hostname - The hostname of the MongoDB Server to connect to. */ - public String getCollectionName() { - return this.get(MONGO_COLLECTION_PREFIX, "rya"); + public void setMongoHostname(final String hostname) { + requireNonNull(hostname); + set(MONGO_HOSTNAME, hostname); } /** - * Sets Mongo Collection name - * @param name - name of Mongo Collection to connect to + * @return The port of the MongoDB Server to connect to. (default: 27017) */ - public void setCollectionName(final String name) { - Preconditions.checkNotNull(name); - this.set(MONGO_COLLECTION_PREFIX, name); + public String getMongoPort() { + return get(MONGO_PORT, AbstractMongoDBRdfConfigurationBuilder.DEFAULT_MONGO_PORT); } /** - * @return name of Mongo Host + * @param port - The port of the MongoDB Server to connect to. */ - public String getMongoInstance() { - return this.get(MONGO_INSTANCE, "localhost"); + public void setMongoPort(final String port) { + requireNonNull(port); + set(MONGO_PORT, port); } /** - * Sets name of Mongo Host - * @param name - name of Mongo Host to connect to + * @return The name of the MongoDB Database to connect to. (default: rya) */ - public void setMongoInstance(final String name) { - Preconditions.checkNotNull(name); - this.set(MONGO_INSTANCE, name); + public String getMongoDBName() { + return get(MONGO_DB_NAME, "rya"); } /** - * @return port that Mongo is running on + * @param database - The name of the MongoDb Database to connect to. */ - public String getMongoPort() { - return this.get(MONGO_INSTANCE_PORT, AbstractMongoDBRdfConfigurationBuilder.DEFAULT_MONGO_PORT); + public void setMongoDBName(final String database) { + requireNonNull(database); + set(MONGO_DB_NAME, database); } /** - * Sets port that Mongo will run on - * @param name - Mongo port to connect to + * @param user - The user used to connect to the MongoDB Database that hosts the Rya Instance. (not null) */ - public void setMongoPort(final String name) { - Preconditions.checkNotNull(name); - this.set(MONGO_INSTANCE_PORT, name); + public void setMongoUser(final String user) { + requireNonNull(user); + set(MONGO_USER, user); } /** - * @return name of MongoDB + * @return The user used to connect to the MongoDB Database that hosts the Rya Instance. */ - public String getMongoDBName() { - return this.get(MONGO_DB_NAME, "rya"); + public @Nullable String getMongoUser() { + return get(MONGO_USER); } /** - * Sets name of MongoDB - * @param name - name of MongoDB to connect to + * @param password - The password used to connect to the MongoDB Database that hosts the Rya Instance. */ - public void setMongoDBName(final String name) { - Preconditions.checkNotNull(name); - this.set(MONGO_DB_NAME, name); + public void setMongoPassword(final String password) { + requireNonNull(password); + set(MONGO_USER_PASSWORD, password); } /** - * Tells Rya to use an embedded Mongo instance as its backing - * if set to true. By default this is set to false. - * @param useMock + * @return The password used to connect to the MongoDB Database that hosts the Rya Instance. */ - public void setUseMock(final boolean useMock) { - this.setBoolean(USE_MOCK_MONGO, useMock); + public @Nullable String getMongoPassword() { + return get(MONGO_USER_PASSWORD); } /** - * Get whether an embedded Mongo is being used as the backing - * for Rya. - * @return true if embedded Mongo is being used, and false otherwise + * @return The name of the Rya instance to connect to. (default: rya) */ - public boolean getUseMock() { - return getBoolean(USE_MOCK_MONGO, false); + public String getRyaInstance() { + return get(MONGO_COLLECTION_PREFIX, "rya"); } /** - * @return name of NameSpace Mongo Collection + * @param name - The name of the Rya instance to connect to. */ - public String getNameSpacesCollectionName() { - return this.get(MONGO_COLLECTION_PREFIX, "rya") + "_ns"; + public void setRyaInstance(final String name) { + requireNonNull(name); + set(MONGO_COLLECTION_PREFIX, name); } /** - * Sets name of Mongo User - * @param user - name of Mongo user to connect to + * @return The name of the MongoDB Collection that contains Rya statements. (default: rya_triples) */ - public void setMongoUser(final String user) { - Preconditions.checkNotNull(user); - set(MONGO_USER, user); + public String getTriplesCollectionName() { + return getRyaInstance() + "_triples"; } /** - * @return name of Mongo user + * @return The name of the MongoDB Collection that contains the Rya namespace. (default: rya_ns) */ - public String getMongoUser() { - return get(MONGO_USER); + public String getNameSpacesCollectionName() { + return getRyaInstance() + "_ns"; } /** - * Sets Mongo password - * @param password - password to connect to Mongo + * @return The authorizations that will be used when accessing data. (default: empty) */ - public void setMongoPassword(final String password) { - Preconditions.checkNotNull(password); - set(MONGO_USER_PASSWORD, password); + public Authorizations getAuthorizations() { + final String[] auths = getAuths(); + if (auths == null || auths.length == 0) { + return MongoDbRdfConstants.ALL_AUTHORIZATIONS; + } + return new Authorizations(auths); } /** - * @return Mongo password + * Indicates whether each statement added to the batch writer should be flushed and written + * right away to the datastore or not. If this is turned off, then the statements will be + * queued and written to the datastore when the queue is full or after enough time has + * passed without a write. + * + * @return {@code true} if flushing after each updated is enabled; otherwise {@code false}. (default: true) */ - public String getMongoPassword() { - return get(MONGO_USER_PASSWORD); - } - - public void setAdditionalIndexers(final Class<? extends MongoSecondaryIndex>... indexers) { - final List<String> strs = Lists.newArrayList(); - for (final Class<?> ai : indexers){ - strs.add(ai.getName()); - } - - setStrings(CONF_ADDITIONAL_INDEXERS, strs.toArray(new String[]{})); - } - - public List<MongoSecondaryIndex> getAdditionalIndexers() { - return getInstances(CONF_ADDITIONAL_INDEXERS, MongoSecondaryIndex.class); - } - - public void setMongoClient(final MongoClient client) { - Preconditions.checkNotNull(client); - this.mongoClient = client; + public boolean flushEachUpdate(){ + return getBoolean(CONF_FLUSH_EACH_UPDATE, true); } - public MongoClient getMongoClient() { - return mongoClient; + /** + * Set whether each statement added to the batch writer should be flushed and written + * right away to the datastore or not. If this is turned off, then the statements will be + * queued and written to the datastore when the queue is full or after enough time has + * passed without a write. + * + * @param flush - {@code true} if flushing after each updated is enabled; otherwise {@code false}. + */ + public void setFlush(final boolean flush){ + setBoolean(CONF_FLUSH_EACH_UPDATE, flush); } - -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/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 d263b9c..01bbee7 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 @@ -1,6 +1,4 @@ -package org.apache.rya.mongodb; - -/* +/** * 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 @@ -18,10 +16,11 @@ package org.apache.rya.mongodb; * specific language governing permissions and limitations * under the License. */ +package org.apache.rya.mongodb; +import static java.util.Objects.requireNonNull; import java.io.IOException; -import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -57,13 +56,13 @@ import com.mongodb.MongoClient; /** * Default DAO for mongo backed RYA allowing for CRUD operations. */ -public final class MongoDBRyaDAO implements RyaDAO<MongoDBRdfConfiguration>{ +public final class MongoDBRyaDAO implements RyaDAO<StatefulMongoDBRdfConfiguration>{ private static final Logger log = Logger.getLogger(MongoDBRyaDAO.class); private boolean isInitialized = false; private boolean flushEachUpdate = true; - private MongoDBRdfConfiguration conf; - private final MongoClient mongoClient; + private StatefulMongoDBRdfConfiguration conf; + private MongoClient mongoClient; private DB db; private DBCollection coll; private MongoDBQueryEngine queryEngine; @@ -75,51 +74,24 @@ public final class MongoDBRyaDAO implements RyaDAO<MongoDBRdfConfiguration>{ private MongoDbBatchWriter<DBObject> mongoDbBatchWriter; - /** - * Creates a new instance of {@link MongoDBRyaDAO}. - * @param conf the {@link MongoDBRdfConfiguration}. - * @throws RyaDAOException - */ - public MongoDBRyaDAO(final MongoDBRdfConfiguration conf) throws RyaDAOException, NumberFormatException, UnknownHostException { - this(conf, MongoConnectorFactory.getMongoClient(conf)); - } - - /** - * Creates a new instance of {@link MongoDBRyaDAO}. - * @param conf the {@link MongoDBRdfConfiguration}. - * @param mongoClient the {@link MongoClient}. - * @throws RyaDAOException - */ - public MongoDBRyaDAO(final MongoDBRdfConfiguration conf, final MongoClient mongoClient) throws RyaDAOException { - this.conf = conf; - this.mongoClient = mongoClient; - conf.setMongoClient(mongoClient); - auths = conf.getAuthorizations(); - flushEachUpdate = conf.flushEachUpdate(); - init(); - } - @Override - public void setConf(final MongoDBRdfConfiguration conf) { - this.conf = conf; + public void setConf(final StatefulMongoDBRdfConfiguration conf) { + this.conf = requireNonNull(conf); + mongoClient = this.conf.getMongoClient(); auths = conf.getAuthorizations(); - } - - public MongoClient getMongoClient(){ - return mongoClient; + flushEachUpdate = conf.flushEachUpdate(); } public void setDB(final DB db) { this.db = db; } - public void setDBCollection(final DBCollection coll) { this.coll = coll; } @Override - public MongoDBRdfConfiguration getConf() { + public StatefulMongoDBRdfConfiguration getConf() { return conf; } @@ -131,13 +103,14 @@ public final class MongoDBRyaDAO implements RyaDAO<MongoDBRdfConfiguration>{ secondaryIndexers = conf.getAdditionalIndexers(); for(final MongoSecondaryIndex index: secondaryIndexers) { index.setConf(conf); - index.setClient(mongoClient); + index.setClient(conf.getMongoClient()); } db = mongoClient.getDB(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); coll = db.getCollection(conf.getTriplesCollectionName()); nameSpaceManager = new SimpleMongoDBNamespaceManager(db.getCollection(conf.getNameSpacesCollectionName())); - queryEngine = new MongoDBQueryEngine(conf, mongoClient); + queryEngine = new MongoDBQueryEngine(); + queryEngine.setConf(conf); storageStrategy = new SimpleMongoDBStorageStrategy(); storageStrategy.createIndices(coll); for(final MongoSecondaryIndex index: secondaryIndexers) { @@ -145,7 +118,7 @@ public final class MongoDBRyaDAO implements RyaDAO<MongoDBRdfConfiguration>{ } final MongoDbBatchWriterConfig mongoDbBatchWriterConfig = MongoDbBatchWriterUtils.getMongoDbBatchWriterConfig(conf); - mongoDbBatchWriter = new MongoDbBatchWriter<DBObject>(new DbCollectionType(coll), mongoDbBatchWriterConfig); + mongoDbBatchWriter = new MongoDbBatchWriter<>(new DbCollectionType(coll), mongoDbBatchWriterConfig); try { mongoDbBatchWriter.start(); } catch (final MongoDbBatchWriterException e) { @@ -217,7 +190,7 @@ public final class MongoDBRyaDAO implements RyaDAO<MongoDBRdfConfiguration>{ @Override public void add(final Iterator<RyaStatement> statementIter) throws RyaDAOException { - final List<DBObject> dbInserts = new ArrayList<DBObject>(); + final List<DBObject> dbInserts = new ArrayList<>(); while (statementIter.hasNext()){ final RyaStatement ryaStatement = statementIter.next(); final boolean canAdd = DocumentVisibilityUtil.doesUserHaveDocumentAccess(auths, ryaStatement.getColumnVisibility()); @@ -247,7 +220,7 @@ public final class MongoDBRyaDAO implements RyaDAO<MongoDBRdfConfiguration>{ } @Override - public void delete(final RyaStatement statement, final MongoDBRdfConfiguration conf) + public void delete(final RyaStatement statement, final StatefulMongoDBRdfConfiguration conf) throws RyaDAOException { final boolean canDelete = DocumentVisibilityUtil.doesUserHaveDocumentAccess(auths, statement.getColumnVisibility()); if (canDelete) { @@ -266,14 +239,14 @@ public final class MongoDBRyaDAO implements RyaDAO<MongoDBRdfConfiguration>{ } @Override - public void dropGraph(final MongoDBRdfConfiguration conf, final RyaURI... graphs) + public void dropGraph(final StatefulMongoDBRdfConfiguration conf, final RyaURI... graphs) throws RyaDAOException { } @Override public void delete(final Iterator<RyaStatement> statements, - final MongoDBRdfConfiguration conf) throws RyaDAOException { + final StatefulMongoDBRdfConfiguration conf) throws RyaDAOException { while (statements.hasNext()){ final RyaStatement ryaStatement = statements.next(); final boolean canDelete = DocumentVisibilityUtil.doesUserHaveDocumentAccess(auths, ryaStatement.getColumnVisibility()); @@ -298,12 +271,12 @@ public final class MongoDBRyaDAO implements RyaDAO<MongoDBRdfConfiguration>{ } @Override - public RyaQueryEngine<MongoDBRdfConfiguration> getQueryEngine() { + public RyaQueryEngine<StatefulMongoDBRdfConfiguration> getQueryEngine() { return queryEngine; } @Override - public RyaNamespaceManager<MongoDBRdfConfiguration> getNamespaceManager() { + public RyaNamespaceManager<StatefulMongoDBRdfConfiguration> getNamespaceManager() { return nameSpaceManager; } @@ -336,4 +309,4 @@ public final class MongoDBRyaDAO implements RyaDAO<MongoDBRdfConfiguration>{ } } } -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/StatefulMongoDBRdfConfiguration.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/StatefulMongoDBRdfConfiguration.java b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/StatefulMongoDBRdfConfiguration.java new file mode 100644 index 0000000..1263166 --- /dev/null +++ b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/StatefulMongoDBRdfConfiguration.java @@ -0,0 +1,79 @@ +/** + * 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.mongodb; + +import static java.util.Objects.requireNonNull; + +import java.util.List; + +import org.apache.hadoop.conf.Configuration; + +import com.mongodb.MongoClient; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; + +/** + * A {@link MongoDBRdfConfiguration} that is used to hold onto state that is pass into Rya components that accept + * {@link Configuration} objects. + * </p> + * HACK: + * This class is part of a hack to get around how Rya uses reflection to initialize indexers, optimizers, etc. + * Those classes have empty constructors, so they are not able to receive Mongo specific components at construction + * time. However, they all receive a {@link Configuration} prior to initialization. If an object of this class + * is that configuration object, then shared objects may be passed into the constructed components. + */ +@DefaultAnnotation(NonNull.class) +public class StatefulMongoDBRdfConfiguration extends MongoDBRdfConfiguration { + + private final MongoClient mongoClient; + private final List<MongoSecondaryIndex> indexers; + // TODO optimizers? They're causing problems because they aren't getting this configuration object + // like the indexers do. + + /** + * Constructs an instance of {@link StatefulMongoDBRdfConfiguration} pre-loaded with values. + * + * @param other - The values that will be cloned into the constructed object. (not null) + * @param mongoClient - The {@link MongoClient} that Rya will use. (not null) + * @param indexers - The {@link MongoSecondaryIndex}s that Rya will use. (not null) + */ + public StatefulMongoDBRdfConfiguration( + final Configuration other, + final MongoClient mongoClient, + final List<MongoSecondaryIndex> indexers) { + super(other); + this.mongoClient = requireNonNull(mongoClient); + this.indexers = requireNonNull(indexers); + } + + /** + * @return The {@link MongoClient} that Rya will use. + */ + public MongoClient getMongoClient() { + return mongoClient; + } + + /** + * @return The {@link MongoSecondaryIndex}s that Rya will use. + */ + public List<MongoSecondaryIndex> getAdditionalIndexers() { + return indexers; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/dao/MongoDBNamespaceManager.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/dao/MongoDBNamespaceManager.java b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/dao/MongoDBNamespaceManager.java index 1d86ce4..24d47ee 100644 --- a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/dao/MongoDBNamespaceManager.java +++ b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/dao/MongoDBNamespaceManager.java @@ -1,6 +1,4 @@ -package org.apache.rya.mongodb.dao; - -/* +/** * 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 @@ -8,9 +6,9 @@ package org.apache.rya.mongodb.dao; * 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 @@ -18,18 +16,14 @@ package org.apache.rya.mongodb.dao; * specific language governing permissions and limitations * under the License. */ +package org.apache.rya.mongodb.dao; - -import org.apache.rya.api.domain.RyaStatement; import org.apache.rya.api.persist.RyaNamespaceManager; -import org.apache.rya.api.persist.query.RyaQuery; -import org.apache.rya.mongodb.MongoDBRdfConfiguration; +import org.apache.rya.mongodb.StatefulMongoDBRdfConfiguration; import com.mongodb.DBCollection; -import com.mongodb.DBObject; -public interface MongoDBNamespaceManager extends RyaNamespaceManager<MongoDBRdfConfiguration>{ +public interface MongoDBNamespaceManager extends RyaNamespaceManager<StatefulMongoDBRdfConfiguration>{ public void createIndices(DBCollection coll); - -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/dao/SimpleMongoDBNamespaceManager.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/dao/SimpleMongoDBNamespaceManager.java b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/dao/SimpleMongoDBNamespaceManager.java index 6956f49..88fa2b5 100644 --- a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/dao/SimpleMongoDBNamespaceManager.java +++ b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/dao/SimpleMongoDBNamespaceManager.java @@ -25,7 +25,7 @@ import java.util.Map; import org.apache.commons.codec.binary.Hex; import org.apache.rya.api.persist.RyaDAOException; -import org.apache.rya.mongodb.MongoDBRdfConfiguration; +import org.apache.rya.mongodb.StatefulMongoDBRdfConfiguration; import org.openrdf.model.Namespace; import com.mongodb.BasicDBObject; @@ -109,7 +109,7 @@ public class SimpleMongoDBNamespaceManager implements MongoDBNamespaceManager { private static final String ID = "_id"; private static final String PREFIX = "prefix"; private static final String NAMESPACE = "namespace"; - private MongoDBRdfConfiguration conf; + private StatefulMongoDBRdfConfiguration conf; private final DBCollection nsColl; @@ -123,15 +123,13 @@ public class SimpleMongoDBNamespaceManager implements MongoDBNamespaceManager { coll.createIndex(NAMESPACE); } - @Override - public void setConf(final MongoDBRdfConfiguration paramC) { - this.conf = paramC; + public void setConf(final StatefulMongoDBRdfConfiguration conf) { + this.conf = conf; } @Override - public MongoDBRdfConfiguration getConf() { - // TODO Auto-generated method stub + public StatefulMongoDBRdfConfiguration getConf() { return conf; } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/EmbeddedMongoSingleton.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/EmbeddedMongoSingleton.java b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/EmbeddedMongoSingleton.java index e068405..a481ccf 100644 --- a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/EmbeddedMongoSingleton.java +++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/EmbeddedMongoSingleton.java @@ -19,11 +19,15 @@ package org.apache.rya.mongodb; import java.io.IOException; +import java.net.UnknownHostException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.mongodb.MongoClient; +import com.mongodb.MongoException; + +import de.flapdoodle.embed.mongo.config.IMongodConfig; /** * To be used for tests. Creates a singleton {@link MongoClient} to be used @@ -31,8 +35,27 @@ import com.mongodb.MongoClient; * embedded mongo factory ends up orphaning processes, consuming resources. */ public class EmbeddedMongoSingleton { - public static MongoClient getInstance() { - return InstanceHolder.SINGLETON.instance; + + public static MongoClient getNewMongoClient() throws UnknownHostException, MongoException { + final MongoClient client = InstanceHolder.SINGLETON.factory.newMongoClient(); + + Runtime.getRuntime().addShutdownHook(new Thread() { + @Override + public void run() { + try { + client.close(); + } catch (final Throwable t) { + // logging frameworks will likely be shut down + t.printStackTrace(System.err); + } + } + }); + + return client; + } + + public static IMongodConfig getMongodConfig() { + return InstanceHolder.SINGLETON.mongodConfig; } private EmbeddedMongoSingleton() { @@ -44,32 +67,14 @@ public class EmbeddedMongoSingleton { SINGLETON; private final Logger log; - private MongoClient instance; + private IMongodConfig mongodConfig; + private EmbeddedMongoFactory factory; InstanceHolder() { log = LoggerFactory.getLogger(EmbeddedMongoSingleton.class); - instance = null; try { - instance = EmbeddedMongoFactory.newFactory().newMongoClient(); - // JUnit does not have an overall lifecycle event for tearing down - // this kind of resource, but shutdown hooks work alright in practice - // since this should only be used during testing - - // The only other alternative for lifecycle management is to use a - // suite lifecycle to enclose the tests that need this resource. - // In practice this becomes unwieldy. - Runtime.getRuntime().addShutdownHook(new Thread() { - @Override - public void run() { - try { - instance.close(); - } catch (final Throwable t) { - // logging frameworks will likely be shut down - t.printStackTrace(System.err); - } - } - }); - + factory = EmbeddedMongoFactory.newFactory(); + mongodConfig = factory.getMongoServerDetails(); } catch (final IOException e) { log.error("Unexpected error while starting mongo client", e); } catch (final Throwable e) { @@ -79,4 +84,4 @@ public class EmbeddedMongoSingleton { } } } -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java index a8f2d88..f7235a6 100644 --- a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java +++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java @@ -1,5 +1,25 @@ +/* +* * 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.mongodb; +import static org.junit.Assert.assertEquals; + /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -27,38 +47,18 @@ import org.apache.rya.api.RdfCloudTripleStoreUtils; import org.apache.rya.api.domain.RyaStatement; import org.apache.rya.api.domain.RyaStatement.RyaStatementBuilder; import org.apache.rya.api.domain.RyaURI; -import org.junit.Assert; -import org.junit.Before; import org.junit.Test; import org.openrdf.model.impl.URIImpl; import org.openrdf.query.BindingSet; import org.openrdf.query.impl.MapBindingSet; import com.google.common.collect.Lists; -import com.mongodb.MongoClient; import info.aduna.iteration.CloseableIteration; - +/** + * Integration tests the methods of {@link MongoDBQueryEngine}. + */ public class MongoDBQueryEngineTest extends MongoTestBase { - private MongoClient client; - private MongoDBRyaDAO dao; - - private MongoDBQueryEngine engine; - - private static final String DB_NAME = "testInstance"; - - @Before - public void setUp() throws Exception { - client = super.getMongoClient(); - conf.setAuths("A", "B", "C"); - - engine = new MongoDBQueryEngine(conf, client); - - // Add Data - final MongoDBRyaDAO dao = new MongoDBRyaDAO(conf, client); - dao.add(getStatement("u:a", "u:tt", "u:b")); - dao.add(getStatement("u:a", "u:tt", "u:c")); - } private RyaStatement getStatement(final String s, final String p, final String o) { final RyaStatementBuilder builder = new RyaStatementBuilder(); @@ -85,59 +85,101 @@ public class MongoDBQueryEngineTest extends MongoTestBase { @Test public void statementQuery() throws Exception { - final RyaStatement s = getStatement("u:a", null, null); - Assert.assertEquals(2, size(engine.query(s, conf))); + final MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try(final MongoDBQueryEngine engine =new MongoDBQueryEngine()) { + engine.setConf(conf); + + // Add data. + dao.setConf(conf); + dao.init(); + dao.add(getStatement("u:a", "u:tt", "u:b")); + dao.add(getStatement("u:a", "u:tt", "u:c")); + + final RyaStatement s = getStatement("u:a", null, null); + assertEquals(2, size(engine.query(s, conf))); + } finally { + dao.destroy(); + } } @SuppressWarnings("unchecked") @Test public void batchbindingSetsQuery() throws Exception { - final RyaStatement s1 = getStatement(null, null, "u:b"); + final MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try(final MongoDBQueryEngine engine =new MongoDBQueryEngine()) { + engine.setConf(conf); - final MapBindingSet bs1 = new MapBindingSet(); - bs1.addBinding("foo", new URIImpl("u:x")); + // Add data. + dao.setConf(conf); + dao.init(); + dao.add(getStatement("u:a", "u:tt", "u:b")); + dao.add(getStatement("u:a", "u:tt", "u:c")); - final Map.Entry<RyaStatement, BindingSet> e1 = new RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s1, bs1); - final Collection<Entry<RyaStatement, BindingSet>> stmts1 = Lists.newArrayList(e1); - Assert.assertEquals(1, size(engine.queryWithBindingSet(stmts1, conf))); + // Run the test. + final RyaStatement s1 = getStatement(null, null, "u:b"); + final MapBindingSet bs1 = new MapBindingSet(); + bs1.addBinding("foo", new URIImpl("u:x")); - final MapBindingSet bs2 = new MapBindingSet(); - bs2.addBinding("foo", new URIImpl("u:y")); + final Map.Entry<RyaStatement, BindingSet> e1 = new RdfCloudTripleStoreUtils.CustomEntry<>(s1, bs1); + final Collection<Entry<RyaStatement, BindingSet>> stmts1 = Lists.newArrayList(e1); + assertEquals(1, size(engine.queryWithBindingSet(stmts1, conf))); - final RyaStatement s2 = getStatement(null, null, "u:c"); - final Map.Entry<RyaStatement, BindingSet> e2 = new RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s2, bs2); + final MapBindingSet bs2 = new MapBindingSet(); + bs2.addBinding("foo", new URIImpl("u:y")); - final Collection<Entry<RyaStatement, BindingSet>> stmts2 = Lists.newArrayList(e1, e2); - Assert.assertEquals(2, size(engine.queryWithBindingSet(stmts2, conf))); + final RyaStatement s2 = getStatement(null, null, "u:c"); + final Map.Entry<RyaStatement, BindingSet> e2 = new RdfCloudTripleStoreUtils.CustomEntry<>(s2, bs2); - final Map.Entry<RyaStatement, BindingSet> e3 = new RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s2, bs1); - final Map.Entry<RyaStatement, BindingSet> e4 = new RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s1, bs2); + final Collection<Entry<RyaStatement, BindingSet>> stmts2 = Lists.newArrayList(e1, e2); + assertEquals(2, size(engine.queryWithBindingSet(stmts2, conf))); + + + final Map.Entry<RyaStatement, BindingSet> e3 = new RdfCloudTripleStoreUtils.CustomEntry<>(s2, bs1); + final Map.Entry<RyaStatement, BindingSet> e4 = new RdfCloudTripleStoreUtils.CustomEntry<>(s1, bs2); + + final Collection<Entry<RyaStatement, BindingSet>> stmts3 = Lists.newArrayList(e1, e2, e3, e4); + assertEquals(4, size(engine.queryWithBindingSet(stmts3, conf))); + } finally { + dao.destroy(); + } + } - final Collection<Entry<RyaStatement, BindingSet>> stmts3 = Lists.newArrayList(e1, e2, e3, e4); - Assert.assertEquals(4, size(engine.queryWithBindingSet(stmts3, conf))); -} @SuppressWarnings("unchecked") @Test public void bindingSetsQuery() throws Exception { - final RyaStatement s = getStatement("u:a", null, null); + final MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try(final MongoDBQueryEngine engine =new MongoDBQueryEngine()) { + engine.setConf(conf); - final MapBindingSet bs1 = new MapBindingSet(); - bs1.addBinding("foo", new URIImpl("u:x")); + // Add data. + dao.setConf(conf); + dao.init(); + dao.add(getStatement("u:a", "u:tt", "u:b")); + dao.add(getStatement("u:a", "u:tt", "u:c")); - final Map.Entry<RyaStatement, BindingSet> e1 = new RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s, bs1); - final Collection<Entry<RyaStatement, BindingSet>> stmts1 = Lists.newArrayList(e1); - Assert.assertEquals(2, size(engine.queryWithBindingSet(stmts1, conf))); + // Run the test. + final RyaStatement s = getStatement("u:a", null, null); + final MapBindingSet bs1 = new MapBindingSet(); + bs1.addBinding("foo", new URIImpl("u:x")); - final MapBindingSet bs2 = new MapBindingSet(); - bs2.addBinding("foo", new URIImpl("u:y")); + final Map.Entry<RyaStatement, BindingSet> e1 = new RdfCloudTripleStoreUtils.CustomEntry<>(s, bs1); + final Collection<Entry<RyaStatement, BindingSet>> stmts1 = Lists.newArrayList(e1); + assertEquals(2, size(engine.queryWithBindingSet(stmts1, conf))); - final Map.Entry<RyaStatement, BindingSet> e2 = new RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s, bs2); - final Collection<Entry<RyaStatement, BindingSet>> stmts2 = Lists.newArrayList(e1, e2); - Assert.assertEquals(4, size(engine.queryWithBindingSet(stmts2, conf))); -} -} + final MapBindingSet bs2 = new MapBindingSet(); + bs2.addBinding("foo", new URIImpl("u:y")); + + final Map.Entry<RyaStatement, BindingSet> e2 = new RdfCloudTripleStoreUtils.CustomEntry<>(s, bs2); + + final Collection<Entry<RyaStatement, BindingSet>> stmts2 = Lists.newArrayList(e1, e2); + assertEquals(4, size(engine.queryWithBindingSet(stmts2, conf))); + } finally { + dao.destroy(); + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRdfConfigurationTest.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRdfConfigurationTest.java b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRdfConfigurationTest.java index c047fde..2d28bb5 100644 --- a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRdfConfigurationTest.java +++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRdfConfigurationTest.java @@ -33,16 +33,16 @@ public class MongoDBRdfConfigurationTest { @Test public void testBuilder() { - String prefix = "prefix_"; - String auth = "U,V,W"; - String visibility = "U,W"; - String user = "user"; - String password = "password"; - boolean useMock = true; - boolean useInference = true; - boolean displayPlan = false; + final String prefix = "prefix_"; + final String auth = "U,V,W"; + final String visibility = "U,W"; + final String user = "user"; + final String password = "password"; + final boolean useMock = true; + final boolean useInference = true; + final boolean displayPlan = false; - MongoDBRdfConfiguration conf = new MongoDBRdfConfiguration().getBuilder() + final MongoDBRdfConfiguration conf = new MongoDBRdfConfiguration().getBuilder() .setVisibilities(visibility) .setUseInference(useInference) .setDisplayQueryPlan(displayPlan) @@ -60,11 +60,11 @@ public class MongoDBRdfConfigurationTest { assertEquals(conf.getCv(), visibility); assertEquals(conf.isInfer(), useInference); assertEquals(conf.isDisplayQueryPlan(), displayPlan); - assertEquals(conf.getMongoInstance(), "host"); + assertEquals(conf.getMongoHostname(), "host"); assertEquals(conf.getBoolean(".useMockInstance", false), useMock); assertEquals(conf.getMongoPort(), "1000"); assertEquals(conf.getMongoDBName(), "dbname"); - assertEquals(conf.getCollectionName(), "prefix_"); + assertEquals(conf.getRyaInstance(), "prefix_"); assertEquals(conf.get(MongoDBRdfConfiguration.MONGO_USER), user); assertEquals(conf.get(MongoDBRdfConfiguration.MONGO_USER_PASSWORD), password); @@ -72,32 +72,31 @@ public class MongoDBRdfConfigurationTest { @Test public void testBuilderFromProperties() throws FileNotFoundException, IOException { - String prefix = "prefix_"; - String auth = "U"; - String visibility = "U"; - String user = "user"; - String password = "password"; - boolean useMock = true; - boolean useInference = true; - boolean displayPlan = false; + final String prefix = "prefix_"; + final String auth = "U"; + final String visibility = "U"; + final String user = "user"; + final String password = "password"; + final boolean useMock = true; + final boolean useInference = true; + final boolean displayPlan = false; - Properties props = new Properties(); + final Properties props = new Properties(); props.load(new FileInputStream("src/test/resources/rya.properties")); - MongoDBRdfConfiguration conf = MongoDBRdfConfiguration.fromProperties(props); + final MongoDBRdfConfiguration conf = MongoDBRdfConfiguration.fromProperties(props); assertEquals(conf.getTablePrefix(), prefix); assertTrue(Arrays.equals(conf.getAuths(), new String[] { auth })); assertEquals(conf.getCv(), visibility); assertEquals(conf.isInfer(), useInference); assertEquals(conf.isDisplayQueryPlan(), displayPlan); - assertEquals(conf.getMongoInstance(), "host"); + assertEquals(conf.getMongoHostname(), "host"); assertEquals(conf.getBoolean(".useMockInstance", false), useMock); assertEquals(conf.getMongoPort(), "1000"); assertEquals(conf.getMongoDBName(), "dbname"); - assertEquals(conf.getCollectionName(), "prefix_"); + assertEquals(conf.getRyaInstance(), "prefix_"); assertEquals(conf.get(MongoDBRdfConfiguration.MONGO_USER), user); assertEquals(conf.get(MongoDBRdfConfiguration.MONGO_USER_PASSWORD), password); } - -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaBatchWriterIT.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaBatchWriterIT.java b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaBatchWriterIT.java index 68bbc27..afd7308 100644 --- a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaBatchWriterIT.java +++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaBatchWriterIT.java @@ -18,6 +18,8 @@ */ package org.apache.rya.mongodb; +import static org.junit.Assert.assertEquals; + import java.util.ArrayList; import java.util.List; @@ -33,20 +35,16 @@ import org.apache.rya.mongodb.batch.collection.MongoCollectionType; import org.apache.rya.mongodb.dao.MongoDBStorageStrategy; import org.apache.rya.mongodb.dao.SimpleMongoDBStorageStrategy; import org.bson.Document; -import org.junit.Assert; -import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import com.google.common.collect.Lists; import com.mongodb.DBObject; -import com.mongodb.MongoClient; /** * Integration tests for the {@link MongoDbBatchWriter}. */ public class MongoDBRyaBatchWriterIT extends MongoTestBase { - private MongoDBRyaDAO dao; private static void setupLogging() { BasicConfigurator.configure(); @@ -57,14 +55,11 @@ public class MongoDBRyaBatchWriterIT extends MongoTestBase { setupLogging(); } - @Before - public void setUp() throws Exception { + @Override + protected void updateConfiguration(final MongoDBRdfConfiguration conf) { conf.setBoolean("rya.mongodb.dao.flusheachupdate", false); conf.setInt("rya.mongodb.dao.batchwriter.size", 50_000); conf.setLong("rya.mongodb.dao.batchwriter.flushtime", 100L); - - final MongoClient client = super.getMongoClient(); - dao = new MongoDBRyaDAO(conf, client); } @Test @@ -81,11 +76,18 @@ public class MongoDBRyaBatchWriterIT extends MongoTestBase { statements.add(statement(1)); statements.add(statement(6)); - dao.add(statements.iterator()); + final MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); - dao.flush(); + dao.add(statements.iterator()); + dao.flush(); - Assert.assertEquals(6, getRyaCollection().count()); + assertEquals(6, getRyaCollection().count()); + } finally { + dao.destroy(); + } } @Test @@ -104,7 +106,7 @@ public class MongoDBRyaBatchWriterIT extends MongoTestBase { final DbCollectionType collectionType = new DbCollectionType(getRyaDbCollection()); final MongoDbBatchWriterConfig mongoDbBatchWriterConfig = MongoDbBatchWriterUtils.getMongoDbBatchWriterConfig(conf); - final MongoDbBatchWriter<DBObject> mongoDbBatchWriter = new MongoDbBatchWriter<DBObject>(collectionType, mongoDbBatchWriterConfig); + final MongoDbBatchWriter<DBObject> mongoDbBatchWriter = new MongoDbBatchWriter<>(collectionType, mongoDbBatchWriterConfig); mongoDbBatchWriter.start(); mongoDbBatchWriter.addObjectsToQueue(objects); @@ -114,7 +116,7 @@ public class MongoDBRyaBatchWriterIT extends MongoTestBase { mongoDbBatchWriter.flush(); Thread.sleep(1_000); mongoDbBatchWriter.shutdown(); - Assert.assertEquals(4, getRyaDbCollection().count()); + assertEquals(4, getRyaDbCollection().count()); } @Test @@ -133,7 +135,7 @@ public class MongoDBRyaBatchWriterIT extends MongoTestBase { final MongoCollectionType mongoCollectionType = new MongoCollectionType(getRyaCollection()); final MongoDbBatchWriterConfig mongoDbBatchWriterConfig = MongoDbBatchWriterUtils.getMongoDbBatchWriterConfig(conf); - final MongoDbBatchWriter<Document> mongoDbBatchWriter = new MongoDbBatchWriter<Document>(mongoCollectionType, mongoDbBatchWriterConfig); + final MongoDbBatchWriter<Document> mongoDbBatchWriter = new MongoDbBatchWriter<>(mongoCollectionType, mongoDbBatchWriterConfig); mongoDbBatchWriter.start(); mongoDbBatchWriter.addObjectsToQueue(documents); @@ -143,7 +145,7 @@ public class MongoDBRyaBatchWriterIT extends MongoTestBase { mongoDbBatchWriter.flush(); Thread.sleep(1_000); mongoDbBatchWriter.shutdown(); - Assert.assertEquals(4, getRyaCollection().count()); + assertEquals(4, getRyaCollection().count()); } private static Document toDocument(final DBObject dbObject) {
