You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2011/06/05 05:28:08 UTC
svn commit: r1131600 - in /incubator/mesos/trunk/src: ft_messaging.cpp
ft_messaging.hpp
Author: benh
Date: Sun Jun 5 03:28:08 2011
New Revision: 1131600
URL: http://svn.apache.org/viewvc?rev=1131600&view=rev
Log:
resend of outstanding messages done in the right order to avoid unnecessary resends
Modified:
incubator/mesos/trunk/src/ft_messaging.cpp
incubator/mesos/trunk/src/ft_messaging.hpp
Modified: incubator/mesos/trunk/src/ft_messaging.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/ft_messaging.cpp?rev=1131600&r1=1131599&r2=1131600&view=diff
==============================================================================
--- incubator/mesos/trunk/src/ft_messaging.cpp (original)
+++ incubator/mesos/trunk/src/ft_messaging.cpp Sun Jun 5 03:28:08 2011
@@ -85,6 +85,7 @@ void FTMessaging::sendOutstanding() {
outMsgs.erase(ftId);
}
}
+
}
// Careful: not idempotent function.
@@ -118,13 +119,15 @@ bool FTMessaging::acceptMessage(string f
}
bool FTMessaging::acceptMessageAck(string from, string ftId) {
+ DLOG(INFO) << "FT: Received message with id: " << ftId << " sending FT_RELAY_ACK";
+
bool res = acceptMessage(from, ftId);
- if (!res)
- LOG(WARNING) << "FT: asked called to ignore duplicate message " << ftId;
-
- DLOG(INFO) << "FT: Received message with id: " << ftId << " sending FT_RELAY_ACK";
-
+ if (!res) {
+ LOG(WARNING) << "FT: asked caller to ignore duplicate message " << ftId;
+ return res;
+ }
+
string msgStr = Tuple<EmptyClass>::tupleToString( Tuple<EmptyClass>::pack<FT_RELAY_ACK>(ftId, from) );
Process::post(master, FT_RELAY_ACK, msgStr.data(), msgStr.size());
Modified: incubator/mesos/trunk/src/ft_messaging.hpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/ft_messaging.hpp?rev=1131600&r1=1131599&r2=1131600&view=diff
==============================================================================
--- incubator/mesos/trunk/src/ft_messaging.hpp (original)
+++ incubator/mesos/trunk/src/ft_messaging.hpp Sun Jun 5 03:28:08 2011
@@ -48,6 +48,7 @@
#include "messages.hpp"
#include "tuple.hpp"
#include "foreach.hpp"
+#include <ctime>
namespace nexus { namespace internal {
@@ -69,17 +70,19 @@ class EmptyClass {
struct FTStoredMsg {
FTStoredMsg(const string &_ftId, const string &_data, const MSGID &_id) :
- ftId(_ftId), data(_data), id(_id), count(0) {}
+ ftId(_ftId), data(_data), id(_id), count(1), ts(time(0)) {}
- FTStoredMsg() : ftId(""), data(""), id(), count(0) {}
+ FTStoredMsg() : ftId(""), data(""), id(), count(1), ts(time(0)) {}
string ftId;
string data;
MSGID id;
long count;
+ time_t ts; // not currently used
};
+
/**
* Singleton class that provides functionality for reliably sending messages,
* resending them on timeout, acking received messages, and dropping duplicates.
@@ -166,8 +169,14 @@ public:
private:
PID master;
+
+ class cmpstrs { public:
+ bool operator()(const string &s1, const string &s2) const { return s1.compare(s2) == -1 ? true : false; }
+ };
+
+ typedef map<string, FTStoredMsg, cmpstrs> OutMsgsMap;
- unordered_map<string, FTStoredMsg> outMsgs;
+ OutMsgsMap outMsgs;
unordered_map<string, string> inMsgs;