Permalink
Browse files

configurable ListenAddress setting. allows running multiple instances…

… of Cassandra

on a single machine or VM.  patch and review by Per Mellqvist, Eric Evans, and
jbellis for #43
  • Loading branch information...
1 parent a6f40ad commit d8f35bd9be2ed10eb76a0b5c77a9f4a98556870c Jonathan Ellis committed Apr 21, 2009
View
1 conf/storage-conf.xml
@@ -14,6 +14,7 @@
<RpcTimeoutInMillis>5000</RpcTimeoutInMillis>
<JobTrackerHost>tdsearch001.sf2p.facebook.com</JobTrackerHost>
<JobJarFileLocation>C:\Engagements\Cassandra-Nexus</JobJarFileLocation>
+ <ListenAddress>localhost</ListenAddress>
<StoragePort>7000</StoragePort>
<ControlPort>7001</ControlPort>
<ThriftPort>9160</ThriftPort>
View
11 src/org/apache/cassandra/config/DatabaseDescriptor.java
@@ -48,6 +48,7 @@
private static int controlPort_ = 7001;
private static int httpPort_ = 7002;
private static int thriftPort_ = 9160;
+ private static String listenAddress_; // leave null so we can fall through to getLocalHost
private static String clusterName_ = "Test";
private static int replicationFactor_ = 3;
private static long rpcTimeoutInMillis_ = 2000;
@@ -176,6 +177,11 @@
if ( port != null )
storagePort_ = Integer.parseInt(port);
+ /* Local IP or hostname to bind services to */
+ String listenAddress = xmlUtils.getNodeValue("/Storage/ListenAddress");
+ if ( listenAddress != null)
+ listenAddress_ = listenAddress;
+
/* UDP port for control messages */
port = xmlUtils.getNodeValue("/Storage/ControlPort");
if ( port != null )
@@ -800,4 +806,9 @@ public ConfigurationException(String message)
super(message);
}
}
+
+ public static String getListenAddress()
+ {
+ return listenAddress_;
+ }
}
View
5 src/org/apache/cassandra/net/EndPoint.java
@@ -30,6 +30,7 @@
import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.LogUtil;
import org.apache.log4j.Logger;
+import org.apache.cassandra.config.DatabaseDescriptor;
/**
* Author : Avinash Lakshman ( alakshman@facebook.com) & Prashant Malik ( pmalik@facebook.com )
@@ -81,12 +82,12 @@ public EndPoint(int port)
try
{
host_ = FBUtilities.getHostName();
- port_ = port;
}
catch (UnknownHostException e)
{
- logger_.warn(LogUtil.throwableToString(e));
+ throw new RuntimeException(e);
}
+ port_ = port;
}
public String getHost()
View
6 src/org/apache/cassandra/service/CassandraDaemon.java
@@ -20,6 +20,9 @@
import java.io.File;
import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.InetSocketAddress;
+import java.net.InetAddress;
import org.apache.log4j.Logger;
import org.apache.thrift.protocol.TBinaryProtocol;
@@ -30,6 +33,7 @@
import org.apache.thrift.transport.TTransportFactory;
import org.apache.thrift.TProcessorFactory;
import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.utils.FBUtilities;
/**
* This class supports two methods for creating a Cassandra node daemon,
@@ -65,7 +69,7 @@ public void uncaughtException(Thread t, Throwable e)
Cassandra.Processor processor = new Cassandra.Processor(peerStorageServer);
// Transport
- TServerSocket tServerSocket = new TServerSocket(listenPort);
+ TServerSocket tServerSocket = new TServerSocket(new InetSocketAddress(FBUtilities.getHostName(), listenPort));
// Protocol factory
TProtocolFactory tProtocolFactory = new TBinaryProtocol.Factory();
View
6 src/org/apache/cassandra/utils/FBUtilities.java
@@ -40,6 +40,8 @@
import java.util.zip.Deflater;
import java.util.zip.Inflater;
+import org.apache.cassandra.config.DatabaseDescriptor;
+
/**
* Author : Avinash Lakshman ( alakshman@facebook.com) & Prashant Malik ( pmalik@facebook.com )
*/
@@ -148,6 +150,10 @@ public static InetAddress getLocalAddress() throws UnknownHostException
public static String getHostName() throws UnknownHostException
{
+ if (DatabaseDescriptor.getListenAddress() != null)
+ {
+ return DatabaseDescriptor.getListenAddress();
+ }
return getLocalAddress().getCanonicalHostName();
}
View
1 test/conf/storage-conf.xml
@@ -14,6 +14,7 @@
<RpcTimeoutInMillis>5000</RpcTimeoutInMillis>
<JobTrackerHost>tdsearch001.sf2p.facebook.com</JobTrackerHost>
<JobJarFileLocation>C:\Engagements\Cassandra-Nexus</JobJarFileLocation>
+ <ListenAddress>127.0.0.1</ListenAddress>
<StoragePort>7000</StoragePort>
<ControlPort>7001</ControlPort>
<ThriftPort>7001</ThriftPort>

0 comments on commit d8f35bd

Please sign in to comment.