Track the number of performed monitoring intervals

Tracking how many times the monitor has performed its monitoring allows
the test framework to consistently wait for an event instead of waiting
for a hard-coded time period. The MaxCtrl `api get` command can be used to
easily extract the numeric value.
This commit is contained in:
Markus Mäkelä
2018-06-05 14:03:38 +03:00
parent cfe676b1c8
commit f2b2951c99
10 changed files with 12 additions and 0 deletions

View File

@ -168,6 +168,7 @@ extern const char CN_STRIP_DB_ESC[];
extern const char CN_SUBSTITUTE_VARIABLES[];
extern const char CN_THREADS[];
extern const char CN_THREAD_STACK_SIZE[];
extern const char CN_TICKS[];
extern const char CN_TYPE[];
extern const char CN_UNIX[];
extern const char CN_USER[];

View File

@ -221,6 +221,7 @@ struct mxs_monitor
uint32_t script_timeout; /**< Timeout in seconds for the monitor scripts */
bool master_has_failed; /**< Set to true when the latest event is a master_down event */
uint8_t journal_hash[SHA_DIGEST_LENGTH]; /**< SHA1 hash of the latest written journal */
uint64_t ticks; /**< Number of performed monitoring intervals */
struct mxs_monitor *next; /**< Next monitor in the linked list */
};

View File

@ -148,6 +148,7 @@ const char CN_STRIP_DB_ESC[] = "strip_db_esc";
const char CN_SUBSTITUTE_VARIABLES[] = "substitute_variables";
const char CN_THREADS[] = "threads";
const char CN_THREAD_STACK_SIZE[] = "thread_stack_size";
const char CN_TICKS[] = "ticks";
const char CN_TYPE[] = "type";
const char CN_UNIX[] = "unix";
const char CN_USER[] = "user";

View File

@ -137,6 +137,7 @@ MXS_MONITOR* monitor_alloc(const char *name, const char *module)
mon->script_timeout = DEFAULT_SCRIPT_TIMEOUT;
mon->parameters = NULL;
mon->server_pending_changes = false;
mon->ticks = 0;
memset(mon->journal_hash, 0, sizeof(mon->journal_hash));
spinlock_init(&mon->lock);
spinlock_acquire(&monLock);
@ -518,6 +519,7 @@ monitorShow(DCB *dcb, MXS_MONITOR *monitor)
dcb_printf(dcb, "Monitor: %p\n", monitor);
dcb_printf(dcb, "Name: %s\n", monitor->name);
dcb_printf(dcb, "State: %s\n", state);
dcb_printf(dcb, "Times monitored: %lu\n", monitor->ticks);
dcb_printf(dcb, "Sampling interval: %lu milliseconds\n", monitor->interval);
dcb_printf(dcb, "Connect Timeout: %i seconds\n", monitor->connect_timeout);
dcb_printf(dcb, "Read Timeout: %i seconds\n", monitor->read_timeout);
@ -1860,6 +1862,7 @@ json_t* monitor_json_data(const MXS_MONITOR* monitor, const char* host)
json_object_set_new(attr, CN_MODULE, json_string(monitor->module_name));
json_object_set_new(attr, CN_STATE, json_string(monitor_state_to_string(monitor->state)));
json_object_set_new(attr, CN_TICKS, json_integer(monitor->ticks));
/** Monitor parameters */
json_object_set_new(attr, CN_PARAMETERS, monitor_parameters_to_json(monitor));

View File

@ -123,6 +123,7 @@ monitorMain(void *arg)
while (!handle->shutdown)
{
atomic_add_uint64(&monitor->ticks, 1);
lock_monitor_servers(monitor);
servers_status_pending_to_current(monitor);

View File

@ -545,6 +545,7 @@ monitorMain(void *arg)
/* reset cluster members counter */
is_cluster = 0;
atomic_add_uint64(&mon->ticks, 1);
lock_monitor_servers(mon);
servers_status_pending_to_current(mon);

View File

@ -270,6 +270,7 @@ void GRMon::main()
while (!m_shutdown)
{
atomic_add_uint64(&m_monitor->ticks, 1);
lock_monitor_servers(m_monitor);
servers_status_pending_to_current(m_monitor);

View File

@ -2204,6 +2204,7 @@ monitorMain(void *arg)
/* reset num_servers */
num_servers = 0;
atomic_add_uint64(&mon->ticks, 1);
lock_monitor_servers(mon);
servers_status_pending_to_current(mon);

View File

@ -543,6 +543,7 @@ monitorMain(void *arg)
}
nrounds += 1;
atomic_add_uint64(&mon->ticks, 1);
lock_monitor_servers(mon);
servers_status_pending_to_current(mon);

View File

@ -347,6 +347,7 @@ monitorMain(void *arg)
}
nrounds += 1;
atomic_add_uint64(&mon->ticks, 1);
lock_monitor_servers(mon);
servers_status_pending_to_current(mon);