diff --git a/server/core/dcb.c b/server/core/dcb.c index 3d619ff93..a732ed0ff 100644 --- a/server/core/dcb.c +++ b/server/core/dcb.c @@ -70,6 +70,7 @@ #include #include #include +#include /** Defined in log_manager.cc */ extern int lm_enabled_logfiles_bitmask; @@ -816,6 +817,9 @@ int dcb_read( n = 0; goto return_n; } + + dcb->last_read = hkheartbeat; + bufsize = MIN(b, MAX_BUFFER_SIZE); if ((buffer = gwbuf_alloc(bufsize)) == NULL) diff --git a/server/core/test/testservice.c b/server/core/test/testservice.c index c316f59c9..7474925d4 100644 --- a/server/core/test/testservice.c +++ b/server/core/test/testservice.c @@ -98,22 +98,31 @@ hkinit(); skygw_log_sync_all(); ss_info_dassert(0 != result, "Start all should succeed"); - ss_dfprintf(stderr, "\t..done\nTiming out a session."); - service->conn_timeout = 1; - dcb = dcb_alloc(DCB_ROLE_REQUEST_HANDLER); - ss_info_dassert(dcb != NULL, "DCB allocation failed"); + ss_dfprintf(stderr, "\t..done\nTiming out a session."); - session = session_alloc(service,dcb); - ss_info_dassert(session != NULL, "Session allocation failed"); - session->client->state = DCB_STATE_POLLING; - session->client->func.hangup = hup; - sleep(30); + service->conn_timeout = 1; + result = serviceStart(service); + skygw_log_sync_all(); + ss_info_dassert(0 != result, "Start should succeed"); + result = serviceStop(service); + skygw_log_sync_all(); + ss_info_dassert(0 != result, "Stop should succeed"); - ss_info_dassert(success, "Session allocation failed"); + dcb = dcb_alloc(DCB_ROLE_REQUEST_HANDLER); + ss_info_dassert(dcb != NULL, "DCB allocation failed"); + + session = session_alloc(service,dcb); + ss_info_dassert(session != NULL, "Session allocation failed"); + session->client->state = DCB_STATE_POLLING; + session->client->func.hangup = hup; + sleep(15); + + ss_info_dassert(success, "Session timeout failed"); ss_dfprintf(stderr, "\t..done\nStopping Service."); ss_info_dassert(0 != serviceStop(service), "Stop should succeed"); - ss_dfprintf(stderr, "\t..done\n"); + ss_dfprintf(stderr, "\t..done\n"); + /** This is never used in MaxScale and will always fail due to service's * stats.n_current value never being decremented */ /* diff --git a/server/include/hk_heartbeat.h b/server/include/hk_heartbeat.h new file mode 100644 index 000000000..f1ea1e0bc --- /dev/null +++ b/server/include/hk_heartbeat.h @@ -0,0 +1,11 @@ +#ifndef _HK_HEARTBEAT_H +#define _HK_HEARTBEAT_H + +/** + * The global housekeeper heartbeat value. This value is increamente + * every 100ms and may be used for crude timing etc. + */ + +extern unsigned long hkheartbeat; + +#endif diff --git a/server/include/housekeeper.h b/server/include/housekeeper.h index 0379ff23a..0cd2d8a71 100644 --- a/server/include/housekeeper.h +++ b/server/include/housekeeper.h @@ -19,7 +19,7 @@ */ #include #include - +#include /** * @file housekeeper.h A mechanism to have task run periodically * @@ -52,12 +52,6 @@ typedef struct hktask { *next; /*< Next task in the list */ } HKTASK; -/** - * The global housekeeper heartbeat value. This value is increamente - * every 100ms and may be used for crude timing etc. - */ -extern unsigned long hkheartbeat; - extern void hkinit(); extern int hktask_add(char *name, void (*task)(void *), void *data, int frequency); extern int hktask_oneshot(char *name, void (*task)(void *), void *data, int when); diff --git a/server/modules/protocol/maxscaled.c b/server/modules/protocol/maxscaled.c index 962bdafd8..67d51f9bd 100644 --- a/server/modules/protocol/maxscaled.c +++ b/server/modules/protocol/maxscaled.c @@ -144,9 +144,7 @@ char *password; if ((n = dcb_read(dcb, &head)) != -1) { - - dcb->last_read = hkheartbeat; - + if (head) { unsigned char *ptr = GWBUF_DATA(head); diff --git a/server/modules/protocol/mysql_backend.c b/server/modules/protocol/mysql_backend.c index 7741fdcc4..4ebd3df05 100644 --- a/server/modules/protocol/mysql_backend.c +++ b/server/modules/protocol/mysql_backend.c @@ -447,9 +447,7 @@ static int gw_read_backend_event(DCB *dcb) { /* read available backend data */ rc = dcb_read(dcb, &read_buffer); - - dcb->last_read = hkheartbeat; - + if (rc < 0) { GWBUF* errbuf; diff --git a/server/modules/protocol/mysql_client.c b/server/modules/protocol/mysql_client.c index 14279c4f0..a9097b0ad 100644 --- a/server/modules/protocol/mysql_client.c +++ b/server/modules/protocol/mysql_client.c @@ -576,7 +576,6 @@ int gw_read_client_event( CHK_PROTOCOL(protocol); rc = dcb_read(dcb, &read_buffer); - dcb->last_read = hkheartbeat; if (rc < 0) { diff --git a/server/modules/protocol/telnetd.c b/server/modules/protocol/telnetd.c index 29bc6dd4f..ab5c95b47 100644 --- a/server/modules/protocol/telnetd.c +++ b/server/modules/protocol/telnetd.c @@ -156,9 +156,7 @@ char *password, *t; if ((n = dcb_read(dcb, &head)) != -1) { - - dcb->last_read = hkheartbeat; - + if (head) { unsigned char *ptr = GWBUF_DATA(head);