Fix 'test-query_timeout-t' by taking into account 'mysql-poll_timeout'

pull/3943/head
Javier Jaramago Fernández 4 years ago committed by René Cannaò
parent f72879e0b6
commit b3f0a51b88

@ -17,6 +17,7 @@ inline unsigned long long monotonic_time() {
return (((unsigned long long) ts.tv_sec) * 1000000) + (ts.tv_nsec / 1000);
}
using std::string;
int main(int argc, char** argv) {
CommandLine cl;
@ -31,11 +32,44 @@ int main(int argc, char** argv) {
return exit_status();
if (!mysql_real_connect(mysql, cl.host, cl.username, cl.password, NULL, cl.port, NULL, 0)) {
fprintf(stderr, "Failed to connect to database: Error: %s\n",
mysql_error(mysql));
fprintf(stderr, "Failed to connect to database: Error: %s\n", mysql_error(mysql));
return exit_status();
}
MYSQL* admin = mysql_init(NULL);
if (!admin) {
fprintf(stderr, "Failed 'mysql_init'\n");
return exit_status();
}
if (!mysql_real_connect(admin, cl.host, cl.admin_username, cl.admin_password, NULL, cl.admin_port, NULL, 0)) {
fprintf(stderr, "Failed to connect to Admin: Error: %s\n", mysql_error(admin));
return exit_status();
}
const string poll_query { "SELECT variable_value FROM global_variables WHERE variable_name='mysql-poll_timeout'" };
MYSQL_RES* res = nullptr;
MYSQL_ROW row = nullptr;
int poll_timeout = 0;
int q_res = mysql_query(admin, poll_query.c_str());
if (q_res) {
fprintf(stderr, "Query '%s' failed with error '%s'\n", poll_query.c_str(), mysql_error(admin));
goto cleanup;
}
res = mysql_store_result(admin);
row = mysql_fetch_row(res);
if (row == nullptr || row[0] == nullptr) {
fprintf(stderr, "Query '%s' failed to retrive 'mysql-poll_timeout' value. Empty row received.\n", poll_query.c_str());
goto cleanup;
}
poll_timeout = std::strtol(row[0], NULL, 10);
{
const char *q = "SELECT /* query_timeout=3300 */ SLEEP(20)";
diag("Running query; %s", q);
unsigned long long begin = monotonic_time();
@ -45,9 +79,20 @@ int main(int argc, char** argv) {
unsigned long long end = monotonic_time();
unsigned long time_diff_ms = (end-begin)/1000;
// NOTE: We give a grace period of 150 extra ms. This value could be much lower.
unsigned long max_poll_to_ms = (3300 + poll_timeout + 150);
ok(
time_diff_ms > 3100 && time_diff_ms < max_poll_to_ms,
"Query should be interrupted at around 3300ms with a failure timeout at '%lu'ms. Exact time: %lums",
max_poll_to_ms, time_diff_ms
);
}
ok(time_diff_ms>3100 && time_diff_ms<5000 , "Query should be interrupted at around 3300ms . Exact time: %llums", time_diff_ms);
cleanup:
mysql_close(admin);
mysql_close(mysql);
return exit_status();

Loading…
Cancel
Save