|
40 | 40 |
|
41 | 41 | #define MODELBOX_SERVER_LOG_PATH "/var/log/modelbox/modelbox.log"
|
42 | 42 | #define MODELBOX_SERVER_PID_FILE "/var/run/modelbox.pid"
|
43 |
| -#define MODELBOX_MAX_INIT_TIME (60 * 10) |
| 43 | +#define MODELBOX_MAX_INIT_TIME (60 * 12) |
44 | 44 |
|
45 | 45 | static int g_sig_list[] = {
|
46 | 46 | SIGIO, SIGPWR, SIGSTKFLT, SIGPROF, SIGINT, SIGTERM,
|
@@ -213,62 +213,62 @@ void modelbox_hung_check(const std::shared_ptr<modelbox::Server> &server) {
|
213 | 213 | }
|
214 | 214 |
|
215 | 215 | int modelbox_run(const std::shared_ptr<modelbox::Server> &server) {
|
216 |
| - bool is_server_init = true; |
217 |
| - std::shared_ptr<modelbox::TimerTask> heart_beattask = |
218 |
| - std::make_shared<modelbox::TimerTask>(); |
219 |
| - heart_beattask->Callback(modelbox_hung_check, server); |
220 |
| - |
221 |
| - auto future = std::async( |
222 |
| - std::launch::async, [heart_beattask, &is_server_init, server]() { |
223 |
| - if (app_monitor_init(nullptr, nullptr) != 0) { |
224 |
| - return; |
225 |
| - } |
226 |
| - |
227 |
| - int count = 0; |
228 |
| - while (is_server_init == true) { // NOLINT |
229 |
| - sleep(1); |
230 |
| - if (count >= MODELBOX_MAX_INIT_TIME) { |
231 |
| - MBLOG_WARN << "exceed max init time, " << MODELBOX_MAX_INIT_TIME |
232 |
| - << " seconds"; |
233 |
| - break; |
| 216 | + int retval = 0; |
| 217 | + auto server_init_timer = std::make_shared<modelbox::TimerTask>([]() { |
| 218 | + MBLOG_INFO << "server init timeout, you may change the init timeout " |
| 219 | + "value by setting the init_timeout in modelbox.conf"; |
| 220 | + modelbox::kServerTimer->Stop(); |
| 221 | + modelbox::Abort("server init timeout"); |
| 222 | + }); |
| 223 | + |
| 224 | + auto future = |
| 225 | + std::async(std::launch::async, [server, &retval, &server_init_timer]() { |
| 226 | + modelbox::Status ret; |
| 227 | + Defer { |
| 228 | + if (!ret) { |
| 229 | + modelbox::kServerTimer->Stop(); |
| 230 | + retval = 1; |
234 | 231 | }
|
| 232 | + }; |
235 | 233 |
|
236 |
| - count++; |
237 |
| - |
238 |
| - if (count % app_monitor_heartbeat_interval() != 0) { |
239 |
| - continue; |
240 |
| - } |
| 234 | + ret = server->Init(); |
| 235 | + if (!ret) { |
| 236 | + MBLOG_ERROR << "server init failed !"; |
| 237 | + return 1; |
| 238 | + } |
241 | 239 |
|
242 |
| - modelbox_hung_check(server); |
| 240 | + ret = server->Start(); |
| 241 | + if (!ret) { |
| 242 | + MBLOG_ERROR << "server start failed !"; |
| 243 | + return 1; |
243 | 244 | }
|
244 | 245 |
|
245 |
| - sleep(1); |
| 246 | + server_init_timer->Stop(); |
| 247 | + server_init_timer = nullptr; |
246 | 248 |
|
247 |
| - MBLOG_INFO << "start manager heartbeat"; |
248 |
| - modelbox::kServerTimer->Schedule( |
249 |
| - heart_beattask, 0, 1000 * app_monitor_heartbeat_interval(), true); |
| 249 | + return 0; |
250 | 250 | });
|
251 | 251 |
|
252 |
| - auto ret = server->Init(); |
253 |
| - if (!ret) { |
254 |
| - MBLOG_ERROR << "server init failed !"; |
255 |
| - return 1; |
| 252 | + if (app_monitor_init(nullptr, nullptr) == 0) { |
| 253 | + MBLOG_INFO << "start manager heartbeat"; |
| 254 | + std::shared_ptr<modelbox::TimerTask> heart_beattask = |
| 255 | + std::make_shared<modelbox::TimerTask>(); |
| 256 | + heart_beattask->Callback(modelbox_hung_check, server); |
| 257 | + modelbox::kServerTimer->Schedule( |
| 258 | + heart_beattask, 0, 1000 * app_monitor_heartbeat_interval(), true); |
256 | 259 | }
|
257 | 260 |
|
258 |
| - ret = server->Start(); |
259 |
| - if (!ret) { |
260 |
| - MBLOG_ERROR << "server start failed !"; |
261 |
| - return 1; |
262 |
| - } |
263 |
| - |
264 |
| - is_server_init = false; |
265 |
| - future.get(); |
| 261 | + auto init_timeout = modelbox::kConfig->GetUint32("server.init_timeout", |
| 262 | + MODELBOX_MAX_INIT_TIME); |
| 263 | + modelbox::kServerTimer->Schedule(server_init_timer, 1000 * init_timeout, 0, |
| 264 | + false); |
266 | 265 |
|
267 | 266 | // run timer loop.
|
268 | 267 | modelbox::kServerTimer->Run();
|
269 | 268 |
|
| 269 | + future.get(); |
270 | 270 | server->Stop();
|
271 |
| - return 0; |
| 271 | + return retval; |
272 | 272 | }
|
273 | 273 |
|
274 | 274 | static void onexit() {}
|
|
0 commit comments