RYA-85 Configuration glue code Added a configuration utility for updating the configuration used in Rya based on what is in RyaDetails, the admin table.
Added integration examples, these will need to be updated to use JUnit Project: http://git-wip-us.apache.org/repos/asf/incubator-rya/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-rya/commit/12b8ce6d Tree: http://git-wip-us.apache.org/repos/asf/incubator-rya/tree/12b8ce6d Diff: http://git-wip-us.apache.org/repos/asf/incubator-rya/diff/12b8ce6d Branch: refs/heads/master Commit: 12b8ce6d1d0861d219a5a873eaf9025d9da06123 Parents: 42ca087 Author: isper3at <smith...@gmail.com> Authored: Fri Jun 10 16:51:43 2016 -0400 Committer: Aaron Mihalik <miha...@alum.mit.edu> Committed: Tue Aug 23 10:41:37 2016 -0400 ---------------------------------------------------------------------- .../rya/api/instance/ConfigurationFields.java | 35 +++++ .../api/instance/RyaDetailsToConfiguration.java | 54 +++++++ .../instance/RyaDetailsToConfigurationTest.java | 87 ++++++++++++ .../mongodb/instance/MongoDetailsAdapter.java | 19 +++ .../MongoRyaInstanceDetailsRepository.java | 19 +++ .../instance/MongoDetailsAdapterTest.java | 19 +++ .../instance/MongoRyaDetailsRepositoryIT.java | 10 +- .../mvm/rya/sail/config/RyaSailFactory.java | 141 +++++++++++++------ .../external/PcjIntegrationTestingUtil.java | 18 ++- 9 files changed, 347 insertions(+), 55 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/12b8ce6d/common/rya.api/src/main/java/mvm/rya/api/instance/ConfigurationFields.java ---------------------------------------------------------------------- diff --git a/common/rya.api/src/main/java/mvm/rya/api/instance/ConfigurationFields.java b/common/rya.api/src/main/java/mvm/rya/api/instance/ConfigurationFields.java new file mode 100644 index 0000000..25212f4 --- /dev/null +++ b/common/rya.api/src/main/java/mvm/rya/api/instance/ConfigurationFields.java @@ -0,0 +1,35 @@ +package mvm.rya.api.instance; + +/* + * 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. + */ + +/** + * The possible configuration fields used in a Rya application. + * + * Note: The fields used here are from ConfigUtils.java, but this project + * doesn't have scope. + * TODO: Refactor ConfigUtils so this class is not needed. + */ +class ConfigurationFields { + static final String USE_GEO = "sc.use_geo"; + static final String USE_FREETEXT = "sc.use_freetext"; + static final String USE_TEMPORAL = "sc.use_temporal"; + static final String USE_ENTITY = "sc.use_entity"; + static final String USE_PCJ = "sc.use_pcj"; +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/12b8ce6d/common/rya.api/src/main/java/mvm/rya/api/instance/RyaDetailsToConfiguration.java ---------------------------------------------------------------------- diff --git a/common/rya.api/src/main/java/mvm/rya/api/instance/RyaDetailsToConfiguration.java b/common/rya.api/src/main/java/mvm/rya/api/instance/RyaDetailsToConfiguration.java new file mode 100644 index 0000000..8c7ba6e --- /dev/null +++ b/common/rya.api/src/main/java/mvm/rya/api/instance/RyaDetailsToConfiguration.java @@ -0,0 +1,54 @@ +package mvm.rya.api.instance; + +import org.apache.hadoop.conf.Configuration; +import org.apache.log4j.Logger; + +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; + +/** + * Used to fetch {@link RyaDetails} from a {@link RyaDetailsRepository} and + * add them to the application's {@link Configuration}. + */ +public class RyaDetailsToConfiguration { + private static final Logger LOG = Logger.getLogger(RyaDetailsToConfiguration.class); + /** + * Ensures the values in the {@link Configuration} do not conflict with the values in {@link RyaDetails}. + * If they do, the values in {@link RyaDetails} take precedent and the {@link Configuration} value will + * be overwritten. + * + * @param details - The {@link RyaDetails} to add to the {@link Configuration}. + * @param conf - The {@link Configuration} to add {@link RyaDetails} to. + */ + public static void addRyaDetailsToConfiguration(final RyaDetails details, final Configuration conf) { + Preconditions.checkNotNull(details); + Preconditions.checkNotNull(conf); + + checkAndSet(conf, ConfigurationFields.USE_ENTITY, details.getEntityCentricIndexDetails().isEnabled()); + checkAndSet(conf, ConfigurationFields.USE_FREETEXT, details.getFreeTextIndexDetails().isEnabled()); + checkAndSet(conf, ConfigurationFields.USE_GEO, details.getGeoIndexDetails().isEnabled()); + checkAndSet(conf, ConfigurationFields.USE_TEMPORAL, details.getTemporalIndexDetails().isEnabled()); + checkAndSet(conf, ConfigurationFields.USE_PCJ, details.getPCJIndexDetails().isEnabled()); + } + + /** + * Checks to see if the configuration has a value in the specified field. + * If the value exists and does not match what is expected by the {@link RyaDetails}, + * an error will be logged and the value will be overwritten. + * @param conf - The {@link Configuration} to potentially change. + * @param field - The field to check and set. + * @param value - The new value in the field (is not used if the value doesn't need to be changed). + */ + private static void checkAndSet(final Configuration conf, final String field, final boolean value) { + final Optional<String> opt = Optional.fromNullable(conf.get(field)); + if(opt.isPresent()) { + final Boolean curVal = new Boolean(opt.get()); + if(curVal != value) { + LOG.error("The user configured value in: " + field + " will be overwritten by what has been configured by the admin."); + conf.setBoolean(field, value); + } + } else { + conf.setBoolean(field, value); + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/12b8ce6d/common/rya.api/src/test/java/mvm/rya/api/instance/RyaDetailsToConfigurationTest.java ---------------------------------------------------------------------- diff --git a/common/rya.api/src/test/java/mvm/rya/api/instance/RyaDetailsToConfigurationTest.java b/common/rya.api/src/test/java/mvm/rya/api/instance/RyaDetailsToConfigurationTest.java new file mode 100644 index 0000000..32b75cf --- /dev/null +++ b/common/rya.api/src/test/java/mvm/rya/api/instance/RyaDetailsToConfigurationTest.java @@ -0,0 +1,87 @@ +package mvm.rya.api.instance; + +/* + * 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. + */ + +import static mvm.rya.api.instance.ConfigurationFields.USE_ENTITY; +import static mvm.rya.api.instance.ConfigurationFields.USE_FREETEXT; +import static mvm.rya.api.instance.ConfigurationFields.USE_GEO; +import static mvm.rya.api.instance.ConfigurationFields.USE_PCJ; +import static mvm.rya.api.instance.ConfigurationFields.USE_TEMPORAL; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.Date; + +import org.apache.hadoop.conf.Configuration; +import org.junit.Test; + +import com.google.common.base.Optional; + +import mvm.rya.api.instance.RyaDetails.EntityCentricIndexDetails; +import mvm.rya.api.instance.RyaDetails.FreeTextIndexDetails; +import mvm.rya.api.instance.RyaDetails.GeoIndexDetails; +import mvm.rya.api.instance.RyaDetails.JoinSelectivityDetails; +import mvm.rya.api.instance.RyaDetails.PCJIndexDetails; +import mvm.rya.api.instance.RyaDetails.PCJIndexDetails.FluoDetails; +import mvm.rya.api.instance.RyaDetails.PCJIndexDetails.PCJDetails; +import mvm.rya.api.instance.RyaDetails.PCJIndexDetails.PCJDetails.PCJUpdateStrategy; +import mvm.rya.api.instance.RyaDetails.ProspectorDetails; +import mvm.rya.api.instance.RyaDetails.TemporalIndexDetails; + +public class RyaDetailsToConfigurationTest { + @Test + public void populateConfigTest() { + final RyaDetails.Builder builder = RyaDetails.builder(); + + builder.setRyaInstanceName("test_instance") + .setRyaVersion("1.2.3.4") + .setEntityCentricIndexDetails( new EntityCentricIndexDetails(true) ) + .setGeoIndexDetails( new GeoIndexDetails(true) ) + .setTemporalIndexDetails( new TemporalIndexDetails(true) ) + .setFreeTextDetails( new FreeTextIndexDetails(false) ) + .setPCJIndexDetails( + PCJIndexDetails.builder() + .setEnabled(true) + .setFluoDetails( new FluoDetails("test_instance_rya_pcj_updater") ) + .addPCJDetails( + PCJDetails.builder() + .setId("pcj 1") + .setUpdateStrategy(PCJUpdateStrategy.BATCH) + .setLastUpdateTime( new Date() ) + .build()) + .addPCJDetails( + PCJDetails.builder() + .setId("pcj 2") + .setUpdateStrategy(PCJUpdateStrategy.INCREMENTAL) + .build()) + .build()) + .setProspectorDetails( new ProspectorDetails(Optional.of(new Date())) ) + .setJoinSelectivityDetails( new JoinSelectivityDetails(Optional.of(new Date())) ); + final Configuration conf = new Configuration(); + RyaDetailsToConfiguration.addRyaDetailsToConfiguration(builder.build(), conf); + + //defaults are set to cause the assert to fail + assertTrue(conf.getBoolean(USE_ENTITY, false)); + assertFalse(conf.getBoolean(USE_FREETEXT, true)); + assertTrue(conf.getBoolean(USE_GEO, false)); + assertTrue(conf.getBoolean(USE_TEMPORAL, false)); + assertTrue(conf.getBoolean(USE_PCJ, false)); + } +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/12b8ce6d/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoDetailsAdapter.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoDetailsAdapter.java b/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoDetailsAdapter.java index e1662e8..3a6e61d 100644 --- a/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoDetailsAdapter.java +++ b/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoDetailsAdapter.java @@ -1,5 +1,24 @@ package mvm.rya.mongodb.instance; +/* + * 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. + */ + import java.util.ArrayList; import java.util.Date; import java.util.List; http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/12b8ce6d/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoRyaInstanceDetailsRepository.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoRyaInstanceDetailsRepository.java b/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoRyaInstanceDetailsRepository.java index 51ba9c2..dfefa8f 100644 --- a/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoRyaInstanceDetailsRepository.java +++ b/dao/mongodb.rya/src/main/java/mvm/rya/mongodb/instance/MongoRyaInstanceDetailsRepository.java @@ -1,5 +1,24 @@ package mvm.rya.mongodb.instance; +/* + * 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. + */ + import static com.google.common.base.Preconditions.checkNotNull; import static java.util.Objects.requireNonNull; http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/12b8ce6d/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoDetailsAdapterTest.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoDetailsAdapterTest.java b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoDetailsAdapterTest.java index 8628dbd..efcd553 100644 --- a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoDetailsAdapterTest.java +++ b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoDetailsAdapterTest.java @@ -1,5 +1,24 @@ package mvm.rya.mongodb.instance; +/* + * 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. + */ + import static org.junit.Assert.assertEquals; import java.util.Date; http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/12b8ce6d/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java index 05dab7e..447eb98 100644 --- a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java +++ b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java @@ -315,11 +315,15 @@ public class MongoRyaDetailsRepositoryIT { repo.initialize(details); // Create a new state for the details. + final RyaDetails wrongOriginal = new RyaDetails.Builder( details ) + .setTemporalIndexDetails( new TemporalIndexDetails(false) ) + .build(); + final RyaDetails updated = new RyaDetails.Builder( details ) - .setGeoIndexDetails( new GeoIndexDetails(false) ) - .build(); + .setGeoIndexDetails( new GeoIndexDetails(false) ) + .build(); // Try to execute the update where the old state is not the currently stored state. - repo.update(updated, updated); + repo.update(wrongOriginal, updated); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/12b8ce6d/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java b/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java index caf4a59..54b872c 100644 --- a/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java +++ b/extras/indexing/src/main/java/mvm/rya/sail/config/RyaSailFactory.java @@ -1,13 +1,5 @@ package mvm.rya.sail.config; -import java.net.UnknownHostException; - -import org.apache.accumulo.core.client.AccumuloException; -import org.apache.accumulo.core.client.AccumuloSecurityException; -import org.apache.accumulo.core.client.Connector; -import org.apache.hadoop.conf.Configuration; -import org.openrdf.sail.Sail; - /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -27,66 +19,70 @@ import org.openrdf.sail.Sail; * under the License. */ +import java.net.UnknownHostException; + +import org.apache.accumulo.core.client.AccumuloException; +import org.apache.accumulo.core.client.AccumuloSecurityException; +import org.apache.accumulo.core.client.Connector; +import org.apache.accumulo.core.client.Instance; +import org.apache.accumulo.core.client.security.tokens.PasswordToken; +import org.apache.hadoop.conf.Configuration; +import org.openrdf.sail.Sail; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.collect.Lists; +import com.mongodb.MongoClient; +import com.mongodb.MongoCredential; +import com.mongodb.ServerAddress; import mvm.rya.accumulo.AccumuloRdfConfiguration; import mvm.rya.accumulo.AccumuloRyaDAO; +import mvm.rya.accumulo.instance.AccumuloRyaInstanceDetailsRepository; import mvm.rya.api.RdfCloudTripleStoreConfiguration; +import mvm.rya.api.instance.RyaDetailsRepository.RyaDetailsRepositoryException; +import mvm.rya.api.instance.RyaDetailsToConfiguration; import mvm.rya.api.persist.RyaDAO; import mvm.rya.api.persist.RyaDAOException; import mvm.rya.indexing.accumulo.ConfigUtils; import mvm.rya.mongodb.MongoDBRdfConfiguration; import mvm.rya.mongodb.MongoDBRyaDAO; +import mvm.rya.mongodb.instance.MongoRyaInstanceDetailsRepository; import mvm.rya.rdftriplestore.RdfCloudTripleStore; import mvm.rya.rdftriplestore.inference.InferenceEngine; import mvm.rya.rdftriplestore.inference.InferenceEngineException; public class RyaSailFactory { - - + private static final Logger LOG = LoggerFactory.getLogger(RyaSailFactory.class); public static Sail getInstance(final Configuration conf) throws AccumuloException, - AccumuloSecurityException, RyaDAOException, InferenceEngineException, NumberFormatException, UnknownHostException { - + AccumuloSecurityException, RyaDAOException, InferenceEngineException { return getRyaSail(conf); } - - - private static Sail getRyaSail(final Configuration config) throws AccumuloException, AccumuloSecurityException, RyaDAOException, InferenceEngineException, NumberFormatException, UnknownHostException { - + private static Sail getRyaSail(final Configuration config) throws InferenceEngineException, RyaDAOException, AccumuloException, AccumuloSecurityException { final RdfCloudTripleStore store = new RdfCloudTripleStore(); - RyaDAO crdfdao = null; - RdfCloudTripleStoreConfiguration conf; - if (ConfigUtils.getUseMongo(config)) { - conf = new MongoDBRdfConfiguration(config); - conf.setTablePrefix(config.get(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX)); - ConfigUtils.setIndexers(conf); - - crdfdao = new MongoDBRyaDAO((MongoDBRdfConfiguration)conf); - crdfdao.init(); - - conf.setDisplayQueryPlan(true); - store.setRyaDAO(crdfdao); + final RyaDAO dao; + final RdfCloudTripleStoreConfiguration rdfConfig; + + final String user = config.get(ConfigUtils.CLOUDBASE_USER); + final String pswd = config.get(ConfigUtils.CLOUDBASE_PASSWORD); + final String instance = config.get(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX); + if(ConfigUtils.getUseMongo(config)) { + rdfConfig = new MongoDBRdfConfiguration(config); + final MongoClient client = updateMongoConfig((MongoDBRdfConfiguration) rdfConfig, user, pswd, instance); + dao = getMongoDAO((MongoDBRdfConfiguration)rdfConfig, client); } else { - final Connector connector = ConfigUtils.getConnector(config); - crdfdao = new AccumuloRyaDAO(); - ((AccumuloRyaDAO)crdfdao).setConnector(connector); - - conf = new AccumuloRdfConfiguration(config); - conf.setTablePrefix(config.get(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX)); // sets - // TablePrefixLayoutStrategy - ConfigUtils.setIndexers(conf); - conf.setDisplayQueryPlan(true); - - crdfdao.setConf(conf); - crdfdao.init(); - store.setRyaDAO(crdfdao); + rdfConfig = new AccumuloRdfConfiguration(config); + updateAccumuloConfig((AccumuloRdfConfiguration) rdfConfig, user, pswd, instance); + dao = getAccumuloDAO((AccumuloRdfConfiguration)rdfConfig); } + rdfConfig.setTablePrefix(instance); - if (conf.isInfer()){ + if (rdfConfig.isInfer()){ final InferenceEngine inferenceEngine = new InferenceEngine(); - inferenceEngine.setConf(conf); - inferenceEngine.setRyaDAO(crdfdao); + inferenceEngine.setConf(rdfConfig); + inferenceEngine.setRyaDAO(dao); inferenceEngine.init(); store.setInferenceEngine(inferenceEngine); } @@ -94,6 +90,61 @@ public class RyaSailFactory { return store; } + private static RyaDAO getMongoDAO(final MongoDBRdfConfiguration config, final MongoClient client) throws RyaDAOException { + MongoDBRyaDAO dao = null; + ConfigUtils.setIndexers(config); + if(client != null) { + dao = new MongoDBRyaDAO(config, client); + } else { + try { + dao = new MongoDBRyaDAO(config); + } catch (NumberFormatException | UnknownHostException e) { + throw new RyaDAOException("Unable to connect to mongo at the configured location.", e); + } + } + dao.init(); + return dao; + } + + private static RyaDAO getAccumuloDAO(final AccumuloRdfConfiguration config) throws AccumuloException, AccumuloSecurityException, RyaDAOException { + final Connector connector = ConfigUtils.getConnector(config); + final AccumuloRyaDAO dao = new AccumuloRyaDAO(); + dao.setConnector(connector); + + ConfigUtils.setIndexers(config); + config.setDisplayQueryPlan(true); + + dao.setConf(config); + dao.init(); + return dao; + } + private static MongoClient updateMongoConfig(final MongoDBRdfConfiguration config, final String user, final String pswd, final String instance) throws RyaDAOException { + final MongoCredential creds = MongoCredential.createCredential(user, instance, pswd.toCharArray()); + final String hostname = config.getMongoInstance(); + final int port = Integer.parseInt(config.getMongoPort()); + + MongoClient client = null; + try { + client = new MongoClient(new ServerAddress(hostname, port), Lists.newArrayList(creds)); + final MongoRyaInstanceDetailsRepository ryaDetailsRepo = new MongoRyaInstanceDetailsRepository(client, config.getCollectionName()); + RyaDetailsToConfiguration.addRyaDetailsToConfiguration(ryaDetailsRepo.getRyaInstanceDetails(), config); + } catch(final RyaDetailsRepositoryException e) { + LOG.info("Instance does not have a rya details collection, skipping.", e); + } catch (final UnknownHostException ue) { + throw new RyaDAOException("Unable to connect to mongo at the configured location.", ue); + } + return client; + } -} + private static void updateAccumuloConfig(final AccumuloRdfConfiguration config, final String user, final String pswd, final String instance) throws AccumuloException, AccumuloSecurityException { + try { + final PasswordToken pswdToken = new PasswordToken(pswd); + final Instance accInst = ConfigUtils.getInstance(config); + final AccumuloRyaInstanceDetailsRepository ryaDetailsRepo = new AccumuloRyaInstanceDetailsRepository(accInst.getConnector(user, pswdToken), instance); + RyaDetailsToConfiguration.addRyaDetailsToConfiguration(ryaDetailsRepo.getRyaInstanceDetails(), config); + } catch(final RyaDetailsRepositoryException e) { + LOG.info("Instance does not have a rya details collection, skipping.", e); + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/12b8ce6d/extras/indexing/src/test/java/mvm/rya/indexing/external/PcjIntegrationTestingUtil.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/mvm/rya/indexing/external/PcjIntegrationTestingUtil.java b/extras/indexing/src/test/java/mvm/rya/indexing/external/PcjIntegrationTestingUtil.java index 7646084..c11c7e2 100644 --- a/extras/indexing/src/test/java/mvm/rya/indexing/external/PcjIntegrationTestingUtil.java +++ b/extras/indexing/src/test/java/mvm/rya/indexing/external/PcjIntegrationTestingUtil.java @@ -101,9 +101,7 @@ public class PcjIntegrationTestingUtil { final AccumuloRdfConfiguration pcjConf = new AccumuloRdfConfiguration(); pcjConf.set(ConfigUtils.USE_PCJ, "true"); - pcjConf.set(ConfigUtils.USE_MOCK_INSTANCE, "true"); - pcjConf.set(ConfigUtils.CLOUDBASE_INSTANCE, instance); - pcjConf.setTablePrefix(tablePrefix); + populateTestConfig(instance, tablePrefix, pcjConf); final Sail pcjSail = RyaSailFactory.getInstance(pcjConf); final SailRepository pcjRepo = new SailRepository(pcjSail); @@ -117,16 +115,22 @@ public class PcjIntegrationTestingUtil { NumberFormatException, UnknownHostException { final AccumuloRdfConfiguration nonPcjConf = new AccumuloRdfConfiguration(); - nonPcjConf.set(ConfigUtils.USE_MOCK_INSTANCE, "true"); - nonPcjConf.set(ConfigUtils.CLOUDBASE_INSTANCE, instance); - nonPcjConf.setTablePrefix(tablePrefix); - + populateTestConfig(instance, tablePrefix, nonPcjConf); final Sail nonPcjSail = RyaSailFactory.getInstance(nonPcjConf); final SailRepository nonPcjRepo = new SailRepository(nonPcjSail); nonPcjRepo.initialize(); return nonPcjRepo; } + private static void populateTestConfig(final String instance, final String tablePrefix, final AccumuloRdfConfiguration config) { + config.set(ConfigUtils.USE_MOCK_INSTANCE, "true"); + config.set(ConfigUtils.CLOUDBASE_INSTANCE, instance); + config.set(ConfigUtils.CLOUDBASE_USER, "test_user"); + config.set(ConfigUtils.CLOUDBASE_PASSWORD, "pswd"); + config.set(ConfigUtils.CLOUDBASE_ZOOKEEPERS, "localhost"); + config.setTablePrefix(tablePrefix); + } + public static void closeAndShutdown(final SailRepositoryConnection connection, final SailRepository repo) throws RepositoryException { connection.close();