Loading client/mysqltest.c +69 −0 Original line number Diff line number Diff line Loading @@ -604,6 +604,71 @@ void do_eval(DYNAMIC_STRING *query_eval, const char *query, } /* Run query and dump the result to stdout in vertical format NOTE! This function should be safe to call when an error has occured and thus any further errors will be ignored(although logged) SYNOPSIS show_query mysql - connection to use query - query to run */ static void show_query(MYSQL* mysql, const char* query) { MYSQL_RES* res; DBUG_ENTER("show_query"); if (!mysql) DBUG_VOID_RETURN; if (mysql_query(mysql, query)) { log_msg("Error running query '%s': %d %s", query, mysql_errno(mysql), mysql_error(mysql)); DBUG_VOID_RETURN; } if ((res= mysql_store_result(mysql)) == NULL) { /* No result set returned */ DBUG_VOID_RETURN; } { MYSQL_ROW row; unsigned int i; unsigned int row_num= 0; unsigned int num_fields= mysql_num_fields(res); MYSQL_FIELD *fields= mysql_fetch_fields(res); fprintf(stderr, "=== %s ===\n", query); while ((row= mysql_fetch_row(res))) { unsigned long *lengths= mysql_fetch_lengths(res); row_num++; fprintf(stderr, "---- %d. ----\n", row_num); for(i= 0; i < num_fields; i++) { fprintf(stderr, "%s\t%.*s\n", fields[i].name, (int)lengths[i], row[i] ? row[i] : "NULL"); } } for (i= 0; i < strlen(query)+8; i++) fprintf(stderr, "="); fprintf(stderr, "\n\n"); } mysql_free_result(res); DBUG_VOID_RETURN; } /* Show any warnings just before the error. Since the last error is added to the warning stack, only print @@warning_count-1 warnings. Loading Loading @@ -3150,7 +3215,11 @@ void do_sync_with_master2(long offset) SLAVE has been issued ? */ if (tries++ == 30) { show_query(mysql, "SHOW MASTER STATUS"); show_query(mysql, "SHOW SLAVE STATUS"); die("could not sync with master ('%s' returned NULL)", query_buf); } sleep(1); /* So at most we will wait 30 seconds and make 31 tries */ mysql_free_result(res); goto wait_for_position; Loading mysql-test/mysql-test-run.pl +0 −54 Original line number Diff line number Diff line Loading @@ -3361,56 +3361,6 @@ sub find_testcase_skipped_reason($) } sub analyze_testcase_failure_sync_with_master($) { my ($tinfo)= @_; my $args; mtr_init_args(\$args); mtr_add_arg($args, "--no-defaults"); mtr_add_arg($args, "--silent"); mtr_add_arg($args, "--skip-safemalloc"); mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir); mtr_add_arg($args, "--character-sets-dir=%s", $path_charsetsdir); mtr_add_arg($args, "--socket=%s", $master->[0]->{'path_sock'}); mtr_add_arg($args, "--port=%d", $master->[0]->{'port'}); mtr_add_arg($args, "--database=test"); mtr_add_arg($args, "--user=%s", $opt_user); mtr_add_arg($args, "--password="); # Run the test file and append output to log file mtr_run_test($exe_mysqltest,$args, "include/analyze_failure_sync_with_master.test", "$path_timefile", "$path_timefile","", { append_log_file => 1 }); } sub analyze_testcase_failure($) { my ($tinfo)= @_; # Open mysqltest.log my $F= IO::File->new($path_timefile) or return; while ( my $line= <$F> ) { # Look for "mysqltest: At line nnn: <error> if ( $line =~ /mysqltest: At line [0-9]*: (.*)/ ) { my $error= $1; # Look for "could not sync with master" if ( $error =~ /could not sync with master/ ) { analyze_testcase_failure_sync_with_master($tinfo); } } } } ############################################################################## # # Run a single test case Loading Loading @@ -3503,10 +3453,6 @@ sub run_testcase ($) { } elsif ( $res == 1 ) { if ( $opt_force ) { analyze_testcase_failure($tinfo); } # Test case failure reported by mysqltest report_failure_and_restart($tinfo); } Loading Loading
client/mysqltest.c +69 −0 Original line number Diff line number Diff line Loading @@ -604,6 +604,71 @@ void do_eval(DYNAMIC_STRING *query_eval, const char *query, } /* Run query and dump the result to stdout in vertical format NOTE! This function should be safe to call when an error has occured and thus any further errors will be ignored(although logged) SYNOPSIS show_query mysql - connection to use query - query to run */ static void show_query(MYSQL* mysql, const char* query) { MYSQL_RES* res; DBUG_ENTER("show_query"); if (!mysql) DBUG_VOID_RETURN; if (mysql_query(mysql, query)) { log_msg("Error running query '%s': %d %s", query, mysql_errno(mysql), mysql_error(mysql)); DBUG_VOID_RETURN; } if ((res= mysql_store_result(mysql)) == NULL) { /* No result set returned */ DBUG_VOID_RETURN; } { MYSQL_ROW row; unsigned int i; unsigned int row_num= 0; unsigned int num_fields= mysql_num_fields(res); MYSQL_FIELD *fields= mysql_fetch_fields(res); fprintf(stderr, "=== %s ===\n", query); while ((row= mysql_fetch_row(res))) { unsigned long *lengths= mysql_fetch_lengths(res); row_num++; fprintf(stderr, "---- %d. ----\n", row_num); for(i= 0; i < num_fields; i++) { fprintf(stderr, "%s\t%.*s\n", fields[i].name, (int)lengths[i], row[i] ? row[i] : "NULL"); } } for (i= 0; i < strlen(query)+8; i++) fprintf(stderr, "="); fprintf(stderr, "\n\n"); } mysql_free_result(res); DBUG_VOID_RETURN; } /* Show any warnings just before the error. Since the last error is added to the warning stack, only print @@warning_count-1 warnings. Loading Loading @@ -3150,7 +3215,11 @@ void do_sync_with_master2(long offset) SLAVE has been issued ? */ if (tries++ == 30) { show_query(mysql, "SHOW MASTER STATUS"); show_query(mysql, "SHOW SLAVE STATUS"); die("could not sync with master ('%s' returned NULL)", query_buf); } sleep(1); /* So at most we will wait 30 seconds and make 31 tries */ mysql_free_result(res); goto wait_for_position; Loading
mysql-test/mysql-test-run.pl +0 −54 Original line number Diff line number Diff line Loading @@ -3361,56 +3361,6 @@ sub find_testcase_skipped_reason($) } sub analyze_testcase_failure_sync_with_master($) { my ($tinfo)= @_; my $args; mtr_init_args(\$args); mtr_add_arg($args, "--no-defaults"); mtr_add_arg($args, "--silent"); mtr_add_arg($args, "--skip-safemalloc"); mtr_add_arg($args, "--tmpdir=%s", $opt_tmpdir); mtr_add_arg($args, "--character-sets-dir=%s", $path_charsetsdir); mtr_add_arg($args, "--socket=%s", $master->[0]->{'path_sock'}); mtr_add_arg($args, "--port=%d", $master->[0]->{'port'}); mtr_add_arg($args, "--database=test"); mtr_add_arg($args, "--user=%s", $opt_user); mtr_add_arg($args, "--password="); # Run the test file and append output to log file mtr_run_test($exe_mysqltest,$args, "include/analyze_failure_sync_with_master.test", "$path_timefile", "$path_timefile","", { append_log_file => 1 }); } sub analyze_testcase_failure($) { my ($tinfo)= @_; # Open mysqltest.log my $F= IO::File->new($path_timefile) or return; while ( my $line= <$F> ) { # Look for "mysqltest: At line nnn: <error> if ( $line =~ /mysqltest: At line [0-9]*: (.*)/ ) { my $error= $1; # Look for "could not sync with master" if ( $error =~ /could not sync with master/ ) { analyze_testcase_failure_sync_with_master($tinfo); } } } } ############################################################################## # # Run a single test case Loading Loading @@ -3503,10 +3453,6 @@ sub run_testcase ($) { } elsif ( $res == 1 ) { if ( $opt_force ) { analyze_testcase_failure($tinfo); } # Test case failure reported by mysqltest report_failure_and_restart($tinfo); } Loading