Author: jbellis
Date: Tue Aug 24 14:49:23 2010
New Revision: 988578
URL: http://svn.apache.org/viewvc?rev=988578&view=rev
Log:
allow loading cassandra.yaml from url specified by cassandra.config system
property. patch by jbellis; reviewed by gdusbabek for CASSANDRA-1126
Modified:
cassandra/trunk/CHANGES.txt
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
cassandra/trunk/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java
Modified: cassandra/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=988578&r1=988577&r2=988578&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Tue Aug 24 14:49:23 2010
@@ -29,6 +29,8 @@ dev
* config-converter properly handles snitches and framed support
(CASSANDRA-1420)
* remove keyspace argument from multiget_count (CASSANDRA-1422)
+ * allow specifying cassandra.yaml location as (local or remote) URL
+ (CASSANDRA-1126)
0.7-beta1
Modified:
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java?rev=988578&r1=988577&r2=988578&view=diff
==============================================================================
---
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
(original)
+++
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
Tue Aug 24 14:49:23 2010
@@ -23,6 +23,7 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.net.InetAddress;
+import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.*;
@@ -43,7 +44,6 @@ import org.apache.cassandra.db.clock.Abs
import org.apache.cassandra.db.clock.TimestampReconciler;
import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.db.marshal.AbstractType;
-import org.apache.cassandra.db.marshal.BytesType;
import org.apache.cassandra.db.migration.Migration;
import org.apache.cassandra.dht.IPartitioner;
import org.apache.cassandra.io.util.FileUtils;
@@ -78,16 +78,13 @@ public class DatabaseDescriptor
/* Hashing strategy Random or OPHF */
private static IPartitioner partitioner;
- // the path qualified config file (cassandra.yaml) name
- private static String configFileName;
-
private static Config.DiskAccessMode indexAccessMode;
private static Config conf;
private static IAuthenticator authenticator = new AllowAllAuthenticator();
- private final static String STORAGE_CONF_FILE = "cassandra.yaml";
+ private final static String DEFAULT_CONFIGURATION = "cassandra.yaml";
private static IRequestScheduler requestScheduler;
private static RequestSchedulerId requestSchedulerId;
@@ -97,27 +94,39 @@ public class DatabaseDescriptor
private static UUID defsVersion = INITIAL_VERSION;
/**
- * Inspect the classpath to find STORAGE_CONF_FILE.
+ * Inspect the classpath to find storage configuration file
*/
- static String getStorageConfigPath() throws ConfigurationException
+ static URL getStorageConfigURL() throws ConfigurationException
{
- ClassLoader loader = DatabaseDescriptor.class.getClassLoader();
- URL scpurl = loader.getResource(STORAGE_CONF_FILE);
- if (scpurl != null)
- return scpurl.getFile();
- throw new ConfigurationException("Cannot locate " + STORAGE_CONF_FILE
+ " on the classpath");
+ String configUrl = System.getProperty("cassandra.config");
+ if (configUrl == null)
+ configUrl = DEFAULT_CONFIGURATION;
+
+ URL url;
+ try
+ {
+ url = new URL(configUrl);
+ }
+ catch (MalformedURLException e)
+ {
+ ClassLoader loader = DatabaseDescriptor.class.getClassLoader();
+ url = loader.getResource(configUrl);
+ if (url == null)
+ throw new ConfigurationException("Cannot locate " + configUrl);
+ }
+
+ return url;
}
static
{
try
{
- configFileName = getStorageConfigPath();
-
+ URL url = getStorageConfigURL();
if (logger.isDebugEnabled())
- logger.info("Loading settings from " + configFileName);
+ logger.info("Loading settings from " + url);
- InputStream input = new FileInputStream(new File(configFileName));
+ InputStream input = url.openStream();
org.yaml.snakeyaml.constructor.Constructor constructor = new
org.yaml.snakeyaml.constructor.Constructor(Config.class);
TypeDescription desc = new TypeDescription(Config.class);
desc.putListPropertyType("keyspaces", RawKeyspace.class);
@@ -510,8 +519,8 @@ public class DatabaseDescriptor
// since we loaded definitions from local storage, log a warning
if definitions exist in yaml.
if (conf.keyspaces != null && conf.keyspaces.size() > 0)
- logger.warn("Schema definitions were defined both locally and
in " + STORAGE_CONF_FILE +
- ". Definitions in " + STORAGE_CONF_FILE + " were
ignored.");
+ logger.warn("Schema definitions were defined both locally and
in " + DEFAULT_CONFIGURATION +
+ ". Definitions in " + DEFAULT_CONFIGURATION + " were
ignored.");
}
CFMetaData.fixMaxId();
@@ -805,10 +814,6 @@ public class DatabaseDescriptor
return conf.cluster_name;
}
- public static String getConfigFileName() {
- return configFileName;
- }
-
public static String getJobJarLocation()
{
return conf.job_jar_file_location;
Modified:
cassandra/trunk/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java?rev=988578&r1=988577&r2=988578&view=diff
==============================================================================
---
cassandra/trunk/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java
(original)
+++
cassandra/trunk/test/unit/org/apache/cassandra/config/DatabaseDescriptorTest.java
Tue Aug 24 14:49:23 2010
@@ -52,12 +52,6 @@ public class DatabaseDescriptorTest
}
@Test
- public void testShouldHaveConfigFileNameAvailable()
- {
- assertNotNull(DatabaseDescriptor.getConfigFileName(),
"DatabaseDescriptor should always be able to return the file name of the config
file");
- }
-
- @Test
public void testCFMetaDataSerialization() throws IOException,
ConfigurationException
{
// test serialization of all defined test CFs.