Update our LAST_UPDATED column every minute while we're alive so that if we
lose connection with a peer for any reason, it will notice that we're still alive and reconnect. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@4732 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -579,6 +579,9 @@ public class PeerManager
|
|||||||
_invoker.postUnit(new Invoker.Unit() {
|
_invoker.postUnit(new Invoker.Unit() {
|
||||||
public boolean invoke () {
|
public boolean invoke () {
|
||||||
try {
|
try {
|
||||||
|
// let the world know that we're alive
|
||||||
|
_noderepo.heartbeatNode(_nodeName);
|
||||||
|
// then load up all the peer records
|
||||||
_nodes = _noderepo.loadNodes();
|
_nodes = _noderepo.loadNodes();
|
||||||
return true;
|
return true;
|
||||||
} catch (PersistenceException pe) {
|
} catch (PersistenceException pe) {
|
||||||
|
|||||||
@@ -51,8 +51,7 @@ public class NodeRecord
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Creates a record for the specified node. */
|
/** Creates a record for the specified node. */
|
||||||
public NodeRecord (String nodeName, String hostName, String publicHostName,
|
public NodeRecord (String nodeName, String hostName, String publicHostName, int port)
|
||||||
int port)
|
|
||||||
{
|
{
|
||||||
this.nodeName = nodeName;
|
this.nodeName = nodeName;
|
||||||
this.hostName = hostName;
|
this.hostName = hostName;
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ package com.threerings.presents.peer.server.persist;
|
|||||||
|
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Timestamp;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import com.samskivert.io.PersistenceException;
|
import com.samskivert.io.PersistenceException;
|
||||||
@@ -38,15 +39,14 @@ import com.samskivert.jdbc.jora.Table;
|
|||||||
*/
|
*/
|
||||||
public class NodeRepository extends JORARepository
|
public class NodeRepository extends JORARepository
|
||||||
{
|
{
|
||||||
/** The database identifier used when establishing a database connection.
|
/** The database identifier used when establishing a database connection. This value being
|
||||||
* This value being <code>nodedb</code>. */
|
* <code>nodedb</code>. */
|
||||||
public static final String NODE_DB_IDENT = "nodedb";
|
public static final String NODE_DB_IDENT = "nodedb";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new repository with the specified connection provider.
|
* Constructs a new repository with the specified connection provider.
|
||||||
*
|
*
|
||||||
* @param conprov the connection provider via which we will obtain our
|
* @param conprov the connection provider via which we will obtain our database connection.
|
||||||
* database connection.
|
|
||||||
*/
|
*/
|
||||||
public NodeRepository (ConnectionProvider conprov)
|
public NodeRepository (ConnectionProvider conprov)
|
||||||
throws PersistenceException
|
throws PersistenceException
|
||||||
@@ -64,15 +64,28 @@ public class NodeRepository extends JORARepository
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the supplied node record, inserting it into the database if
|
* Updates the supplied node record, inserting it into the database if necessary.
|
||||||
* necessary.
|
|
||||||
*/
|
*/
|
||||||
public void updateNode (NodeRecord record)
|
public void updateNode (NodeRecord record)
|
||||||
throws PersistenceException
|
throws PersistenceException
|
||||||
{
|
{
|
||||||
|
record.lastUpdated = new Timestamp(System.currentTimeMillis());
|
||||||
store(_ntable, record);
|
store(_ntable, record);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates {@link NodeRecord#lastUpdated} for the specified node, indicating that the node is
|
||||||
|
* alive and well.
|
||||||
|
*/
|
||||||
|
public void heartbeatNode (String nodeName)
|
||||||
|
throws PersistenceException
|
||||||
|
{
|
||||||
|
NodeRecord record = new NodeRecord();
|
||||||
|
record.nodeName = nodeName;
|
||||||
|
record.lastUpdated = new Timestamp(System.currentTimeMillis());
|
||||||
|
updateField(_ntable, record, "lastUpdated");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deletes the identified node record.
|
* Deletes the identified node record.
|
||||||
*/
|
*/
|
||||||
@@ -104,8 +117,7 @@ public class NodeRepository extends JORARepository
|
|||||||
@Override // documentation inherited
|
@Override // documentation inherited
|
||||||
protected void createTables ()
|
protected void createTables ()
|
||||||
{
|
{
|
||||||
_ntable = new Table<NodeRecord>(
|
_ntable = new Table<NodeRecord>(NodeRecord.class, "NODES", "NODE_NAME", true);
|
||||||
NodeRecord.class, "NODES", "NODE_NAME", true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Table<NodeRecord> _ntable;
|
protected Table<NodeRecord> _ntable;
|
||||||
|
|||||||
Reference in New Issue
Block a user