Commit 4a013e29 authored by msvensson@pilot.(none)'s avatar msvensson@pilot.(none)
Browse files

Move "analyze_testcase_failure" to mysqltest(since it knows best when

to perform this analyzis)
parent bce8ea54
Loading
Loading
Loading
Loading
+69 −0
Original line number Diff line number Diff line
@@ -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.
@@ -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;
+0 −54
Original line number Diff line number Diff line
@@ -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
@@ -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);
    }