Updates to support a public facing and back-channel host for each node.

git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4254 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Michael Bayne
2006-07-06 23:52:55 +00:00
parent 8df1c91699
commit c0628363cb
3 changed files with 33 additions and 7 deletions
@@ -89,16 +89,21 @@ public class PeerManager
* @param sharedSecret a shared secret used to allow the peers to * @param sharedSecret a shared secret used to allow the peers to
* authenticate with one another. * authenticate with one another.
* @param hostName the DNS name of the server running this node. * @param hostName the DNS name of the server running this node.
* @param publicHostName if non-null, a separate public DNS hostname by
* which the node is to be known to normal clients (we may want inter-peer
* communication to take place over a different network than the
* communication between real clients and the various peer servers).
* @param port the port on which other nodes should connect to us. * @param port the port on which other nodes should connect to us.
* @param conprov used to obtain our JDBC connections. * @param conprov used to obtain our JDBC connections.
* @param invoker we will perform all database operations on the supplied * @param invoker we will perform all database operations on the supplied
* invoker thread. * invoker thread.
*/ */
public void init (String nodeName, String sharedSecret, public void init (String nodeName, String sharedSecret, String hostName,
String hostName, int port) String publicHostName, int port)
{ {
_nodeName = nodeName; _nodeName = nodeName;
_hostName = hostName; _hostName = hostName;
_publicHostName = (publicHostName == null) ? publicHostName : hostName;
_port = port; _port = port;
_sharedSecret = sharedSecret; _sharedSecret = sharedSecret;
@@ -206,7 +211,8 @@ public class PeerManager
// register ourselves with the node table // register ourselves with the node table
_invoker.postUnit(new Invoker.Unit() { _invoker.postUnit(new Invoker.Unit() {
public boolean invoke () { public boolean invoke () {
NodeRecord record = new NodeRecord(_nodeName, _hostName, _port); NodeRecord record = new NodeRecord(
_nodeName, _hostName, _publicHostName, _port);
try { try {
_noderepo.updateNode(record); _noderepo.updateNode(record);
} catch (PersistenceException pe) { } catch (PersistenceException pe) {
@@ -272,7 +278,7 @@ public class PeerManager
{ {
PeerNode peer = _peers.get(record.nodeName); PeerNode peer = _peers.get(record.nodeName);
if (peer == null) { if (peer == null) {
_peers.put(record.nodeName, peer = new PeerNode(record)); _peers.put(record.nodeName, peer = createPeerNode(record));
} }
peer.refresh(record); peer.refresh(record);
} }
@@ -302,6 +308,15 @@ public class PeerManager
info.username = client.getCredentials().getUsername(); info.username = client.getCredentials().getUsername();
} }
/**
* Creates a {@link PeerNode} to manage our connection to the specified
* peer.
*/
protected PeerNode createPeerNode (NodeRecord record)
{
return new PeerNode(record);
}
/** /**
* Contains all runtime information for one of our peer nodes. * Contains all runtime information for one of our peer nodes.
*/ */
@@ -422,7 +437,7 @@ public class PeerManager
protected long _lastConnectStamp; protected long _lastConnectStamp;
} }
protected String _nodeName, _hostName, _sharedSecret; protected String _nodeName, _hostName, _publicHostName, _sharedSecret;
protected int _port; protected int _port;
protected Invoker _invoker; protected Invoker _invoker;
protected NodeRepository _noderepo; protected NodeRepository _noderepo;
@@ -33,9 +33,12 @@ public class NodeRecord
/** The unique name assigned to this node. */ /** The unique name assigned to this node. */
public String nodeName; public String nodeName;
/** The DNS name of the server running this node. */ /** The DNS name used to connect to this node by other peers. */
public String hostName; public String hostName;
/** The DNS name used to connect to this node by normal clients. */
public String publicHostName;
/** The port on which to connect to this node. */ /** The port on which to connect to this node. */
public int port; public int port;
@@ -48,10 +51,12 @@ public class NodeRecord
} }
/** Creates a record for the specified node. */ /** Creates a record for the specified node. */
public NodeRecord (String nodeName, String hostName, int port) public NodeRecord (String nodeName, String hostName, String publicHostName,
int port)
{ {
this.nodeName = nodeName; this.nodeName = nodeName;
this.hostName = hostName; this.hostName = hostName;
this.publicHostName = publicHostName;
this.port = port; this.port = port;
} }
@@ -80,10 +80,16 @@ public class NodeRepository extends JORARepository
JDBCUtil.createTableIfMissing(conn, "NODES", new String[] { JDBCUtil.createTableIfMissing(conn, "NODES", new String[] {
"NODE_NAME VARCHAR(64) NOT NULL", "NODE_NAME VARCHAR(64) NOT NULL",
"HOST_NAME VARCHAR(64) NOT NULL", "HOST_NAME VARCHAR(64) NOT NULL",
"PUBLIC_HOST_NAME VARCHAR(64) NOT NULL",
"PORT INTEGER NOT NULL", "PORT INTEGER NOT NULL",
"LAST_UPDATED TIMESTAMP NOT NULL", "LAST_UPDATED TIMESTAMP NOT NULL",
"PRIMARY KEY (NODE_NAME)", "PRIMARY KEY (NODE_NAME)",
}, ""); }, "");
// TEMP: add our new column
JDBCUtil.addColumn(conn, "NODES", "PUBLIC_HOST_NAME",
"VARCHAR(64) NOT NULL", "HOST_NAME");
// END TEMP
} }
@Override // documentation inherited @Override // documentation inherited