diff options
author | unknown <guilhem@mysql.com> | 2004-05-14 23:08:03 +0200 |
---|---|---|
committer | unknown <guilhem@mysql.com> | 2004-05-14 23:08:03 +0200 |
commit | 028a672fd6d82a1a831bbfc16838bbe33c381d48 (patch) | |
tree | 8266d0c50d10458d6ad44954c5518e653150b8e6 /client | |
parent | 72595adab2185307c4fc9e9d028ac2e340e27ab8 (diff) | |
download | mariadb-git-028a672fd6d82a1a831bbfc16838bbe33c381d48.tar.gz |
Replication testsuite: making the master-slave synchronization less likely to fail,
by adding sleep-and-retries (max 4 times) if MASTER_POS_WAIT() returns NULL
in sync_with_master and sync_slave_with_master.
The problem showed up only today, in MySQL 5.0 in rpl_server_id2.test,
but may affect 4.x as well, so fixing it here. Note that I am also fixing
5.0 too, with the same exact patch, because I don't want to leave 5.0 broken
until the next 4.0->4.1->5.0 merge.
client/mysqltest.c:
in sync_with_master (and sync_slave_with_master), if MASTER_POS_WAIT() returns NULL,
it may be that the slave SQL thread did not have time to start yes, so we sleep
1 sec and retry, 4 times at most.
mysql-test/r/rpl_server_id2.result:
result update
mysql-test/t/rpl_server_id2.test:
master_slave.inc already drops the table
Diffstat (limited to 'client')
-rw-r--r-- | client/mysqltest.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/client/mysqltest.c b/client/mysqltest.c index 32fb44d178e..7dae99efde3 100644 --- a/client/mysqltest.c +++ b/client/mysqltest.c @@ -1081,7 +1081,7 @@ int do_sync_with_master2(const char* p) MYSQL_ROW row; MYSQL* mysql = &cur_con->mysql; char query_buf[FN_REFLEN+128]; - int offset = 0; + int offset= 0, tries= 0; int rpl_parse; if (!master_pos.file[0]) @@ -1096,6 +1096,9 @@ int do_sync_with_master2(const char* p) sprintf(query_buf, "select master_pos_wait('%s', %ld)", master_pos.file, master_pos.pos + offset); + +wait_for_position: + if (mysql_query(mysql, query_buf)) die("line %u: failed in %s: %d: %s", start_lineno, query_buf, mysql_errno(mysql), mysql_error(mysql)); @@ -1106,8 +1109,20 @@ int do_sync_with_master2(const char* p) if (!(row = mysql_fetch_row(res))) die("line %u: empty result in %s", start_lineno, query_buf); if (!row[0]) - die("line %u: could not sync with master ('%s' returned NULL)", - start_lineno, query_buf); + { + /* + It may be that the slave SQL thread has not started yet, though START + SLAVE has been issued ? + */ + if (tries++ == 3) + { + die("line %u: could not sync with master ('%s' returned NULL)", + start_lineno, query_buf); + } + sleep(1); /* So at most we will wait 3 seconds and make 4 tries */ + mysql_free_result(res); + goto wait_for_position; + } mysql_free_result(res); last_result=0; if (rpl_parse) |