RYA-104 Updated the RyaClient to optionally include features that are required for the Accumulo Client, but not the Mongo Client.
Project: http://git-wip-us.apache.org/repos/asf/incubator-rya/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-rya/commit/e60da4c3 Tree: http://git-wip-us.apache.org/repos/asf/incubator-rya/tree/e60da4c3 Diff: http://git-wip-us.apache.org/repos/asf/incubator-rya/diff/e60da4c3 Branch: refs/heads/master Commit: e60da4c3fc589e3e65a22d4c3d7cb75c72eb631f Parents: 33a0486 Author: kchilton2 <kevin.e.chil...@gmail.com> Authored: Wed Dec 13 18:14:40 2017 -0500 Committer: kchilton2 <kevin.e.chil...@gmail.com> Committed: Fri Jan 5 16:48:40 2018 -0500 ---------------------------------------------------------------------- .../java/org/apache/rya/api/client/Install.java | 4 +- .../org/apache/rya/api/client/RyaClient.java | 68 +++---- .../accumulo/AccumuloRyaClientFactory.java | 18 +- .../rya/api/client/mongo/MongoCommand.java | 11 +- .../client/mongo/MongoConnectionDetails.java | 87 +++++---- .../rya/api/client/mongo/MongoCreatePCJ.java | 58 ------ .../rya/api/client/mongo/MongoDeletePCJ.java | 51 ----- .../client/mongo/MongoExecuteSparqlQuery.java | 56 ++++++ .../client/mongo/MongoGetInstanceDetails.java | 7 +- .../rya/api/client/mongo/MongoInstall.java | 101 +++++----- .../api/client/mongo/MongoInstanceExists.java | 13 +- .../api/client/mongo/MongoListInstances.java | 18 +- .../api/client/mongo/MongoRyaClientFactory.java | 40 ++-- .../rya/api/client/mongo/MongoUninstall.java | 13 +- .../api/client/accumulo/AccumuloAddUserIT.java | 18 +- .../accumulo/AccumuloBatchUpdatePCJIT.java | 2 +- .../client/accumulo/AccumuloRemoveUserIT.java | 18 +- .../client/mongo/MongoExecuteSparqlQueryIT.java | 26 +++ .../client/mongo/MongoGetInstanceDetailsIT.java | 28 +-- .../rya/api/client/mongo/MongoInstallIT.java | 65 +++---- .../api/client/mongo/MongoInstanceExistsIT.java | 22 +-- .../api/client/mongo/MongoListInstancesIT.java | 12 +- .../client/mongo/MongoLoadStatementsFileIT.java | 190 +++++++++---------- .../api/client/mongo/MongoLoadStatementsIT.java | 26 +++ .../rya/api/client/mongo/MongoUninstallIT.java | 25 +-- .../periodic/KafkaLatencyBenchmark.java | 4 +- .../benchmark/query/QueryBenchmarkRunIT.java | 2 +- .../pcj/fluo/integration/CreateDeleteIT.java | 2 +- .../indexing/pcj/fluo/integration/QueryIT.java | 178 ++++++++--------- .../pcj/fluo/visibility/PcjVisibilityIT.java | 2 +- .../pcj/fluo/test/base/KafkaExportITBase.java | 4 +- .../pcj/functions/geo/GeoFunctionsIT.java | 2 +- .../org/apache/rya/shell/RyaAdminCommands.java | 36 ++-- .../apache/rya/shell/RyaAdminCommandsTest.java | 22 +-- 34 files changed, 614 insertions(+), 615 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/common/rya.api/src/main/java/org/apache/rya/api/client/Install.java ---------------------------------------------------------------------- diff --git a/common/rya.api/src/main/java/org/apache/rya/api/client/Install.java b/common/rya.api/src/main/java/org/apache/rya/api/client/Install.java index fd754ea..a716b6d 100644 --- a/common/rya.api/src/main/java/org/apache/rya/api/client/Install.java +++ b/common/rya.api/src/main/java/org/apache/rya/api/client/Install.java @@ -38,13 +38,13 @@ public interface Install { /** * Install a new instance of Rya. * - * @param instanceName - Indicates the name of the Rya instance to install. (not null) + * @param ryaInstanceName - Indicates the name of the Rya instance to install. (not null) * @param installConfig - Configures how the Rya instance will operate. The * instance name that is in this variable must match the {@code instanceName}. (not null) * @throws DuplicateInstanceNameException A Rya instance already exists for the provided name. * @throws RyaClientException Something caused the command to fail. */ - public void install(final String instanceName, final InstallConfiguration installConfig) throws DuplicateInstanceNameException, RyaClientException; + public void install(final String ryaInstanceName, final InstallConfiguration installConfig) throws DuplicateInstanceNameException, RyaClientException; /** * A Rya instance already exists for the provided name. http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/common/rya.api/src/main/java/org/apache/rya/api/client/RyaClient.java ---------------------------------------------------------------------- diff --git a/common/rya.api/src/main/java/org/apache/rya/api/client/RyaClient.java b/common/rya.api/src/main/java/org/apache/rya/api/client/RyaClient.java index 0a55edb..de0b542 100644 --- a/common/rya.api/src/main/java/org/apache/rya/api/client/RyaClient.java +++ b/common/rya.api/src/main/java/org/apache/rya/api/client/RyaClient.java @@ -20,6 +20,8 @@ package org.apache.rya.api.client; import static java.util.Objects.requireNonNull; +import java.util.Optional; + import edu.umd.cs.findbugs.annotations.DefaultAnnotation; import edu.umd.cs.findbugs.annotations.NonNull; import net.jcip.annotations.Immutable; @@ -32,17 +34,17 @@ import net.jcip.annotations.Immutable; public class RyaClient { // Administrative functions. private final Install install; - private final CreatePCJ createPcj; - private final DeletePCJ deletePcj; - private final CreatePeriodicPCJ createPeriodicPcj; - private final DeletePeriodicPCJ deletePeriodicPcj; - private final ListIncrementalQueries listIncrementalQueries; - private final BatchUpdatePCJ bactchUpdatePCJ; + private final Optional<CreatePCJ> createPcj; + private final Optional<DeletePCJ> deletePcj; + private final Optional<CreatePeriodicPCJ> createPeriodicPcj; + private final Optional<DeletePeriodicPCJ> deletePeriodicPcj; + private final Optional<ListIncrementalQueries> listIncrementalQueries; + private final Optional<BatchUpdatePCJ> bactchUpdatePCJ; private final GetInstanceDetails getInstanceDetails; private final InstanceExists instanceExists; private final ListInstances listInstances; - private final AddUser addUser; - private final RemoveUser removeUser; + private final Optional<AddUser> addUser; + private final Optional<RemoveUser> removeUser; private final Uninstall uninstall; private final LoadStatements loadStatements; private final LoadStatementsFile loadStatementsFile; @@ -53,17 +55,17 @@ public class RyaClient { */ public RyaClient( final Install install, - final CreatePCJ createPcj, - final DeletePCJ deletePcj, - final CreatePeriodicPCJ createPeriodicPcj, - final DeletePeriodicPCJ deletePeriodicPcj, - final ListIncrementalQueries listIncrementalQueries, - final BatchUpdatePCJ batchUpdatePcj, + final Optional<CreatePCJ> createPcj, + final Optional<DeletePCJ> deletePcj, + final Optional<CreatePeriodicPCJ> createPeriodicPcj, + final Optional<DeletePeriodicPCJ> deletePeriodicPcj, + final Optional<ListIncrementalQueries> listIncrementalQueries, + final Optional<BatchUpdatePCJ> batchUpdatePcj, final GetInstanceDetails getInstanceDetails, final InstanceExists instanceExists, final ListInstances listInstances, - final AddUser addUser, - final RemoveUser removeUser, + final Optional<AddUser> addUser, + final Optional<RemoveUser> removeUser, final Uninstall uninstall, final LoadStatements loadStatements, final LoadStatementsFile loadStatementsFile, @@ -71,19 +73,19 @@ public class RyaClient { this.install = requireNonNull(install); this.createPcj = requireNonNull(createPcj); this.deletePcj = requireNonNull(deletePcj); - this.createPeriodicPcj = createPeriodicPcj; - this.deletePeriodicPcj = deletePeriodicPcj; - this.listIncrementalQueries = listIncrementalQueries; - this.bactchUpdatePCJ = batchUpdatePcj; + this.createPeriodicPcj = requireNonNull(createPeriodicPcj); + this.deletePeriodicPcj = requireNonNull(deletePeriodicPcj); + this.listIncrementalQueries = requireNonNull(listIncrementalQueries); + this.bactchUpdatePCJ = requireNonNull(batchUpdatePcj); this.getInstanceDetails = requireNonNull(getInstanceDetails); this.instanceExists = requireNonNull(instanceExists); this.listInstances = requireNonNull(listInstances); - this.addUser = addUser; - this.removeUser = removeUser; + this.addUser = requireNonNull(addUser); + this.removeUser = requireNonNull(removeUser); this.uninstall = requireNonNull(uninstall); - this.loadStatements = loadStatements; // FIXME requireNonNull(loadStatements); - this.loadStatementsFile = loadStatementsFile; // FIXME requireNonNull(loadStatementsFile); - this.executeSparqlQuery = executeSparqlQuery; // FIXME requireNonNull(executeSparqlQuery); + this.loadStatements = loadStatements; + this.loadStatementsFile = loadStatementsFile; + this.executeSparqlQuery = executeSparqlQuery; } /** @@ -97,7 +99,7 @@ public class RyaClient { * @return An instance of {@link CreatePCJ} that is connected to a Rya storage * if the Rya instance supports PCJ indexing. */ - public CreatePCJ getCreatePCJ() { + public Optional<CreatePCJ> getCreatePCJ() { return createPcj; } @@ -105,21 +107,21 @@ public class RyaClient { * @return An instance of {@link DeletePCJ} that is connected to a Rya storage * if the Rya instance supports PCJ indexing. */ - public DeletePCJ getDeletePCJ() { + public Optional<DeletePCJ> getDeletePCJ() { return deletePcj; } /** * @return An instance of {@link CreatePeridodicPCJ} that is connected to a Rya Periodic Storage */ - public CreatePeriodicPCJ getCreatePeriodicPCJ() { + public Optional<CreatePeriodicPCJ> getCreatePeriodicPCJ() { return createPeriodicPcj; } /** * @return An instance of {@link DeletePeriodicPCJ} that is connected to a Rya Periodic Storage */ - public DeletePeriodicPCJ getDeletePeriodicPCJ() { + public Optional<DeletePeriodicPCJ> getDeletePeriodicPCJ() { return deletePeriodicPcj; } @@ -127,7 +129,7 @@ public class RyaClient { * @return An instance of {@link ListIncrementalQueries} for displaying queries that are incrementallly * maintained by the Rya instance */ - public ListIncrementalQueries getListIncrementalQueries() { + public Optional<ListIncrementalQueries> getListIncrementalQueries() { return listIncrementalQueries; } @@ -135,7 +137,7 @@ public class RyaClient { * @return An instance of {@link BatchUpdatePCJ} that is connect to a Rya storage * if the Rya instance supports PCJ indexing. */ - public BatchUpdatePCJ getBatchUpdatePCJ() { + public Optional<BatchUpdatePCJ> getBatchUpdatePCJ() { return bactchUpdatePCJ; } @@ -163,14 +165,14 @@ public class RyaClient { /** * @return An instance of {@link AddUser} that is connected to a Rya storage. */ - public AddUser getAddUser() { + public Optional<AddUser> getAddUser() { return addUser; } /** * @return An instance of {@link DeleteUser} that is connected to a Rya storage. */ - public RemoveUser getRemoveUser() { + public Optional<RemoveUser> getRemoveUser() { return removeUser; } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/main/java/org/apache/rya/api/client/accumulo/AccumuloRyaClientFactory.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/accumulo/AccumuloRyaClientFactory.java b/extras/indexing/src/main/java/org/apache/rya/api/client/accumulo/AccumuloRyaClientFactory.java index fcc712c..f9df491 100644 --- a/extras/indexing/src/main/java/org/apache/rya/api/client/accumulo/AccumuloRyaClientFactory.java +++ b/extras/indexing/src/main/java/org/apache/rya/api/client/accumulo/AccumuloRyaClientFactory.java @@ -20,6 +20,8 @@ package org.apache.rya.api.client.accumulo; import static java.util.Objects.requireNonNull; +import java.util.Optional; + import org.apache.accumulo.core.client.Connector; import org.apache.rya.api.client.RyaClient; @@ -50,17 +52,17 @@ public class AccumuloRyaClientFactory { // Build the RyaCommands option with the initialized commands. return new RyaClient( new AccumuloInstall(connectionDetails, connector), - new AccumuloCreatePCJ(connectionDetails, connector), - new AccumuloDeletePCJ(connectionDetails, connector), - new AccumuloCreatePeriodicPCJ(connectionDetails, connector), - new AccumuloDeletePeriodicPCJ(connectionDetails, connector), - new AccumuloListIncrementalQueries(connectionDetails, connector), - new AccumuloBatchUpdatePCJ(connectionDetails, connector), + Optional.of(new AccumuloCreatePCJ(connectionDetails, connector)), + Optional.of(new AccumuloDeletePCJ(connectionDetails, connector)), + Optional.of(new AccumuloCreatePeriodicPCJ(connectionDetails, connector)), + Optional.of(new AccumuloDeletePeriodicPCJ(connectionDetails, connector)), + Optional.of(new AccumuloListIncrementalQueries(connectionDetails, connector)), + Optional.of(new AccumuloBatchUpdatePCJ(connectionDetails, connector)), new AccumuloGetInstanceDetails(connectionDetails, connector), new AccumuloInstanceExists(connectionDetails, connector), new AccumuloListInstances(connectionDetails, connector), - new AccumuloAddUser(connectionDetails, connector), - new AccumuloRemoveUser(connectionDetails, connector), + Optional.of(new AccumuloAddUser(connectionDetails, connector)), + Optional.of(new AccumuloRemoveUser(connectionDetails, connector)), new AccumuloUninstall(connectionDetails, connector), new AccumuloLoadStatements(connectionDetails, connector), new AccumuloLoadStatementsFile(connectionDetails, connector), http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoCommand.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoCommand.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoCommand.java index 24bae95..443fec7 100644 --- a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoCommand.java +++ b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoCommand.java @@ -38,11 +38,8 @@ public abstract class MongoCommand { /** * Constructs an instance of {@link MongoCommand}. * - * Details about the values that were used to create the client. (not null) - * - * @param client - * - Provides programatic access to the instance of Mongo - * that hosts Rya instance. (not null) + * @param connectionDetails - Details about the values that were used to create the client. (not null) + * @param client - Provides programmatic access to the instance of Mongo that hosts Rya instance. (not null) */ public MongoCommand(final MongoConnectionDetails connectionDetails, final MongoClient client) { this.connectionDetails = requireNonNull(connectionDetails); @@ -50,14 +47,14 @@ public abstract class MongoCommand { } /** - * @return Details about the values that were used to create the connector to mongo. (not null) + * @return Details about the values that were used to create the connector to mongo. */ public MongoConnectionDetails getMongoConnectionDetails() { return connectionDetails; } /** - * @return Provides programatic access to the instance of Mongo that hosts Rya instance. + * @param client - Provides programmatic access to the instance of Mongo that hosts Rya instance. */ public MongoClient getClient() { return client; http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoConnectionDetails.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoConnectionDetails.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoConnectionDetails.java index 16e0453..f05b38d 100644 --- a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoConnectionDetails.java +++ b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoConnectionDetails.java @@ -20,74 +20,93 @@ package org.apache.rya.api.client.mongo; import static java.util.Objects.requireNonNull; -import org.apache.rya.accumulo.AccumuloRdfConfiguration; +import org.apache.rya.api.RdfCloudTripleStoreConfiguration; +import org.apache.rya.indexing.accumulo.ConfigUtils; import org.apache.rya.mongodb.MongoDBRdfConfiguration; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; + +/** + * The information the shell used to connect to Mongo DB. + */ +@DefaultAnnotation(NonNull.class) public class MongoConnectionDetails { - private String username; - private char[] userPass; - private String instance; - private String host; - private String collectionName; - public MongoConnectionDetails(String username, char[] userPass, String instance, String host, String ryaInstance) { - this.username = username; - this.userPass = userPass.clone(); - this.instance = instance; - this.host = host; - this.collectionName = requireNonNull(ryaInstance); + private final String username; + private final char[] userPass; + private final String hostname; + private final int port; + + /** + * Constructs an instance of {@link MongoConnectionDetails}. + * + * @param username - The username that was used to establish the connection. (not null) + * @param password - The password that was used to establish the connection. (not null) + * @param hostname - The hostname of the Mongo DB that was connected to. (not null) + * @param port - The port of the Mongo DB that was connected to. (not null) + */ + public MongoConnectionDetails( + final String username, + final char[] userPass, + final String hostname, + final int port) { + this.username = requireNonNull(username); + this.userPass = requireNonNull(userPass); + this.hostname = requireNonNull(hostname); + this.port = port; } /** - * @return the username + * @return The username that was used to establish the connection. */ public String getUsername() { return this.username; } /** - * @return the password + * @return The password that was used to establish the connection. */ public char[] getPassword() { return this.userPass; } /** - * @return the instance + * @return The hostname of the Mongo DB that was connected to. */ - public String getInstance() { - return instance; + public String getHostname() { + return hostname; } /** - * @return the host AKA MongoInstance + * @return The port of the Mongo DB that was connected to. */ - public String getHost() { - return host; - } - /** - * @return The Collection/Rya Prefix/Rya instance that was used to establish the connection. - */ - public String getCollectionName() { - return collectionName; + public int getPort() { + return port; } /** + * Create a {@link MongoDBRdfConfiguration} that is using this object's values. * - * @param ryaInstanceName - * - The Rya instance to connect to. - * @return Constructs a new {@link AccumuloRdfConfiguration} object with values from this object. + * @param ryaInstanceName - The Rya instance to connect to. + * @return Constructs a new {@link MongoDBRdfConfiguration} object with values from this object. */ public MongoDBRdfConfiguration build(final String ryaInstanceName) { - // Note, we don't use the MongoDBRdfConfigurationBuilder here because it explicitly sets // authorizations and visibilities to an empty string if they are not set on the builder. // If they are null in the MongoRdfConfiguration object, it may do the right thing. final MongoDBRdfConfiguration conf = new MongoDBRdfConfiguration(); - conf.setMongoInstance(host); - conf.setCollectionName(ryaInstanceName); + conf.setBoolean(ConfigUtils.USE_MONGO, true); + conf.setMongoInstance(hostname); + conf.setMongoPort("" + port); conf.setMongoUser(username); conf.setMongoPassword(new String(userPass)); + conf.setMongoDBName(ryaInstanceName); + + // Both of these are ways to configure the collection prefixes. + conf.setCollectionName(ryaInstanceName); + conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, ryaInstanceName); + return conf; } - -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoCreatePCJ.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoCreatePCJ.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoCreatePCJ.java deleted file mode 100644 index 30d0f14..0000000 --- a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoCreatePCJ.java +++ /dev/null @@ -1,58 +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.api.client.mongo; - -import java.util.Set; - -import org.apache.rya.api.client.CreatePCJ; -import org.apache.rya.api.client.InstanceDoesNotExistException; -import org.apache.rya.api.client.RyaClientException; - -import com.mongodb.MongoClient; - -import edu.umd.cs.findbugs.annotations.DefaultAnnotation; -import edu.umd.cs.findbugs.annotations.NonNull; - -/** - * An Mongo implementation of the {@link CreatePCJ} command. - */ -@DefaultAnnotation(NonNull.class) -public class MongoCreatePCJ extends MongoCommand implements CreatePCJ { - - /** - * Constructs an instance of {@link MongoCreatePCJ}. - * - * @param connectionDetails - Details about the values that were used to create the connector to the cluster. (not null) - * @param client - Provides programatic access to the instance of Mongo - * that hosts Rya instance. (not null) - */ - public MongoCreatePCJ(final MongoConnectionDetails connectionDetails, final MongoClient client) { - super(connectionDetails, client); - } - - @Override - public String createPCJ(final String instanceName, final String sparql) throws InstanceDoesNotExistException { - throw new UnsupportedOperationException("Mongo does not support PCJ indexing."); - } - - @Override - public String createPCJ(String instanceName, String sparql, Set<ExportStrategy> strategies) throws InstanceDoesNotExistException, RyaClientException { - throw new UnsupportedOperationException("Mongo does not support PCJ indexing."); - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoDeletePCJ.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoDeletePCJ.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoDeletePCJ.java deleted file mode 100644 index 6e16bf0..0000000 --- a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoDeletePCJ.java +++ /dev/null @@ -1,51 +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.api.client.mongo; - -import org.apache.rya.api.client.DeletePCJ; -import org.apache.rya.api.client.InstanceDoesNotExistException; -import org.apache.rya.api.client.RyaClientException; - -import com.mongodb.MongoClient; - -import edu.umd.cs.findbugs.annotations.DefaultAnnotation; -import edu.umd.cs.findbugs.annotations.NonNull; - -/** - * An Mongo implementation of the {@link DeletePCJ} command. - */ -@DefaultAnnotation(NonNull.class) -public class MongoDeletePCJ extends MongoCommand implements DeletePCJ { - - /** - * Constructs an instance of {@link MongoDeletePCJ}. - * - * @param connectionDetails Details about the values that were used to create the connector to the cluster. (not null) - * @param client Provides programatic access to the instance of Mongo - * that hosts Rya instance. (not null) - */ - public MongoDeletePCJ(final MongoConnectionDetails connectionDetails, final MongoClient client) { - super(connectionDetails, client); - } - - @Override - public void deletePCJ(final String instanceName, final String pcjId) throws InstanceDoesNotExistException, RyaClientException { - throw new UnsupportedOperationException("Mongo does not support PCJ Indexing."); - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java new file mode 100644 index 0000000..f51d42d --- /dev/null +++ b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java @@ -0,0 +1,56 @@ +/** + * 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.api.client.mongo; + +import static java.util.Objects.requireNonNull; + +import org.apache.rya.api.client.ExecuteSparqlQuery; +import org.apache.rya.api.client.InstanceDoesNotExistException; +import org.apache.rya.api.client.RyaClientException; + +import com.mongodb.MongoClient; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; +import edu.umd.cs.findbugs.annotations.NonNull; + +/** + * TODO impl, test, doc + */ +@DefaultAnnotation(NonNull.class) +public class MongoExecuteSparqlQuery extends MongoCommand implements ExecuteSparqlQuery { + + /** + * Constructs an instance of {@link }. + * + * @param connectionDetails - Details about the values that were used to create the client. (not null) + * @param connector - Provides programmatic access to the instance of Mongo that hosts Rya instances. (not null) + */ + public MongoExecuteSparqlQuery(final MongoConnectionDetails connectionDetails, final MongoClient client) { + super(connectionDetails, client); + } + + @Override + public String executeSparqlQuery(final String ryaInstanceName, final String sparqlQuery) throws InstanceDoesNotExistException, RyaClientException { + requireNonNull(ryaInstanceName); + requireNonNull(sparqlQuery); + + // TODO Auto-generated method stub + return null; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetails.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetails.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetails.java index 1bfa97a..b61e107 100644 --- a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetails.java +++ b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetails.java @@ -47,11 +47,8 @@ public class MongoGetInstanceDetails extends MongoCommand implements GetInstance /** * Constructs an instance of {@link MongoGetInstanceDetails}. * - * @param connectionDetails - * - Details about the values that were used to create the connector to the cluster. (not null) - * @param client - * - Provides programatic access to the instance of Mongo - * that hosts Rya instance. (not null) + * @param connectionDetails - Details about the values that were used to create the connector to the cluster. (not null) + * @param connector - Provides programmatic access to the instance of Mongo that hosts Rya instances. (not null) */ public MongoGetInstanceDetails(final MongoConnectionDetails connectionDetails, final MongoClient client) { super(connectionDetails, client); http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstall.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstall.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstall.java index 2766536..bcd79f6 100644 --- a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstall.java +++ b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstall.java @@ -22,7 +22,6 @@ import static java.util.Objects.requireNonNull; import java.util.Date; -import org.apache.rya.api.RdfCloudTripleStoreConfiguration; import org.apache.rya.api.client.Install; import org.apache.rya.api.client.InstanceExists; import org.apache.rya.api.client.RyaClientException; @@ -42,6 +41,8 @@ import org.apache.rya.indexing.accumulo.ConfigUtils; import org.apache.rya.mongodb.MongoDBRdfConfiguration; import org.apache.rya.mongodb.MongoDBRyaDAO; import org.apache.rya.mongodb.instance.MongoRyaInstanceDetailsRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.google.common.base.Optional; import com.mongodb.MongoClient; @@ -55,16 +56,15 @@ import edu.umd.cs.findbugs.annotations.NonNull; @DefaultAnnotation(NonNull.class) public class MongoInstall extends MongoCommand implements Install { + private static final Logger log = LoggerFactory.getLogger(MongoInstall.class); + private final InstanceExists instanceExists; /** * Constructs an instance of {@link MongoInstall}. * - * @param connectionDetails - * - Details about the values that were used to create the connector to the cluster. (not null) - * @param client - * - Provides programatic access to the instance of Mongo - * that hosts Rya instance. (not null) + * @param connectionDetails - Details about the values that were used to create the connector to the cluster. (not null) + * @param connector - Provides programmatic access to the instance of Mongo that hosts Rya instances. (not null) */ public MongoInstall(final MongoConnectionDetails connectionDetails, final MongoClient client) { super(connectionDetails, client); @@ -121,39 +121,40 @@ public class MongoInstall extends MongoCommand implements Install { /** * Initializes the {@link RyaDetails} and stores them for the new instance. * - * @param instanceName - * - The name of the instance that is being created. (not null) - * @param installConfig - * - The instance's install configuration. (not null) + * @param instanceName - The name of the instance that is being created. (not null) + * @param installConfig - The instance's install configuration. (not null) * @return The {@link RyaDetails} that were stored. - * @throws AlreadyInitializedException - * Could not be initialized because - * a table with this instance name has already exists and is holding the details. - * @throws RyaDetailsRepositoryException - * Something caused the initialization - * operation to fail. + * @throws AlreadyInitializedException Could not be initialized because a table with this instance name has already + * exists and is holding the details. + * @throws RyaDetailsRepositoryException Something caused the initialization operation to fail. */ - private RyaDetails initializeRyaDetails(final String instanceName, final InstallConfiguration installConfig) throws AlreadyInitializedException, RyaDetailsRepositoryException { + private RyaDetails initializeRyaDetails( + final String instanceName, + final InstallConfiguration installConfig) throws AlreadyInitializedException, RyaDetailsRepositoryException { final RyaDetailsRepository detailsRepo = new MongoRyaInstanceDetailsRepository(getClient(), instanceName); // Build the PCJ Index details. [not supported in mongo] final PCJIndexDetails.Builder pcjDetailsBuilder = PCJIndexDetails.builder().setEnabled(false); final RyaDetails details = RyaDetails.builder() - // General Metadata - .setRyaInstanceName(instanceName).setRyaVersion(getVersion()) + // General Metadata + .setRyaInstanceName(instanceName).setRyaVersion(getVersion()) + + // FIXME RYA-215 .setGeoIndexDetails(new GeoIndexDetails(installConfig.isGeoIndexEnabled())) + + // Secondary Index Values + .setTemporalIndexDetails(new TemporalIndexDetails(installConfig.isTemporalIndexEnabled())) + .setFreeTextDetails(new FreeTextIndexDetails(installConfig.isFreeTextIndexEnabled()))// + + // Entity centric indexing is not supported in Mongo Db. + .setEntityCentricIndexDetails(new EntityCentricIndexDetails(false)) - // Secondary Index Values - // FIXME .setGeoIndexDetails(new GeoIndexDetails(installConfig.isGeoIndexEnabled())) - .setTemporalIndexDetails(new TemporalIndexDetails(installConfig.isTemporalIndexEnabled())) // - .setFreeTextDetails(new FreeTextIndexDetails(installConfig.isFreeTextIndexEnabled()))// - .setEntityCentricIndexDetails(new EntityCentricIndexDetails(false))// not supported in mongo - .setPCJIndexDetails(pcjDetailsBuilder) + .setPCJIndexDetails(pcjDetailsBuilder) - // Statistics values. - .setProspectorDetails(new ProspectorDetails(Optional.<Date> absent()))// - .setJoinSelectivityDetails(new JoinSelectivityDetails(Optional.<Date> absent()))// - .build(); + // Statistics values. + .setProspectorDetails(new ProspectorDetails(Optional.<Date> absent()))// + .setJoinSelectivityDetails(new JoinSelectivityDetails(Optional.<Date> absent()))// + .build(); // Initialize the table. detailsRepo.initialize(details); @@ -165,30 +166,34 @@ public class MongoInstall extends MongoCommand implements Install { * Builds a {@link MongoRdfConfiguration} object that will be used by the * Rya DAO to initialize all of the tables it will need. * - * @param connectionDetails - * - Indicates how to connect to Mongo. (not null) - * @param details - * - Indicates what needs to be installed. (not null) + * @param connectionDetails - Indicates how to connect to Mongo. (not null) + * @param ryaDetails - Indicates what needs to be installed. (not null) * @return A Rya Configuration object that can be used to perform the install. */ - private static MongoDBRdfConfiguration makeRyaConfig(final MongoConnectionDetails connectionDetails, final RyaDetails details) { - final MongoDBRdfConfiguration conf = new MongoDBRdfConfiguration(); - conf.setBoolean(ConfigUtils.USE_MONGO, true); - // The Rya Instance Name is used as a prefix for the index tables in Mongo. - conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, details.getRyaInstanceName()); - - // Enable the indexers that the instance is configured to use. - conf.set(ConfigUtils.USE_PCJ, "" + details.getPCJIndexDetails().isEnabled()); - // fixme conf.set(OptionalConfigUtils.USE_GEO, "" + details.getGeoIndexDetails().isEnabled() ); - conf.set(ConfigUtils.USE_FREETEXT, "" + details.getFreeTextIndexDetails().isEnabled()); - conf.set(ConfigUtils.USE_TEMPORAL, "" + details.getTemporalIndexDetails().isEnabled()); + private static MongoDBRdfConfiguration makeRyaConfig(final MongoConnectionDetails connectionDetails, final RyaDetails ryaDetails) { + // Start with a configuration that is built using the connection details. + final MongoDBRdfConfiguration conf = connectionDetails.build(ryaDetails.getRyaInstanceName()); + + // The Mongo implementation of Rya does not currently support PCJs. + if(ryaDetails.getPCJIndexDetails().isEnabled()) { + log.warn("The install configuration says to enable PCJ indexing, but Mongo RYA does not support that " + + "feature. Ignoring this configuration."); + } + conf.set(ConfigUtils.USE_PCJ, "false"); // Mongo does not support entity indexing. - conf.set(ConfigUtils.USE_ENTITY, "" + false); + if(ryaDetails.getEntityCentricIndexDetails().isEnabled()) { + log.warn("The install configuration says to enable Entity Centric indexing, but Mongo RYA does not support " + + "that feature. Ignoring this configuration."); + } + conf.set(ConfigUtils.USE_ENTITY, "false"); + + // FIXME RYA-215 We haven't enabled geo indexing in the console yet. + //conf.set(OptionalConfigUtils.USE_GEO, "" + details.getGeoIndexDetails().isEnabled() ); - conf.set(ConfigUtils.CLOUDBASE_USER, connectionDetails.getUsername()); - conf.set(ConfigUtils.CLOUDBASE_PASSWORD, new String(connectionDetails.getPassword())); - conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, details.getRyaInstanceName()); + // Enable the supported indexers that the instance is configured to use. + conf.set(ConfigUtils.USE_FREETEXT, "" + ryaDetails.getFreeTextIndexDetails().isEnabled()); + conf.set(ConfigUtils.USE_TEMPORAL, "" + ryaDetails.getTemporalIndexDetails().isEnabled()); // This initializes the living indexers that will be used by the application and // caches them within the configuration object so that they may be used later. http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstanceExists.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstanceExists.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstanceExists.java index 2560856..a00079a 100644 --- a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstanceExists.java +++ b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstanceExists.java @@ -21,7 +21,6 @@ package org.apache.rya.api.client.mongo; import static java.util.Objects.requireNonNull; import org.apache.rya.api.client.InstanceExists; -import org.apache.rya.api.client.RyaClientException; import com.mongodb.MongoClient; @@ -38,8 +37,7 @@ public class MongoInstanceExists extends MongoCommand implements InstanceExists * Constructs an insatnce of {@link MongoInstanceExists}. * * @param connectionDetails - Details about the values that were used to create the connector to the cluster. (not null) - * @param client - Provides programatic access to the instance of Mongo - * that hosts Rya instance. (not null) + * @param connector - Provides programmatic access to the instance of Mongo that hosts Rya instances. (not null) */ public MongoInstanceExists(final MongoConnectionDetails connectionDetails, final MongoClient client) { super(connectionDetails, client); @@ -48,6 +46,11 @@ public class MongoInstanceExists extends MongoCommand implements InstanceExists @Override public boolean exists(final String instanceName) { requireNonNull( instanceName ); - return super.getClient().getDatabaseNames().contains(instanceName); + for(final String dbName : getClient().listDatabaseNames()) { + if(dbName.equals(instanceName)) { + return true; + } + } + return false; } -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoListInstances.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoListInstances.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoListInstances.java index d301bf2..bf29848 100644 --- a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoListInstances.java +++ b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoListInstances.java @@ -20,7 +20,6 @@ package org.apache.rya.api.client.mongo; import java.util.ArrayList; import java.util.List; -import java.util.Set; import org.apache.rya.api.client.ListInstances; import org.apache.rya.api.client.RyaClientException; @@ -39,11 +38,8 @@ public class MongoListInstances extends MongoCommand implements ListInstances { /** * Constructs an instance of {@link MongoListInstances}. * - * @param connectionDetails - * - Details about the values that were used to create the connector to the cluster. (not null) - * @param client - * - Provides programatic access to the instance of Mongo - * that hosts Rya instance. (not null) + * @param connectionDetails - Details about the values that were used to create the connector to the cluster. (not null) + * @param connector - Provides programmatic access to the instance of Mongo that hosts Rya instances. (not null) */ public MongoListInstances(final MongoConnectionDetails connectionDetails, final MongoClient client) { super(connectionDetails, client); @@ -52,12 +48,12 @@ public class MongoListInstances extends MongoCommand implements ListInstances { @Override public List<String> listInstances() throws RyaClientException { final MongoClient client = super.getClient(); - final List<String> dbNames = client.getDatabaseNames(); + + // Each database that contains an instance details collection is a Rya Instance. final List<String> ryaInstances = new ArrayList<>(); - for (final String db : dbNames) { - final Set<String> collNames = client.getDB(db).getCollectionNames(); - for (final String coll : collNames) { - if (coll.equals(MongoRyaInstanceDetailsRepository.INSTANCE_DETAILS_COLLECTION_NAME)) { + for (final String db : getClient().listDatabaseNames()) { + for(final String collection : client.getDatabase(db).listCollectionNames()) { + if (collection.equals(MongoRyaInstanceDetailsRepository.INSTANCE_DETAILS_COLLECTION_NAME)) { ryaInstances.add(db); break; } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoRyaClientFactory.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoRyaClientFactory.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoRyaClientFactory.java index 4ea3487..f4d68e7 100644 --- a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoRyaClientFactory.java +++ b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoRyaClientFactory.java @@ -20,6 +20,8 @@ package org.apache.rya.api.client.mongo; import static java.util.Objects.requireNonNull; +import java.util.Optional; + import org.apache.rya.api.client.RyaClient; import com.mongodb.MongoClient; @@ -38,29 +40,33 @@ public class MongoRyaClientFactory { * Initialize a set of {@link RyaClient} that will interact with an instance of * Rya that is hosted by a MongoDB server. * - * @param connectionDetails - Details about the values that were used to create the connector to the cluster. (not null) - * @param connector - The MongoDB connector the commands will use. (not null) + * @param connectionDetails - Details about the values that were used to connect to Mongo DB. (not null) + * @param mongoClient - The MongoDB client the commands will use. (not null) * @return The initialized commands. */ public static RyaClient build( final MongoConnectionDetails connectionDetails, - final MongoClient connector) { + final MongoClient mongoClient) { requireNonNull(connectionDetails); - requireNonNull(connector); + requireNonNull(mongoClient); // Build the RyaCommands option with the initialized commands. - return new RyaClient(// - new MongoInstall(connectionDetails, connector), // - new MongoCreatePCJ(connectionDetails, connector), // - new MongoDeletePCJ(connectionDetails, connector), // - null, null, null, null, - new MongoGetInstanceDetails(connectionDetails, connector), // - new MongoInstanceExists(connectionDetails, connector), // - new MongoListInstances(connectionDetails, connector), // - null, null, - new MongoUninstall(connectionDetails, connector), // - new MongoLoadStatements(connectionDetails, connector), // - new MongoLoadStatementsFile(connectionDetails, connector), // - null);// FIXME new MongoExecuteSparqlQuery(connectionDetails, connector)); + return new RyaClient( + new MongoInstall(connectionDetails, mongoClient), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + new MongoGetInstanceDetails(connectionDetails, mongoClient), + new MongoInstanceExists(connectionDetails, mongoClient), + new MongoListInstances(connectionDetails, mongoClient), + Optional.empty(), + Optional.empty(), + new MongoUninstall(connectionDetails, mongoClient), + new MongoLoadStatements(connectionDetails, mongoClient), + new MongoLoadStatementsFile(connectionDetails, mongoClient), + new MongoExecuteSparqlQuery(connectionDetails, mongoClient)); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoUninstall.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoUninstall.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoUninstall.java index b3988b8..979f93d 100644 --- a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoUninstall.java +++ b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoUninstall.java @@ -19,6 +19,7 @@ package org.apache.rya.api.client.mongo; import org.apache.rya.api.client.InstanceDoesNotExistException; +import org.apache.rya.api.client.InstanceExists; import org.apache.rya.api.client.RyaClientException; import org.apache.rya.api.client.Uninstall; @@ -34,23 +35,23 @@ import edu.umd.cs.findbugs.annotations.NonNull; @DefaultAnnotation(NonNull.class) public class MongoUninstall extends MongoCommand implements Uninstall { + private final InstanceExists instanceExists; + /** * Constructs an instance of {@link MongoUninstall}. * - * @param connectionDetails - * - Details about the values that were used to create the connector to the cluster. (not null) - * @param connector - * - Provides programatic access to the instance of Mongo - * that hosts Rya instance. (not null) + * @param connectionDetails - Details about the values that were used to create the connector to the cluster. (not null) + * @param connector - Provides programmatic access to the instance of Mongo that hosts Rya instances. (not null) */ public MongoUninstall(final MongoConnectionDetails connectionDetails, final MongoClient client) { super(connectionDetails, client); + instanceExists = new MongoInstanceExists(connectionDetails, client); } @Override public void uninstall(final String ryaInstanceName) throws InstanceDoesNotExistException, RyaClientException { try { - if (!getClient().getDatabaseNames().contains(ryaInstanceName)) { + if (!instanceExists.exists(ryaInstanceName)) { throw new InstanceDoesNotExistException("The database '" + ryaInstanceName + "' does not exist."); } getClient().dropDatabase(ryaInstanceName); http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloAddUserIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloAddUserIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloAddUserIT.java index 787d110..10d24d1 100644 --- a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloAddUserIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloAddUserIT.java @@ -46,7 +46,7 @@ import com.google.common.collect.ImmutableList; */ public class AccumuloAddUserIT extends AccumuloITBase { - private String ADMIN_USER = testInstance.createUniqueUser(); + private final String ADMIN_USER = testInstance.createUniqueUser(); @Before public void beforeClass() throws Exception { @@ -92,7 +92,7 @@ public class AccumuloAddUserIT extends AccumuloITBase { */ @Test public void userAddedAlsoAddedToRyaDetails() throws Exception { - String user = testInstance.createUniqueUser(); + final String user = testInstance.createUniqueUser(); final SecurityOperations secOps = super.getConnector().securityOperations(); final RyaClient userAClient = AccumuloRyaClientFactory.build( @@ -106,7 +106,7 @@ public class AccumuloAddUserIT extends AccumuloITBase { userAClient.getInstall().install(getRyaInstanceName(), InstallConfiguration.builder().build()); // Add the user. - userAClient.getAddUser().addUser(getRyaInstanceName(), user); + userAClient.getAddUser().get().addUser(getRyaInstanceName(), user); // Ensure the Rya instance's details have been updated to include the added user. final ImmutableList<String> expectedUsers = ImmutableList.<String>builder() @@ -123,7 +123,7 @@ public class AccumuloAddUserIT extends AccumuloITBase { */ @Test public void userNotAddedCanNotInsert() throws Exception { - String user = testInstance.createUniqueUser(); + final String user = testInstance.createUniqueUser(); final SecurityOperations secOps = super.getConnector().securityOperations(); final RyaClient userAClient = AccumuloRyaClientFactory.build( @@ -171,7 +171,7 @@ public class AccumuloAddUserIT extends AccumuloITBase { */ @Test public void userAddedCanInsert() throws Exception { - String user = testInstance.createUniqueUser(); + final String user = testInstance.createUniqueUser(); final SecurityOperations secOps = super.getConnector().securityOperations(); final RyaClient userAClient = AccumuloRyaClientFactory.build( @@ -185,7 +185,7 @@ public class AccumuloAddUserIT extends AccumuloITBase { userAClient.getInstall().install(getRyaInstanceName(), InstallConfiguration.builder().build()); // Add the user. - userAClient.getAddUser().addUser(getRyaInstanceName(), user); + userAClient.getAddUser().get().addUser(getRyaInstanceName(), user); // Try to add a statement to the Rya instance. This should succeed. Sail sail = null; @@ -216,7 +216,7 @@ public class AccumuloAddUserIT extends AccumuloITBase { */ @Test public void addUserTwice() throws Exception { - String user = testInstance.createUniqueUser(); + final String user = testInstance.createUniqueUser(); final SecurityOperations secOps = super.getConnector().securityOperations(); final RyaClient userAClient = AccumuloRyaClientFactory.build( @@ -230,8 +230,8 @@ public class AccumuloAddUserIT extends AccumuloITBase { userAClient.getInstall().install(getRyaInstanceName(), InstallConfiguration.builder().build()); // Add the user. - userAClient.getAddUser().addUser(getRyaInstanceName(), user); - userAClient.getAddUser().addUser(getRyaInstanceName(), user); + userAClient.getAddUser().get().addUser(getRyaInstanceName(), user); + userAClient.getAddUser().get().addUser(getRyaInstanceName(), user); // Ensure the Rya instance's details only contain the username of the user who installed the instance. final ImmutableList<String> expectedUsers = ImmutableList.<String>builder() http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloBatchUpdatePCJIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloBatchUpdatePCJIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloBatchUpdatePCJIT.java index 5a2e69d..40941c8 100644 --- a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloBatchUpdatePCJIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloBatchUpdatePCJIT.java @@ -107,7 +107,7 @@ public class AccumuloBatchUpdatePCJIT extends AccumuloITBase { final String pcjId = pcjStorage.createPcj(sparql); // Run the test. - ryaClient.getBatchUpdatePCJ().batchUpdate(RYA_INSTANCE_NAME, pcjId); + ryaClient.getBatchUpdatePCJ().get().batchUpdate(RYA_INSTANCE_NAME, pcjId); // Verify the correct results were loaded into the PCJ table. final Set<BindingSet> expectedResults = new HashSet<>(); http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloRemoveUserIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloRemoveUserIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloRemoveUserIT.java index f6ec5da..224f70d 100644 --- a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloRemoveUserIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloRemoveUserIT.java @@ -49,14 +49,14 @@ public class AccumuloRemoveUserIT extends AccumuloITBase { */ @Test public void removedUserNotInDetails() throws Exception { - String adminUser = testInstance.createUniqueUser(); - String user = testInstance.createUniqueUser(); + final String adminUser = testInstance.createUniqueUser(); + final String user = testInstance.createUniqueUser(); final SecurityOperations secOps = super.getConnector().securityOperations(); // Create the user that will install the instance of Rya. secOps.createLocalUser(adminUser, new PasswordToken(adminUser)); secOps.grantSystemPermission(adminUser, SystemPermission.CREATE_TABLE); - + final RyaClient userAClient = AccumuloRyaClientFactory.build( new AccumuloConnectionDetails(adminUser, adminUser.toCharArray(), getInstanceName(), getZookeepers()), @@ -73,10 +73,10 @@ public class AccumuloRemoveUserIT extends AccumuloITBase { userAClient.getInstall().install(getRyaInstanceName(), InstallConfiguration.builder().build()); // Add userB. - userAClient.getAddUser().addUser(getRyaInstanceName(), user); + userAClient.getAddUser().get().addUser(getRyaInstanceName(), user); // Remove userA. - userBClient.getRemoveUser().removeUser(getRyaInstanceName(), adminUser); + userBClient.getRemoveUser().get().removeUser(getRyaInstanceName(), adminUser); // Ensure the Rya instance's details have been updated to include the added user. final ImmutableList<String> expectedUsers = ImmutableList.<String>builder() @@ -92,8 +92,8 @@ public class AccumuloRemoveUserIT extends AccumuloITBase { */ @Test public void removedUserCanNotInsert() throws Exception { - String adminUser = testInstance.createUniqueUser(); - String user = testInstance.createUniqueUser(); + final String adminUser = testInstance.createUniqueUser(); + final String user = testInstance.createUniqueUser(); final SecurityOperations secOps = super.getConnector().securityOperations(); // Create the user that will install the instance of Rya. @@ -115,10 +115,10 @@ public class AccumuloRemoveUserIT extends AccumuloITBase { userAClient.getInstall().install(getRyaInstanceName(), InstallConfiguration.builder().build()); // Add userC. - userAClient.getAddUser().addUser(getRyaInstanceName(), user); + userAClient.getAddUser().get().addUser(getRyaInstanceName(), user); // Remove userA. - userCClient.getRemoveUser().removeUser(getRyaInstanceName(), adminUser); + userCClient.getRemoveUser().get().removeUser(getRyaInstanceName(), adminUser); // Show that userA can not insert anything. boolean securityExceptionThrown = false; http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java new file mode 100644 index 0000000..787db2b --- /dev/null +++ b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java @@ -0,0 +1,26 @@ +/** + * 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.api.client.mongo; + +/** + * Integration tests the methods of {@link }. + */ +public class MongoExecuteSparqlQueryIT { + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetailsIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetailsIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetailsIT.java index 843ba42..4c70eda 100644 --- a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetailsIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetailsIT.java @@ -40,7 +40,6 @@ import org.apache.rya.mongodb.MongoTestBase; import org.junit.Test; import com.google.common.base.Optional; -import com.mongodb.BasicDBObject; import com.mongodb.MongoException; /** @@ -57,8 +56,7 @@ public class MongoGetInstanceDetailsIT extends MongoTestBase { .setEnableEntityCentricIndex(true) .setEnableFreeTextIndex(true) .setEnableTemporalIndex(true) - .setEnableGeoIndex(true) - .setEnablePcjIndex(false) + .setEnablePcjIndex(true) .build(); final Install install = new MongoInstall(getConnectionDetails(), this.getMongoClient()); @@ -74,13 +72,18 @@ public class MongoGetInstanceDetailsIT extends MongoTestBase { // The version depends on how the test is packaged, so just grab whatever was stored. .setRyaVersion( details.get().getRyaVersion() ) - // FIXME .setGeoIndexDetails( new GeoIndexDetails(true) ) + // The supported indices are set to true. .setTemporalIndexDetails(new TemporalIndexDetails(true) ) .setFreeTextDetails( new FreeTextIndexDetails(true) ) + + // Entity Centric Index is not supported, so it flips to false. .setEntityCentricIndexDetails( new EntityCentricIndexDetails(false) ) + + // PCJJ Index is not supported, so it flips to false. .setPCJIndexDetails( PCJIndexDetails.builder() .setEnabled(false)) + .setProspectorDetails( new ProspectorDetails(Optional.<Date>absent()) ) .setJoinSelectivityDetails( new JoinSelectivityDetails(Optional.<Date>absent()) ) .build(); @@ -99,25 +102,22 @@ public class MongoGetInstanceDetailsIT extends MongoTestBase { // Mimic a pre-details rya install. final String instanceName = "instance_name"; - this.getMongoClient().getDB(instanceName).createCollection("rya_triples", new BasicDBObject()); + this.getMongoClient().getDatabase(instanceName).createCollection("rya_triples"); // Verify that the operation returns empty. final GetInstanceDetails getInstanceDetails = new MongoGetInstanceDetails(getConnectionDetails(), this.getMongoClient()); final Optional<RyaDetails> details = getInstanceDetails.getDetails(instanceName); assertFalse( details.isPresent() ); } - + /** * @return copy from conf to MongoConnectionDetails */ private MongoConnectionDetails getConnectionDetails() { - final MongoConnectionDetails connectionDetails = new MongoConnectionDetails( - conf.getMongoUser(), // - conf.getMongoPassword().toCharArray(), // - conf.getMongoDBName(), // aka instance - conf.getMongoInstance(), // aka hostname - conf.getCollectionName() - ); - return connectionDetails; + return new MongoConnectionDetails( + conf.getMongoUser(), + conf.getMongoPassword().toCharArray(), + conf.getMongoInstance(), + Integer.parseInt( conf.getMongoPort() )); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstallIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstallIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstallIT.java index e9dae1c..1ec7e9e 100644 --- a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstallIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstallIT.java @@ -21,6 +21,7 @@ package org.apache.rya.api.client.mongo; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -29,58 +30,53 @@ import org.apache.rya.api.client.Install.DuplicateInstanceNameException; import org.apache.rya.api.client.Install.InstallConfiguration; import org.apache.rya.api.client.InstanceExists; import org.apache.rya.api.client.RyaClientException; -import org.apache.rya.api.client.accumulo.AccumuloInstall; import org.apache.rya.mongodb.MongoTestBase; import org.junit.Test; /** - * Integration tests the methods of {@link AccumuloInstall}. + * Integration tests the methods of {@link MongoInstall}. */ public class MongoInstallIT extends MongoTestBase { @Test public void install() throws DuplicateInstanceNameException, RyaClientException { // Install an instance of Rya. - final String instanceName = conf.getCollectionName(); - final InstallConfiguration installConfig = InstallConfiguration.builder() - .setEnableTableHashPrefix(false) // - .setEnableEntityCentricIndex(false)// - .setEnableFreeTextIndex(false)// - .setEnableTemporalIndex(false)// - .setEnablePcjIndex(false)// - .setEnableGeoIndex(false)// - .setFluoPcjAppName("fluo_app_name")// - .build(); + final String ryaInstance = conf.getCollectionName(); + // Setup the connection details that were used for the embedded Mongo DB instance we are testing with. final MongoConnectionDetails connectionDetails = new MongoConnectionDetails( - conf.getMongoUser(), // - conf.getMongoPassword().toCharArray(), // - conf.getMongoDBName(), // aka instance - conf.getMongoInstance(), // aka hostname - conf.getCollectionName() - ); + conf.getMongoUser(), + conf.getMongoPassword().toCharArray(), + conf.getMongoInstance(), + Integer.parseInt( conf.getMongoPort() )); // Check that the instance does not exist. - assertFalse("Instance should NOT exist yet.", this.getMongoClient().getDatabaseNames().contains(instanceName)); final InstanceExists instanceExists = new MongoInstanceExists(connectionDetails, this.getMongoClient()); - assertFalse("Instance should NOT exist yet.", instanceExists.exists(instanceName)); + assertFalse(instanceExists.exists(ryaInstance)); + + // Install an instance of Rya with all the valid options turned on. + final InstallConfiguration installConfig = InstallConfiguration.builder() + .setEnableTableHashPrefix(true) + .setEnableFreeTextIndex(true) + .setEnableTemporalIndex(true) + .build(); final Install install = new MongoInstall(connectionDetails, this.getMongoClient()); - install.install(instanceName, installConfig); + install.install(ryaInstance, installConfig); // Check that the instance exists. - assertTrue("Instance should exist.", this.getMongoClient().getDatabaseNames().contains(instanceName)); - List<String> expected = Arrays.asList("instance_details", instanceName + "_triples"); + assertTrue(instanceExists.exists(ryaInstance)); + + // Show that the expected collections were created within the database. + final List<String> expected = Arrays.asList("instance_details", ryaInstance + "_triples"); int count = 0; - String found = ""; - for (String collection : this.getMongoClient().getDatabase(instanceName).listCollectionNames()) - { - System.out.println("Collection names:" + collection); + final List<String> found = new ArrayList<>(); + for (final String collection : this.getMongoClient().getDatabase(ryaInstance).listCollectionNames()) { count += expected.contains(collection) ? 1 : 0; - found += ", " + collection; + found.add( collection ); } assertTrue("Tables missing from:" + expected + " actual:" + found, expected.size() == count); - assertTrue("Instance should exist.", instanceExists.exists(instanceName)); + assertTrue("Instance should exist.", instanceExists.exists(ryaInstance)); } @Test(expected = DuplicateInstanceNameException.class) @@ -89,12 +85,11 @@ public class MongoInstallIT extends MongoTestBase { final String instanceName = conf.getCollectionName(); final InstallConfiguration installConfig = InstallConfiguration.builder().build(); - final MongoConnectionDetails connectionDetails = new MongoConnectionDetails(conf.getMongoUser(), // - conf.getMongoPassword().toCharArray(), // - conf.getMongoDBName(), // aka instance - conf.getMongoInstance(), // aka hostname - conf.getCollectionName() - ); + final MongoConnectionDetails connectionDetails = new MongoConnectionDetails( + conf.getMongoUser(), + conf.getMongoPassword().toCharArray(), + conf.getMongoInstance(), + Integer.parseInt( conf.getMongoPort() )); final Install install = new MongoInstall(connectionDetails, this.getMongoClient()); install.install(instanceName, installConfig); http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstanceExistsIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstanceExistsIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstanceExistsIT.java index 35568bc..6611f7f 100644 --- a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstanceExistsIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstanceExistsIT.java @@ -22,17 +22,15 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.apache.accumulo.core.client.TableExistsException; -import org.apache.rya.api.client.accumulo.AccumuloInstanceExists; import org.apache.rya.mongodb.MongoTestBase; import org.apache.rya.mongodb.instance.MongoRyaInstanceDetailsRepository; import org.junit.Test; -import com.mongodb.BasicDBObject; import com.mongodb.MongoClient; import com.mongodb.MongoException; /** - * Integration tests the methods of {@link AccumuloInstanceExists}. + * Integration tests the methods of {@link MongoInstanceExistsExists}. */ public class MongoInstanceExistsIT extends MongoTestBase { @@ -42,7 +40,7 @@ public class MongoInstanceExistsIT extends MongoTestBase { // Create the Rya instance's Rya details collection. final String instanceName = "test_instance_"; - client.getDB(instanceName).createCollection(MongoRyaInstanceDetailsRepository.INSTANCE_DETAILS_COLLECTION_NAME, new BasicDBObject()); + client.getDatabase(instanceName).createCollection(MongoRyaInstanceDetailsRepository.INSTANCE_DETAILS_COLLECTION_NAME); // Verify the command reports the instance exists. final MongoInstanceExists instanceExists = new MongoInstanceExists(getConnectionDetails(), client); @@ -55,7 +53,7 @@ public class MongoInstanceExistsIT extends MongoTestBase { // Create the Rya instance's Rya triples collection. final String instanceName = "test_instance_"; - client.getDB(instanceName).createCollection("rya_triples", new BasicDBObject()); + client.getDatabase(instanceName).createCollection("rya_triples"); // Verify the command reports the instance exists. final MongoInstanceExists instanceExists = new MongoInstanceExists(getConnectionDetails(), client); @@ -73,14 +71,10 @@ public class MongoInstanceExistsIT extends MongoTestBase { * @return copy from conf to MongoConnectionDetails */ private MongoConnectionDetails getConnectionDetails() { - final MongoConnectionDetails connectionDetails = new MongoConnectionDetails(conf.getMongoUser(), // - conf.getMongoPassword().toCharArray(), // - conf.getMongoDBName(), // aka instance - conf.getMongoInstance(), // aka hostname - conf.getCollectionName() - ); - return connectionDetails; + return new MongoConnectionDetails( + conf.getMongoUser(), + conf.getMongoPassword().toCharArray(), + conf.getMongoInstance(), + Integer.parseInt( conf.getMongoPort() )); } - - } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e60da4c3/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoListInstancesIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoListInstancesIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoListInstancesIT.java index 7d5a2fe..0e9f37e 100644 --- a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoListInstancesIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoListInstancesIT.java @@ -60,12 +60,10 @@ public class MongoListInstancesIT extends MongoTestBase { * @return copy from conf to MongoConnectionDetails */ private MongoConnectionDetails getConnectionDetails() { - final MongoConnectionDetails connectionDetails = new MongoConnectionDetails(conf.getMongoUser(), // - conf.getMongoPassword().toCharArray(), // - conf.getMongoDBName(), // aka instance - conf.getMongoInstance(), // aka hostname - conf.getCollectionName() - ); - return connectionDetails; + return new MongoConnectionDetails( + conf.getMongoUser(), + conf.getMongoPassword().toCharArray(), + conf.getMongoInstance(), + Integer.parseInt( conf.getMongoPort() )); } } \ No newline at end of file