MXS-2218 Treat all routing workers the same way

All routing workers are now started an stopped the same way.
This commit is contained in:
Johan Wikman
2019-01-07 16:23:38 +02:00
parent 35dfa05767
commit d50ae1fb8a
3 changed files with 20 additions and 32 deletions

View File

@ -287,17 +287,16 @@ public:
static int get_current_id(); static int get_current_id();
/** /**
* Starts all routing workers but the main worker (the one running in * Starts all routing workers.
* the main thread).
* *
* @return True, if all secondary workers could be started. * @return True, if all workers could be started.
*/ */
static bool start_threaded_workers(); static bool start_workers();
/** /**
* Waits for all threaded workers. * Waits for all routing workers.
*/ */
static void join_threaded_workers(); static void join_workers();
/** /**
* Deprecated * Deprecated

View File

@ -2231,7 +2231,7 @@ int main(int argc, char** argv)
/*< /*<
* Start the routing workers running in their own thread. * Start the routing workers running in their own thread.
*/ */
if (!RoutingWorker::start_threaded_workers()) if (!RoutingWorker::start_workers())
{ {
const char* logerr = "Failed to start routing workers."; const char* logerr = "Failed to start routing workers.";
print_log_n_stderr(true, true, logerr, logerr, 0); print_log_n_stderr(true, true, logerr, logerr, 0);
@ -2279,8 +2279,6 @@ int main(int argc, char** argv)
goto return_main; goto return_main;
} }
worker->start();
main_worker->run(); main_worker->run();
/** Stop administrative interface */ /** Stop administrative interface */
@ -2297,11 +2295,10 @@ int main(int argc, char** argv)
*/ */
hkfinish(); hkfinish();
worker->join();
/*< /*<
* Wait for worker threads to exit. * Wait for worker threads to exit.
*/ */
RoutingWorker::join_threaded_workers(); RoutingWorker::join_workers();
MXS_NOTICE("All workers have shut down."); MXS_NOTICE("All workers have shut down.");

View File

@ -476,26 +476,21 @@ int RoutingWorker::get_current_id()
} }
// static // static
bool RoutingWorker::start_threaded_workers() bool RoutingWorker::start_workers()
{ {
bool rv = true; bool rv = true;
for (int i = this_unit.id_min_worker; i <= this_unit.id_max_worker; ++i) for (int i = this_unit.id_min_worker; i <= this_unit.id_max_worker; ++i)
{ {
// The main RoutingWorker will run in the main thread, so RoutingWorker* pWorker = this_unit.ppWorkers[i];
// we exclude that. mxb_assert(pWorker);
if (i != this_unit.id_main_worker)
{
RoutingWorker* pWorker = this_unit.ppWorkers[i];
mxb_assert(pWorker);
if (!pWorker->start()) if (!pWorker->start())
{ {
MXS_ALERT("Could not start routing worker %d of %d.", i, config_threadcount()); MXS_ALERT("Could not start routing worker %d of %d.", i, config_threadcount());
rv = false; rv = false;
// At startup, so we don't even try to clean up. // At startup, so we don't even try to clean up.
break; break;
}
} }
} }
@ -503,17 +498,14 @@ bool RoutingWorker::start_threaded_workers()
} }
// static // static
void RoutingWorker::join_threaded_workers() void RoutingWorker::join_workers()
{ {
for (int i = this_unit.id_min_worker; i <= this_unit.id_max_worker; i++) for (int i = this_unit.id_min_worker; i <= this_unit.id_max_worker; i++)
{ {
if (i != this_unit.id_main_worker) RoutingWorker* pWorker = this_unit.ppWorkers[i];
{ mxb_assert(pWorker);
RoutingWorker* pWorker = this_unit.ppWorkers[i];
mxb_assert(pWorker);
pWorker->join(); pWorker->join();
}
} }
} }