JAMES-2004 Cassandra should try to connect locally by default
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b62d8b6c Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b62d8b6c Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b62d8b6c Branch: refs/heads/master Commit: b62d8b6c19ef849952d5c53eb0930a6f9fb047e0 Parents: ac3fb27 Author: benwa <btell...@linagora.com> Authored: Tue Apr 18 13:35:55 2017 +0700 Committer: benwa <btell...@linagora.com> Committed: Fri Apr 21 08:27:41 2017 +0700 ---------------------------------------------------------------------- .../modules/mailbox/CassandraSessionModule.java | 66 +++++++++++--------- 1 file changed, 38 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/b62d8b6c/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java ---------------------------------------------------------------------- diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java index 7180599..9f11022 100644 --- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java +++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java @@ -18,18 +18,15 @@ ****************************************************************/ package org.apache.james.modules.mailbox; -import com.datastax.driver.core.Cluster; -import com.datastax.driver.core.PerHostPercentileTracker; -import com.datastax.driver.core.QueryLogger; -import com.datastax.driver.core.Session; -import com.datastax.driver.core.exceptions.NoHostAvailableException; -import com.github.steveash.guavate.Guavate; -import com.google.inject.AbstractModule; -import com.google.inject.Provides; -import com.google.inject.Singleton; -import com.google.inject.multibindings.Multibinder; -import com.nurkiewicz.asyncretry.AsyncRetryExecutor; -import com.nurkiewicz.asyncretry.function.RetryCallable; +import java.io.FileNotFoundException; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.james.backends.cassandra.components.CassandraModule; @@ -39,20 +36,24 @@ import org.apache.james.backends.cassandra.init.ClusterBuilder; import org.apache.james.backends.cassandra.init.ClusterWithKeyspaceCreatedFactory; import org.apache.james.backends.cassandra.init.QueryLoggerConfiguration; import org.apache.james.backends.cassandra.init.SessionWithInitializedTablesFactory; -import org.apache.james.filesystem.api.FileSystem; import org.apache.james.util.Host; +import org.apache.james.utils.PropertiesProvider; import org.apache.james.utils.RetryExecutorUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.FileNotFoundException; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; +import com.datastax.driver.core.Cluster; +import com.datastax.driver.core.PerHostPercentileTracker; +import com.datastax.driver.core.QueryLogger; +import com.datastax.driver.core.Session; +import com.datastax.driver.core.exceptions.NoHostAvailableException; +import com.github.steveash.guavate.Guavate; +import com.google.inject.AbstractModule; +import com.google.inject.Provides; +import com.google.inject.Singleton; +import com.google.inject.multibindings.Multibinder; +import com.nurkiewicz.asyncretry.AsyncRetryExecutor; +import com.nurkiewicz.asyncretry.function.RetryCallable; public class CassandraSessionModule extends AbstractModule { private static final Logger LOGGER = LoggerFactory.getLogger(CassandraSessionModule.class); @@ -60,8 +61,10 @@ public class CassandraSessionModule extends AbstractModule { private static final int DEFAULT_CONNECTION_MAX_RETRIES = 10; private static final int DEFAULT_CONNECTION_MIN_DELAY = 5000; private static final long CASSANDRA_HIGHEST_TRACKABLE_LATENCY_MILLIS = TimeUnit.SECONDS.toMillis(10); - public static final int DEFAULT_REPLICATION_FACTOR = 1; - public static final String DEFAULT_KEYSPACE = "apache_james"; + private static final int DEFAULT_REPLICATION_FACTOR = 1; + private static final String DEFAULT_KEYSPACE = "apache_james"; + private static final String CASSANDRA_NODES = "cassandra.nodes"; + private static final String LOCALHOST = "127.0.0.1"; @Override protected void configure() { @@ -87,8 +90,8 @@ public class CassandraSessionModule extends AbstractModule { @Provides @Singleton - CassandraSessionConfiguration getCassandraSessionConfiguration(FileSystem fileSystem) { - return () -> getConfiguration(fileSystem); + CassandraSessionConfiguration getCassandraSessionConfiguration(PropertiesProvider propertiesProvider) { + return () -> getConfiguration(propertiesProvider); } @Provides @@ -123,7 +126,7 @@ public class CassandraSessionModule extends AbstractModule { } private List<Host> listCassandraServers(PropertiesConfiguration configuration) { - String[] ipAndPorts = configuration.getStringArray("cassandra.nodes"); + String[] ipAndPorts = configuration.getStringArray(CASSANDRA_NODES); return Arrays.stream(ipAndPorts) .map(string -> Host.parseConfString(string, ClusterBuilder.DEFAULT_CASSANDRA_PORT)) @@ -177,7 +180,14 @@ public class CassandraSessionModule extends AbstractModule { return new AsyncRetryExecutor(scheduler); } - private PropertiesConfiguration getConfiguration(FileSystem fileSystem) throws FileNotFoundException, ConfigurationException { - return new PropertiesConfiguration(fileSystem.getFile(FileSystem.FILE_PROTOCOL_AND_CONF + "cassandra.properties")); + private PropertiesConfiguration getConfiguration(PropertiesProvider propertiesProvider) throws ConfigurationException { + try { + return propertiesProvider.getConfiguration("cassandra"); + } catch (FileNotFoundException e) { + LOGGER.warn("Could not locate cassandra configuration file. Defaulting to node " + LOCALHOST + ":9042"); + PropertiesConfiguration propertiesConfiguration = new PropertiesConfiguration(); + propertiesConfiguration.addProperty(CASSANDRA_NODES, LOCALHOST); + return propertiesConfiguration; + } } } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org