|
|
|
@ -65,7 +65,6 @@ using namespace Transport::Util;
@@ -65,7 +65,6 @@ using namespace Transport::Util;
|
|
|
|
|
|
|
|
|
|
namespace Transport { |
|
|
|
|
|
|
|
|
|
static unsigned long backend_id; |
|
|
|
|
static unsigned long bytestream_id; |
|
|
|
|
|
|
|
|
|
DEFINE_LOGGER(logger, "NetworkPluginServer"); |
|
|
|
@ -260,7 +259,7 @@ NetworkPluginServer::~NetworkPluginServer() {
@@ -260,7 +259,7 @@ NetworkPluginServer::~NetworkPluginServer() {
|
|
|
|
|
// delete m_rosterResponder;
|
|
|
|
|
// delete m_blockResponder;
|
|
|
|
|
} |
|
|
|
|
unsigned long NetworkPluginServer::spawnBackend(const char *backend_id) { |
|
|
|
|
unsigned long NetworkPluginServer::spawnBackend() { |
|
|
|
|
std::string binaryPath = CONFIG_STRING(m_config, "service.backend"); |
|
|
|
|
std::vector<const char *> binaryArgs = {binaryPath.c_str()}; |
|
|
|
|
binaryArgs.push_back("--host"); |
|
|
|
@ -308,7 +307,7 @@ void NetworkPluginServer::start() {
@@ -308,7 +307,7 @@ void NetworkPluginServer::start() {
|
|
|
|
|
<< CONFIG_STRING(m_config, "service.backend_port")); |
|
|
|
|
|
|
|
|
|
while (true) { |
|
|
|
|
unsigned long pid = spawnBackend("1"); |
|
|
|
|
unsigned long pid = spawnBackend(); |
|
|
|
|
LOG4CXX_INFO(logger, "Tried to spawn first backend with pid " << pid); |
|
|
|
|
LOG4CXX_INFO(logger, "Backend should now connect to Spectrum2 instance. Spectrum2 " |
|
|
|
|
"won't accept any connection before backend connects"); |
|
|
|
@ -1984,7 +1983,6 @@ void NetworkPluginServer::sendPing(Backend *c) {
@@ -1984,7 +1983,6 @@ void NetworkPluginServer::sendPing(Backend *c) {
|
|
|
|
|
} else { |
|
|
|
|
LOG4CXX_WARN(logger, "Tried to send PING to backend without connection: " << c << " (ID=" << c->id << ")"); |
|
|
|
|
} |
|
|
|
|
// LOG4CXX_INFO(logger, "PING to " << c);
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void NetworkPluginServer::sendAPIVersion(Backend *c) { |
|
|
|
@ -2003,50 +2001,7 @@ void NetworkPluginServer::sendAPIVersion(Backend *c) {
@@ -2003,50 +2001,7 @@ void NetworkPluginServer::sendAPIVersion(Backend *c) {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void NetworkPluginServer::handlePIDTerminated(unsigned long pid) { |
|
|
|
|
std::vector<unsigned long>::iterator log_id_it; |
|
|
|
|
log_id_it = std::find(m_pids.begin(), m_pids.end(), pid); |
|
|
|
|
if (log_id_it != m_pids.end()) { |
|
|
|
|
*log_id_it = 0; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int sig_block_count = 0; |
|
|
|
|
static sigset_t block_mask; |
|
|
|
|
|
|
|
|
|
static void __block_signals(void) { |
|
|
|
|
static int init_done = 0; |
|
|
|
|
|
|
|
|
|
if ((sig_block_count++) != 1) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
if (init_done == 0) { |
|
|
|
|
sigemptyset(&block_mask); |
|
|
|
|
sigaddset(&block_mask, SIGPIPE); |
|
|
|
|
sigaddset(&block_mask, SIGHUP); |
|
|
|
|
sigaddset(&block_mask, SIGINT); |
|
|
|
|
sigaddset(&block_mask, SIGQUIT); |
|
|
|
|
sigaddset(&block_mask, SIGTERM); |
|
|
|
|
sigaddset(&block_mask, SIGABRT); |
|
|
|
|
sigaddset(&block_mask, SIGCHLD); |
|
|
|
|
init_done = 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
sigprocmask(SIG_BLOCK, &block_mask, NULL); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void __unblock_signals(void) { |
|
|
|
|
sigset_t sigset; |
|
|
|
|
|
|
|
|
|
if ((sig_block_count--) != 0) |
|
|
|
|
return; |
|
|
|
|
sigprocmask(SIG_UNBLOCK, &block_mask, NULL); |
|
|
|
|
|
|
|
|
|
if (sigpending(&sigset) == 0) { |
|
|
|
|
if (sigismember(&sigset, SIGCHLD)) { |
|
|
|
|
raise(SIGCHLD); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
m_pids.erase(std::remove(m_pids.begin(), m_pids.end(), pid), m_pids.end()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
NetworkPluginServer::Backend *NetworkPluginServer::getFreeClient(bool acceptUsers, bool longRun, bool check) { |
|
|
|
@ -2090,22 +2045,8 @@ NetworkPluginServer::Backend *NetworkPluginServer::getFreeClient(bool acceptUser
@@ -2090,22 +2045,8 @@ NetworkPluginServer::Backend *NetworkPluginServer::getFreeClient(bool acceptUser
|
|
|
|
|
m_isNextLongRun = longRun; |
|
|
|
|
m_startingBackend = true; |
|
|
|
|
|
|
|
|
|
__block_signals(); |
|
|
|
|
std::vector<unsigned long>::iterator log_id_it; |
|
|
|
|
log_id_it = std::find(m_pids.begin(), m_pids.end(), 0); |
|
|
|
|
std::string log_id = ""; |
|
|
|
|
if (log_id_it == m_pids.end()) { |
|
|
|
|
log_id = boost::lexical_cast<std::string>(m_pids.size() + 1); |
|
|
|
|
} else { |
|
|
|
|
log_id = boost::lexical_cast<std::string>(log_id_it - m_pids.begin() + 1); |
|
|
|
|
} |
|
|
|
|
unsigned long pid = spawnBackend(log_id.c_str()); |
|
|
|
|
if (log_id_it == m_pids.end()) { |
|
|
|
|
m_pids.push_back(pid); |
|
|
|
|
} else { |
|
|
|
|
*log_id_it = pid; |
|
|
|
|
} |
|
|
|
|
__unblock_signals(); |
|
|
|
|
unsigned long pid = spawnBackend(); |
|
|
|
|
m_pids.push_back(pid); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return c; |
|
|
|
|