Make sure we only have one connection per satellite

refs #11014
This commit is contained in:
Gunnar Beutner 2016-01-25 10:57:06 +01:00
parent 5c23beb6a9
commit fbc638e0b8
3 changed files with 33 additions and 4 deletions

View File

@ -514,8 +514,19 @@ void ApiListener::ApiTimerHandler(void)
lmessage->Set("method", "log::SetLogPosition");
lmessage->Set("params", lparams);
BOOST_FOREACH(const JsonRpcConnection::Ptr& client, endpoint->GetClients())
client->SendMessage(lmessage);
double maxTs = 0;
BOOST_FOREACH(const JsonRpcConnection::Ptr& client, endpoint->GetClients()) {
if (client->GetTimestamp() > maxTs)
maxTs = client->GetTimestamp();
}
BOOST_FOREACH(const JsonRpcConnection::Ptr& client, endpoint->GetClients()) {
if (client->GetTimestamp() != maxTs)
client->Disconnect();
else
client->SendMessage(lmessage);
}
Log(LogNotice, "ApiListener")
<< "Setting log position for identity '" << endpoint->GetName() << "': "
@ -580,8 +591,19 @@ void ApiListener::SyncSendMessage(const Endpoint::Ptr& endpoint, const Dictionar
Log(LogNotice, "ApiListener")
<< "Sending message to '" << endpoint->GetName() << "'";
BOOST_FOREACH(const JsonRpcConnection::Ptr& client, endpoint->GetClients())
double maxTs = 0;
BOOST_FOREACH(const JsonRpcConnection::Ptr& client, endpoint->GetClients()) {
if (client->GetTimestamp() > maxTs)
maxTs = client->GetTimestamp();
}
BOOST_FOREACH(const JsonRpcConnection::Ptr& client, endpoint->GetClients()) {
if (client->GetTimestamp() != maxTs)
continue;
client->SendMessage(message);
}
}
}

View File

@ -41,7 +41,7 @@ static Timer::Ptr l_JsonRpcConnectionTimeoutTimer;
JsonRpcConnection::JsonRpcConnection(const String& identity, bool authenticated,
const TlsStream::Ptr& stream, ConnectionRole role)
: m_Identity(identity), m_Authenticated(authenticated), m_Stream(stream),
m_Role(role), m_Seen(Utility::GetTime()),
m_Role(role), m_Timestamp(Utility::GetTime()), m_Seen(Utility::GetTime()),
m_NextHeartbeat(0), m_HeartbeatTimeout(0)
{
boost::call_once(l_JsonRpcConnectionOnceFlag, &JsonRpcConnection::StaticInitialize);
@ -66,6 +66,11 @@ void JsonRpcConnection::Start(void)
DataAvailableHandler();
}
double JsonRpcConnection::GetTimestamp(void) const
{
return m_Timestamp;
}
String JsonRpcConnection::GetIdentity(void) const
{
return m_Identity;

View File

@ -57,6 +57,7 @@ public:
void Start(void);
double GetTimestamp(void) const;
String GetIdentity(void) const;
bool IsAuthenticated(void) const;
Endpoint::Ptr GetEndpoint(void) const;
@ -76,6 +77,7 @@ private:
Endpoint::Ptr m_Endpoint;
TlsStream::Ptr m_Stream;
ConnectionRole m_Role;
double m_Timestamp;
double m_Seen;
double m_NextHeartbeat;
double m_HeartbeatTimeout;