move addTakeoverListener() to the Server API

Make addTakeoverListener() part of the top-level server API, instead of
being specific to LibEventServerWithTakeover.  Servers that don't
support socket takeover simply ignore this call.

This will allow future server implementations to support socket
takeover.  This also allows us to start making the server creation logic
in HttpServer a bit more generic, since the code can always call
addTakeoverListener() without having to know if it really has a
LibEventServerWithTakeover or some other type of server.
Esse commit está contido em:
Adam Simpkins
2013-05-28 21:21:58 -07:00
commit de Sara Golemon
commit b69fe9baf1
4 arquivos alterados com 24 adições e 14 exclusões
+2 -2
Ver Arquivo
@@ -99,10 +99,10 @@ HttpServer::HttpServer(void *sslCTX /* = NULL */)
RuntimeOption::RequestTimeoutSeconds);
maybeEnableThrottle(server.get());
server->setTransferFilename(RuntimeOption::TakeoverFilename);
server->addTakeoverListener(this);
m_pageServer = server;
}
m_pageServer->setRequestHandlerFactory<HttpRequestHandler>();
m_pageServer->addTakeoverListener(this);
if (RuntimeOption::EnableSSL && m_sslCTX) {
assert(SSLInit::IsInited());
@@ -215,7 +215,7 @@ void HttpServer::onServerShutdown() {
}
}
void HttpServer::takeoverShutdown(LibEventServerWithTakeover* server) {
void HttpServer::takeoverShutdown(HPHP::Server* server) {
assert(server == m_pageServer.get());
// We want to synchronously shut down our satellite servers to free up ports,
// then asynchronously shut down everything else.
+2 -2
Ver Arquivo
@@ -34,7 +34,7 @@ public:
static time_t StartTime;
public:
HttpServer(void *sslCTX = nullptr);
explicit HttpServer(void *sslCTX = nullptr);
~HttpServer();
void run();
@@ -47,7 +47,7 @@ public:
void flushLog();
void watchDog();
void takeoverShutdown(LibEventServerWithTakeover* server);
void takeoverShutdown(HPHP::Server* server);
ServerPtr getPageServer() { return m_pageServer;}
@@ -22,8 +22,6 @@
namespace HPHP {
///////////////////////////////////////////////////////////////////////////////
class TakeoverListener;
/**
* LibEventServer that adds the ability to take over an accept socket
* from another process, and give its accept socket up.
@@ -42,10 +40,10 @@ public:
m_transfer_fname = fname;
}
void addTakeoverListener(TakeoverListener* lisener) {
virtual void addTakeoverListener(TakeoverListener* lisener) {
m_takeover_listeners.insert(lisener);
}
void removeTakeoverListener(TakeoverListener* lisener) {
virtual void removeTakeoverListener(TakeoverListener* lisener) {
m_takeover_listeners.erase(lisener);
}
@@ -67,12 +65,6 @@ protected:
bool m_took_over;
};
class TakeoverListener {
public:
virtual ~TakeoverListener();
virtual void takeoverShutdown(LibEventServerWithTakeover* server) = 0;
};
///////////////////////////////////////////////////////////////////////////////
}
+18
Ver Arquivo
@@ -85,6 +85,16 @@ public:
virtual void handleRequest(Transport *transport) = 0;
};
/**
* A callback to be informed when a server is shutting down because its socket
* has been taken over by a new process.
*/
class TakeoverListener {
public:
virtual ~TakeoverListener();
virtual void takeoverShutdown(Server* server) = 0;
};
typedef std::function<std::unique_ptr<RequestHandler>()> RequestHandlerFactory;
typedef std::function<bool(const std::string&)> URLChecker;
@@ -146,6 +156,14 @@ public:
m_urlChecker = checker;
}
/**
* Add or remove a TakeoverListener to this server.
*
* This is a no-op for servers that do not support socket takeover.
*/
virtual void addTakeoverListener(TakeoverListener* lisener) {}
virtual void removeTakeoverListener(TakeoverListener* lisener) {}
/**
* Informational.
*/