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 11:28:03 UTC
svn commit: r1132340 - in /incubator/mesos/trunk/third_party/libprocess:
include/process/process.hpp src/process.cpp src/tests.cpp
Author: benh
Date: Sun Jun 5 09:28:02 2011
New Revision: 1132340
URL: http://svn.apache.org/viewvc?rev=1132340&view=rev
Log:
Updates to libprocess to support better 'closures' for handling HTTP requests.
Modified:
incubator/mesos/trunk/third_party/libprocess/include/process/process.hpp
incubator/mesos/trunk/third_party/libprocess/src/process.cpp
incubator/mesos/trunk/third_party/libprocess/src/tests.cpp
Modified: incubator/mesos/trunk/third_party/libprocess/include/process/process.hpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/third_party/libprocess/include/process/process.hpp?rev=1132340&r1=1132339&r2=1132340&view=diff
==============================================================================
--- incubator/mesos/trunk/third_party/libprocess/include/process/process.hpp (original)
+++ incubator/mesos/trunk/third_party/libprocess/include/process/process.hpp Sun Jun 5 09:28:02 2011
@@ -103,23 +103,30 @@ protected:
bool ready(int fd, int op);
/* Returns sub-second elapsed time (according to this process). */
- double elapsed();
+ double elapsedTime();
/* Install a handler for a message. */
+ void installMessageHandler(const std::string& name, const std::tr1::function<void()>& handler)
+ {
+ messageHandlers[name] = handler;
+ }
+
template <typename T>
- void install(const std::string& name, void (T::*method)())
+ void installMessageHandler(const std::string& name, void (T::*method)())
{
- message_handlers[name] =
- std::tr1::bind(method, static_cast<T*>(this));
+ installMessageHandler(name, std::tr1::bind(method, static_cast<T*>(this)));
}
/* Install a handler for an HTTP request. */
+ void installHttpHandler(const std::string& name, const std::tr1::function<Promise<HttpResponse>(const HttpRequest&)>& handler)
+ {
+ httpHandlers[name] = handler;
+ }
+
template <typename T>
- void install(const std::string& name,
- Promise<HttpResponse> (T::*method)(const HttpRequest&))
+ void installHttpHandler(const std::string& name, Promise<HttpResponse> (T::*method)(const HttpRequest&))
{
- http_handlers[name] =
- std::tr1::bind(method, static_cast<T*>(this), std::tr1::placeholders::_1);
+ installHttpHandler(name, std::tr1::bind(method, static_cast<T*>(this), std::tr1::placeholders::_1));
}
private:
@@ -166,10 +173,10 @@ private:
std::deque<std::tr1::function<void(ProcessBase*)>*> delegators;
/* Handlers for messages. */
- std::map<std::string, std::tr1::function<void(void)> > message_handlers;
+ std::map<std::string, std::tr1::function<void(void)> > messageHandlers;
/* Handlers for HTTP requests. */
- std::map<std::string, std::tr1::function<Promise<HttpResponse>(const HttpRequest&)> > http_handlers;
+ std::map<std::string, std::tr1::function<Promise<HttpResponse>(const HttpRequest&)> > httpHandlers;
/* Current message. */
Message* current;
Modified: incubator/mesos/trunk/third_party/libprocess/src/process.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/third_party/libprocess/src/process.cpp?rev=1132340&r1=1132339&r2=1132340&view=diff
==============================================================================
--- incubator/mesos/trunk/third_party/libprocess/src/process.cpp (original)
+++ incubator/mesos/trunk/third_party/libprocess/src/process.cpp Sun Jun 5 09:28:02 2011
@@ -2855,8 +2855,8 @@ string ProcessBase::serve(double secs, b
size_t index = request->first->path.find('/', 1);
index = index != string::npos ? index + 1 : request->first->path.size();
const string& name = request->first->path.substr(index);
- if (http_handlers.count(name) > 0) {
- http_handlers[name](*request->first).associate(*request->second);
+ if (httpHandlers.count(name) > 0) {
+ httpHandlers[name](*request->first).associate(*request->second);
} else {
VLOG(1) << "Returning '404 Not Found' for HTTP request for '"
<< request->first->path << "'";
@@ -2871,8 +2871,8 @@ string ProcessBase::serve(double secs, b
delete delegator;
continue;
} else if ((current = dequeue<Message>()) != NULL) {
- if (message_handlers.count(name()) > 0) {
- message_handlers[name()]();
+ if (messageHandlers.count(name()) > 0) {
+ messageHandlers[name()]();
continue;
} else {
return name();
@@ -3013,7 +3013,7 @@ bool ProcessBase::ready(int fd, int op)
}
-double ProcessBase::elapsed()
+double ProcessBase::elapsedTime()
{
double now = 0;
Modified: incubator/mesos/trunk/third_party/libprocess/src/tests.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/third_party/libprocess/src/tests.cpp?rev=1132340&r1=1132339&r2=1132340&view=diff
==============================================================================
--- incubator/mesos/trunk/third_party/libprocess/src/tests.cpp (original)
+++ incubator/mesos/trunk/third_party/libprocess/src/tests.cpp Sun Jun 5 09:28:02 2011
@@ -116,24 +116,28 @@ TEST(libprocess, call)
}
-class InstallMockProcess : public Process<InstallMockProcess>
+class HandlersMockProcess : public Process<HandlersMockProcess>
{
public:
- InstallMockProcess() { install("func", &InstallMockProcess::func); }
+ HandlersMockProcess()
+ {
+ installMessageHandler("func", &HandlersMockProcess::func);
+ }
+
MOCK_METHOD0(func, void());
};
-TEST(libprocess, install)
+TEST(libprocess, handlers)
{
ASSERT_TRUE(GTEST_IS_THREADSAFE);
- InstallMockProcess process;
+ HandlersMockProcess process;
EXPECT_CALL(process, func())
.Times(1);
- PID<InstallMockProcess> pid = process::spawn(&process);
+ PID<HandlersMockProcess> pid = process::spawn(&process);
ASSERT_FALSE(!pid);