Permalink
Browse files

configurable ListenAddress setting. allows running multiple instances…

… of Cassandra on a single machine or VM. patch by Per Mellqvist; reviewed by Eric Evans for #43
  • Loading branch information...
Jonathan Ellis
Jonathan Ellis committed Apr 21, 2009
1 parent c6e94d2 commit 08d8454508fec78f60383c0c6a3646d6fb501362
View
@@ -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>9160</ThriftPort>
@@ -48,6 +48,7 @@
private static int controlPort_ = 7001;
private static int httpPort_ = 7002;
private static int thriftPort_ = 9160;
+ private static String listenAddress_ = "localhost";
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_;
+ }
}
@@ -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 )
@@ -80,7 +81,14 @@ public EndPoint(int port)
{
try
{
- host_ = FBUtilities.getHostName();
+ if(DatabaseDescriptor.getListenAddress() != null)
+ {
+ host_ = DatabaseDescriptor.getListenAddress();
+ }
+ else
+ {
+ host_ = FBUtilities.getHostName();
+ }
port_ = port;
}
catch (UnknownHostException e)
@@ -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;
@@ -65,7 +68,22 @@ public void uncaughtException(Thread t, Throwable e)
Cassandra.Processor processor = new Cassandra.Processor(peerStorageServer);
// Transport
- TServerSocket tServerSocket = new TServerSocket(listenPort);
+ TServerSocket tServerSocket = null;
+ try
+ {
+ // Make server socket
+ ServerSocket serverSocket = new ServerSocket();
+ // Prevent 2MSL delay problem on server restarts
+ serverSocket.setReuseAddress(true);
+ // Bind to listening port
+ serverSocket.bind(new InetSocketAddress(DatabaseDescriptor.getListenAddress(), listenPort));
+ tServerSocket = new TServerSocket(serverSocket);
+ }
+ catch (IOException ioe)
+ {
+ throw new TTransportException("Could not create ServerSocket on address "
+ + DatabaseDescriptor.getListenAddress() + ".");
+ }
// Protocol factory
TProtocolFactory tProtocolFactory = new TBinaryProtocol.Factory();
@@ -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 08d8454

Please sign in to comment.