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

git-svn-id: https://svn.apache.org/repos/asf/incubator/cassandra/trunk@767168 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jonathan Ellis 2009-04-21 14:56:22 +00:00
parent 04010ca15a
commit fb0e28d664
5 changed files with 41 additions and 2 deletions

View File

@ -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>

View File

@ -48,6 +48,7 @@ public class DatabaseDescriptor
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 @@ public class DatabaseDescriptor
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 class DatabaseDescriptor
super(message);
}
}
public static String getListenAddress()
{
return listenAddress_;
}
}

View File

@ -30,6 +30,7 @@ import java.util.Map;
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 class EndPoint implements Serializable, Comparable<EndPoint>
{
try
{
host_ = FBUtilities.getHostName();
if(DatabaseDescriptor.getListenAddress() != null)
{
host_ = DatabaseDescriptor.getListenAddress();
}
else
{
host_ = FBUtilities.getHostName();
}
port_ = port;
}
catch (UnknownHostException e)

View File

@ -20,6 +20,9 @@ package org.apache.cassandra.service;
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 class CassandraDaemon
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();

View File

@ -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>