Fix for router instance creation failure
This commit is contained in:
@ -349,8 +349,15 @@ serviceStart(SERVICE *service)
|
|||||||
SERV_PROTOCOL *port;
|
SERV_PROTOCOL *port;
|
||||||
int listeners = 0;
|
int listeners = 0;
|
||||||
|
|
||||||
service->router_instance = service->router->createInstance(service,
|
if ((service->router_instance = service->router->createInstance(service,
|
||||||
service->routerOptions);
|
service->routerOptions)) == NULL)
|
||||||
|
{
|
||||||
|
LOGIF(LE, (skygw_log_write_flush(LOGFILE_ERROR,
|
||||||
|
"%s: Failed to create router instance for service. Service not started.",
|
||||||
|
service->name)));
|
||||||
|
service->state = SERVICE_STATE_FAILED;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
port = service->ports;
|
port = service->ports;
|
||||||
while (port)
|
while (port)
|
||||||
@ -359,7 +366,10 @@ int listeners = 0;
|
|||||||
port = port->next;
|
port = port->next;
|
||||||
}
|
}
|
||||||
if (listeners)
|
if (listeners)
|
||||||
|
{
|
||||||
|
service->state = SERVICE_STATE_STARTED;
|
||||||
service->stats.started = time(0);
|
service->stats.started = time(0);
|
||||||
|
}
|
||||||
|
|
||||||
return listeners;
|
return listeners;
|
||||||
}
|
}
|
||||||
@ -429,6 +439,7 @@ int listeners = 0;
|
|||||||
|
|
||||||
port = port->next;
|
port = port->next;
|
||||||
}
|
}
|
||||||
|
service->state = SERVICE_STATE_STOPPED;
|
||||||
|
|
||||||
return listeners;
|
return listeners;
|
||||||
}
|
}
|
||||||
@ -900,7 +911,22 @@ int i;
|
|||||||
service->name);
|
service->name);
|
||||||
dcb_printf(dcb, "\tRouter: %s (%p)\n",
|
dcb_printf(dcb, "\tRouter: %s (%p)\n",
|
||||||
service->routerModule, service->router);
|
service->routerModule, service->router);
|
||||||
if (service->router)
|
switch (service->state)
|
||||||
|
{
|
||||||
|
case SERVICE_STATE_STARTED:
|
||||||
|
dcb_printf(dcb, "\tState: Started\n");
|
||||||
|
break;
|
||||||
|
case SERVICE_STATE_STOPPED:
|
||||||
|
dcb_printf(dcb, "\tState: Stopped\n");
|
||||||
|
break;
|
||||||
|
case SERVICE_STATE_FAILED:
|
||||||
|
dcb_printf(dcb, "\tState: Failed\n");
|
||||||
|
break;
|
||||||
|
case SERVICE_STATE_ALLOC:
|
||||||
|
dcb_printf(dcb, "\tState: Allocated\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (service->router && service->router_instance)
|
||||||
service->router->diagnostics(service->router_instance, dcb);
|
service->router->diagnostics(service->router_instance, dcb);
|
||||||
dcb_printf(dcb, "\tStarted: %s",
|
dcb_printf(dcb, "\tStarted: %s",
|
||||||
asctime_r(localtime_r(&service->stats.started, &result), timebuf));
|
asctime_r(localtime_r(&service->stats.started, &result), timebuf));
|
||||||
|
@ -144,6 +144,8 @@ typedef enum count_spec_t {COUNT_NONE=0, COUNT_ATLEAST, COUNT_EXACT, COUNT_ATMOS
|
|||||||
|
|
||||||
#define SERVICE_STATE_ALLOC 1 /**< The service has been allocated */
|
#define SERVICE_STATE_ALLOC 1 /**< The service has been allocated */
|
||||||
#define SERVICE_STATE_STARTED 2 /**< The service has been started */
|
#define SERVICE_STATE_STARTED 2 /**< The service has been started */
|
||||||
|
#define SERVICE_STATE_FAILED 3 /**< The service failed to start */
|
||||||
|
#define SERVICE_STATE_STOPPED 4 /**< The service has been stopped */
|
||||||
|
|
||||||
extern SERVICE *service_alloc(const char *, const char *);
|
extern SERVICE *service_alloc(const char *, const char *);
|
||||||
extern int service_free(SERVICE *);
|
extern int service_free(SERVICE *);
|
||||||
|
Reference in New Issue
Block a user