diff options
-rw-r--r-- | Docs/manual.texi | 3 | ||||
-rw-r--r-- | mysql-test/t/delayed.test | 2 | ||||
-rw-r--r-- | scripts/mysql_install_db.sh | 2 | ||||
-rw-r--r-- | sql-bench/crash-me.sh | 1 | ||||
-rw-r--r-- | sql/mysql_priv.h | 2 | ||||
-rw-r--r-- | sql/mysqld.cc | 3 | ||||
-rw-r--r-- | sql/sql_class.cc | 3 | ||||
-rw-r--r-- | sql/sql_delete.cc | 2 | ||||
-rw-r--r-- | sql/sql_insert.cc | 3 | ||||
-rwxr-xr-x | tests/fork3_test.pl | 46 |
10 files changed, 56 insertions, 11 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi index a032c4f8e6d..4d9eb645c52 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -6618,6 +6618,7 @@ To install the @strong{MySQL} @code{DBD} module with ActiveState Perl on Windows, you should do the following: @itemize @bullet +@item Get activestate perl from @uref{http://www.activestate.com/Products/ActivePerl/index.html} and install it. @item Open a DOS shell. @item If required, set the HTTP_proxy variable. For example, you might try: @code{set HTTP_proxy=my.proxy.com:3128} @@ -33693,7 +33694,7 @@ If you find out something is wrong, please only send the relevant rows send the whole MyODBC or ODBC log file! If you are unable to find out what's wrong, the last option is to -make an archive (tar or zip) that contains a MyODBC log file, the ODBC +make an archive (tar or zip) that contains a MyODBC trace file, the ODBC log file, and a README file that explains the problem. You can send this to @uref{ftp://support.mysql.com/pub/mysql/secret}. Only we at MySQL AB will have access to the files you upload, and we will be very discrete diff --git a/mysql-test/t/delayed.test b/mysql-test/t/delayed.test index 4bc1afa7612..6fbd99e3283 100644 --- a/mysql-test/t/delayed.test +++ b/mysql-test/t/delayed.test @@ -11,6 +11,7 @@ insert delayed into t1 set a = 4; insert delayed into t1 set a = 5, tmsp = 19711006010203; insert delayed into t1 (a, tmsp) values (6, 19711006010203); insert delayed into t1 (a, tmsp) values (7, NULL); +--sleep 1 insert into t1 set a = 8,tmsp=19711006010203; select * from t1 where tmsp=0; select * from t1 where tmsp=19711006010203; @@ -27,5 +28,6 @@ insert delayed into t1 values (null,"c"); insert delayed into t1 values (3,"d"),(null,"e"); --error 1136 insert delayed into t1 values (3,"this will give an","error"); +--sleep 2 select * from t1; drop table t1; diff --git a/scripts/mysql_install_db.sh b/scripts/mysql_install_db.sh index 98e31cfe1ef..25a429f764a 100644 --- a/scripts/mysql_install_db.sh +++ b/scripts/mysql_install_db.sh @@ -282,7 +282,7 @@ fi echo "Installing all prepared tables" if eval "$execdir/mysqld $defaults --bootstrap --skip-grant-tables \ - --basedir=$basedir --datadir=$ldata --skip-innobase --skip-gemeni --skip-bdb $args" << END_OF_DATA + --basedir=$basedir --datadir=$ldata --skip-innobase --skip-gemini --skip-bdb $args" << END_OF_DATA use mysql; $c_d $i_d diff --git a/sql-bench/crash-me.sh b/sql-bench/crash-me.sh index f5d25a26ffb..014962b1c6d 100644 --- a/sql-bench/crash-me.sh +++ b/sql-bench/crash-me.sh @@ -47,6 +47,7 @@ require "$pwd/server-cfg" || die "Can't read Configuration file: $!\n"; $opt_server="mysql"; $opt_host="localhost"; $opt_database="test"; $opt_dir="limits"; +$opt_user=$opt_password=""; $opt_debug=$opt_help=$opt_Information=$opt_restart=$opt_force=$opt_quick=0; $opt_log_all_queries=$opt_fix_limit_file=$opt_batch_mode=0; $opt_db_start_cmd=""; # the db server start command diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index b9fd954486b..7348563cee6 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -477,7 +477,7 @@ extern uint32 server_id; extern char mysql_data_home[2],server_version[SERVER_VERSION_LENGTH], max_sort_char, mysql_real_data_home[]; extern my_string mysql_unix_port,mysql_tmpdir; -extern const char *first_keyword, *localhost; +extern const char *first_keyword, *localhost, *delayed_user; extern ulong refresh_version,flush_version, thread_id,query_id,opened_tables, created_tmp_tables, created_tmp_disk_tables, aborted_threads,aborted_connects, diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 22e44b2b325..a25ac8bdbfb 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -243,6 +243,7 @@ volatile ulong cached_thread_count=0; my_string master_user = (char*) "test", master_password = 0, master_host=0, master_info_file = (char*) "master.info"; const char *localhost=LOCAL_HOST; +const char *delayed_user="DELAYED"; uint master_port = MYSQL_PORT, master_connect_retry = 60; ulong max_tmp_tables,max_heap_table_size; @@ -2364,7 +2365,7 @@ pthread_handler_decl(handle_connections_namedpipes,arg) continue; } /* host name is unknown */ - thd->host = my_strdup("localhost",MYF(0)); /* Host is unknown */ + thd->host = my_strdup(localhost,MYF(0)); /* Host is unknown */ create_new_thread(thd); } diff --git a/sql/sql_class.cc b/sql/sql_class.cc index abe7fad822c..30eeb2e5e2c 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -176,7 +176,8 @@ THD::~THD() if (host != localhost) // If not pointer to constant safeFree(host); - safeFree(user); + if (user != delayed_user) + safeFree(user); safeFree(db); safeFree(ip); free_root(&mem_root,MYF(0)); diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index e1196341bef..fc150b08a69 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -192,7 +192,7 @@ int mysql_delete(THD *thd,TABLE_LIST *table_list,COND *conds,ha_rows limit, (void) table->file->extra(HA_EXTRA_NO_READCHECK); if (options & OPTION_QUICK) (void) table->file->extra(HA_EXTRA_QUICK); - init_read_record(&info,thd,table,select,1,1); + init_read_record(&info,thd,table,select,0,1); ulong deleted=0L; thd->proc_info="updating"; while (!(error=info.read_record(&info)) && !thd->killed) diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 8e8f46b2e1f..e92c5255ef8 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -489,7 +489,8 @@ public: table(0),tables_in_use(0),stacked_inserts(0), status(0), dead(0), group_count(0) { - thd.user=0; thd.host=(char*) localhost; + thd.user=thd.priv_user=(char*) delayed_user; + thd.host=(char*) localhost; thd.current_tablenr=0; thd.version=refresh_version; thd.command=COM_DELAYED_INSERT; diff --git a/tests/fork3_test.pl b/tests/fork3_test.pl index 0ede221a7f4..032f1bf15e9 100755 --- a/tests/fork3_test.pl +++ b/tests/fork3_test.pl @@ -1,9 +1,9 @@ #!/usr/bin/perl -w # -# This is a test with uses 3 processes to insert, delete and select +# This is a test with uses 4 processes to insert, delete , check and select # -$opt_loop_count=100000; # Change this to make test harder/easier +$opt_loop_count=200000; # Change this to make test harder/easier ##################### Standard benchmark inits ############################## @@ -21,8 +21,8 @@ GetOptions("host=s","db=s","loop-count=i","skip-create","skip-in","skip-delete", "verbose","fast-insert","lock-tables","debug","fast","force") || die "Aborted"; $opt_verbose=$opt_debug=$opt_lock_tables=$opt_fast_insert=$opt_fast=$opt_skip_in=$opt_force=undef; # Ignore warnings from these -print "Testing 3 multiple connections to a server with 1 insert, 1 delete\n"; -print "and 1 select connections.\n"; +print "Testing 4 multiple connections to a server with 1 insert, 1 delete\n"; +print "1 select and one repair/check connection.\n"; $firsttable = "bench_f1"; @@ -51,6 +51,7 @@ $|= 1; # Autoflush test_insert() if (($pid=fork()) == 0); $work{$pid}="insert"; test_delete() if (($pid=fork()) == 0); $work{$pid}="delete"; test_select() if (($pid=fork()) == 0); $work{$pid}="select1"; +repair_and_check() if (($pid=fork()) == 0); $work{$pid}="repair/check"; $errors=0; while (($pid=wait()) != -1) @@ -148,3 +149,40 @@ sub test_select print "Test_select: ok\n"; exit(0); } + +sub repair_and_check +{ + my ($dbh,$row,$found1,$last_found1,$i,$type, $table); + $found1=0; $last_found1= -1; + + $dbh = DBI->connect("DBI:mysql:$opt_db:$opt_host", + $opt_user, $opt_password, + { PrintError => 0}) || die $DBI::errstr; + + for ($i=0; $found1 != $last_found1 ; $i++) + { + $type=($i & 2) ? "repair" : "check"; + $table=$firsttable; + $last_found1=$found1; + $sth=$dbh->prepare("$type table $table") || die "Got error on prepare: $dbh->errstr\n"; + $sth->execute || die $dbh->errstr; + + while (($row=$sth->fetchrow_arrayref)) + { + if ($row->[3] ne "OK") + { + print "Got error " . $row->[3] . " when doing $type on $table\n"; + exit(1); + } + } + $sth=$dbh->prepare("select count(*) from $table") || die "Got error on prepare: $dbh->errstr\n"; + $sth->execute || die $dbh->errstr; + @row = $sth->fetchrow_array(); + $found1= $row[0]; + $sth->finish; + sleep(3); + } + $dbh->disconnect; $dbh=0; + print "check/repair: Did $i repair/checks\n"; + exit(0); +} |