Loading BitKeeper/etc/gone +2 −0 Original line number Diff line number Diff line Loading @@ -455,6 +455,7 @@ arjen@co3064164-a.bitbike.com|Docs/section.Comparisons.texi|20011108043647|22614 arjen@fred.bitbike.com|scripts/mysql_fix_extensions.sh|20020516001337|12363|f1048a78f4759b4d ccarkner@nslinuxw10.bedford.progress.com|mysql-test/r/isolation.result|20010327145543|25059|4da11e109a3d93a9 ccarkner@nslinuxw10.bedford.progress.com|mysql-test/t/isolation.test|20010327145543|39049|6a39e4138dd4a456 fs jani@hynda.mysql.fi|client/mysqlcheck|20010419221207|26716|363e3278166d84ec jcole@tetra.bedford.progress.com|BitKeeper/etc/logging_ok|20001004201211|30554 jimw@mysql.com|mysql-test/t/ndb_alter_table.disabled|20050311230559|27526|411e026940e7a0aa Loading @@ -465,6 +466,7 @@ jimw@mysql.com|mysql-test/t/ndb_cache_multi.disabled|20050311230600|18039|9657b6 jimw@mysql.com|mysql-test/t/ndb_cache_multi2.disabled|20050311230600|47901|84fed1a78c0d3e6d jimw@mysql.com|mysql-test/t/ndb_multi.disabled|20050311230600|12240|2599367ad06100f6 jimw@mysql.com|mysql-test/t/ndb_restore.disabled|20050311230600|30718|3c2453d6164b1a30 korbit-kernel-2.4.1 magnus@neptunus.(none)|ndb/src/client/Makefile|20040414084436|02010|6c2778d2bf4954a2 magnus@neptunus.(none)|ndb/src/client/odbc/Extra.mk|20040414082358|47442|eabbb28986ca817d magnus@neptunus.(none)|ndb/src/client/odbc/Makefile|20040414084435|33394|9bc928a18aa88d66 Loading BitKeeper/etc/logging_ok +1 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ dlenev@jabberwock.localdomain dlenev@mysql.com ejonore@mc03.ndb.mysql.com gbichot@quadita2.mysql.com gbichot@quadxeon.mysql.com georg@beethoven.local georg@beethoven.site georg@lmy002.wdf.sap.corp Loading Build-tools/Do-compile +41 −15 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ $opt_dbd_options=$opt_perl_options=$opt_config_options=$opt_make_options=$opt_su $opt_tmp=$opt_version_suffix=""; $opt_bundled_zlib=$opt_help=$opt_delete=$opt_debug=$opt_stage=$opt_no_test=$opt_no_perl=$opt_one_error=$opt_with_low_memory=$opt_fast_benchmark=$opt_static_client=$opt_static_server=$opt_static_perl=$opt_sur=$opt_with_small_disk=$opt_local_perl=$opt_tcpip=$opt_build_thread=$opt_use_old_distribution=$opt_enable_shared=$opt_no_crash_me=$opt_no_strip=$opt_with_archive=$opt_with_cluster=$opt_with_csv=$opt_with_example=$opt_with_debug=$opt_no_benchmark=$opt_no_mysqltest=$opt_without_embedded=$opt_readline=0; $opt_skip_embedded_test=$opt_skip_ps_test=$opt_innodb=$opt_bdb=$opt_raid=$opt_libwrap=$opt_clearlogs=$opt_with_federated=0; $global_step=""; GetOptions( "bdb", Loading Loading @@ -179,7 +180,8 @@ info("Compiling MySQL$opt_version_suffix at $host$opt_suffix, stage: $opt_stage\ info("LD_LIBRARY_PATH is $ENV{LD_LIBRARY_PATH}"); info("PATH is $ENV{PATH}"); log_timestamp(); $global_step= "Check MD5, shutdown"; log_timestamp("START"); $md5_result= safe_system("perl $ENV{HOME}/my_md5sum -c ${opt_distribution}.md5"); Loading Loading @@ -207,9 +209,10 @@ kill_all("mysqlmanager"); kill_all("$pwd/host/mysql"); kill_all("$pwd/host/test"); $global_step= "directory cleanup"; if ($opt_stage == 0) { log_timestamp(); log_timestamp("START"); print "$host: Removing old distribution\n" if ($opt_debug); if (!$opt_use_old_distribution) { Loading Loading @@ -255,10 +258,11 @@ safe_cd("$pwd/$host/$ver"); # # Configure the sources # $global_step= "configure"; if ($opt_stage <= 1) { # Fix files if this is in another timezone than the build host log_timestamp(); log_timestamp("START"); unlink("config.cache"); unlink("bdb/build_unix/config.cache"); unlink("innobase/config.cache"); Loading Loading @@ -312,29 +316,33 @@ if ($opt_stage <= 1) { safe_system("cp -r $pwd/$host/include-mysql/* $pwd/$host/$ver/include"); } log_timestamp("DONE "); } # # Compile the binaries # $global_step= "compile + link"; if ($opt_stage <= 2) { my ($command); log_timestamp(); log_timestamp("START"); unlink($opt_distribution) if ($opt_delete && !$opt_use_old_distribution); $command=$make; $command.= " $opt_make_options" if (defined($opt_make_options) && $opt_make_options ne ""); safe_system($command); print LOG "Do-compile: Build successful\n"; log_timestamp("DONE "); } # # Create the binary distribution # $global_step= "pack binary distribution"; if ($opt_stage <= 3) { log_timestamp("START"); my $flags= ""; log_timestamp(); log_system("rm -fr mysql-{3,4,5}* $pwd/$host/mysql*.t*gz"); # No need to add the debug symbols, if the binaries are not stripped (saves space) unless ($opt_with_debug || $opt_no_strip) Loading @@ -355,6 +363,7 @@ if ($opt_stage <= 3) safe_system("cp client/mysqladmin $pwd/$host/bin"); } safe_system("$make clean") if ($opt_with_small_disk); log_timestamp("DONE "); } $tar_file=<$pwd/$host/mysql*.t*gz>; Loading @@ -368,12 +377,14 @@ system("cd $pwd/$host; perl $ENV{HOME}/my_md5sum $tar_file_lite > ${tar_file_lit # # Unpack the binary distribution # $global_step= "extract binary distribution"; if ($opt_stage <= 4 && !$opt_no_test) { log_timestamp(); log_timestamp("START"); rm_all(<$pwd/$host/test/*>); safe_cd("$pwd/$host/test"); safe_system("gunzip < $tar_file | $tar xf -"); log_timestamp("DONE "); } $tar_file =~ /(mysql[^\/]*)\.(tar\.gz|tgz)/; Loading @@ -385,31 +396,37 @@ $ENV{"LD_LIBRARY_PATH"}= ("$test_dir/lib" . # # Run the test suite # $global_step= "tests in default mode"; if ($opt_stage <= 5 && !$opt_no_test && !$opt_no_mysqltest) { log_timestamp("START"); my $flags= ""; $flags.= " --with-ndbcluster" if ($opt_with_cluster); $flags.= " --force" if (!$opt_one_error); log_timestamp(); info("Running test suite"); system("mkdir $bench_tmpdir") if (! -d $bench_tmpdir); safe_cd("${test_dir}/mysql-test"); check_system("./mysql-test-run $flags --tmpdir=$bench_tmpdir --master_port=$mysql_tcp_port --slave_port=$slave_port --ndbcluster_port=$ndbcluster_port --manager-port=$manager_port --no-manager --sleep=10", "were successful"); log_timestamp("DONE "); $global_step= "tests using prepared statements"; unless ($opt_skip_ps_test) { log_timestamp(); log_timestamp("START"); info("Running test suite using prepared statements"); check_system("./mysql-test-run $flags --ps-protocol --tmpdir=$bench_tmpdir --master_port=$mysql_tcp_port --slave_port=$slave_port --ndbcluster_port=$ndbcluster_port --manager-port=$manager_port --no-manager --sleep=10", "were successful"); log_timestamp("DONE "); } $global_step= "tests using embedded server"; unless ($opt_skip_embedded_test) { log_timestamp(); log_timestamp("START"); info("Running embedded server test suite"); # Embedded server and NDB don't jive $flags=~ s/ --with-ndbcluster//; check_system("./mysql-test-run $flags --embedded-server --tmpdir=$bench_tmpdir --master_port=$mysql_tcp_port --slave_port=$slave_port --manager-port=$manager_port --no-manager --sleep=10", "were successful"); log_timestamp("DONE "); } # 'mysql-test-run' writes its own final message for log evaluation. } Loading Loading @@ -441,10 +458,11 @@ if (!$opt_no_test && !$opt_no_benchmark) # # Compile and install the required Perl modules # $global_step= "installing Perl modules"; if ($opt_stage <= 7 && $opt_perl_files && !$opt_no_perl && !$opt_no_test && !$opt_no_benchmark) { log_timestamp(); log_timestamp("START"); safe_cd($test_dir); rm_all("perl"); safe_system("mkdir perl"); Loading Loading @@ -473,25 +491,29 @@ if ($opt_stage <= 7 && $opt_perl_files && !$opt_no_perl && !$opt_no_test && safe_system($opt_static_perl ? "perl Makefile.PL -static $options" : "perl Makefile.PL $options"); safe_system("$make ; $sur $make install"); } log_timestamp("DONE "); } # # Run crash-me test # $global_step= "crash-me checks"; if ($opt_stage <= 8 && !$opt_no_test && !$opt_no_crash_me) { log_timestamp(); log_timestamp("START"); safe_cd("$test_dir/sql-bench"); log_system("rm -f limits/mysql.cfg"); safe_system("perl ./crash-me --force --batch-mode $connect_option"); log_timestamp("DONE "); } # # Run sql-bench Benchmarks # $global_step= "benchmarks"; if ($opt_stage <= 9 && !$opt_no_test && !$opt_no_benchmark) { log_timestamp(); log_timestamp("START"); safe_cd("$test_dir/sql-bench"); log_system("rm -f output/*"); $tmp= $opt_fast_benchmark ? "--fast --user root --small-test" : ""; Loading @@ -506,6 +528,7 @@ if ($opt_stage <= 9 && !$opt_no_test && !$opt_no_benchmark) { check_system("perl ./run-all-tests --log --suffix=\"_bdb\" --die-on-errors $connect_option $tmp --create-options=\"type=bdb\"","RUN-mysql"); } log_timestamp("DONE "); } rm_all($bench_tmpdir); Loading Loading @@ -690,7 +713,7 @@ sub abort my($mail_header_file); print LOG "\n$message\n"; print "$host: $message\n" if ($opt_debug); print LOG "Aborting\n"; log_timestamp("ABORT"); close LOG; if ($opt_user) Loading Loading @@ -866,6 +889,7 @@ sub kill_all if (!open(PS, "$pscmd|")) { print "Warning: Can't run $pscmd: $!\n"; log_timestamp("ABORT"); exit; } Loading Loading @@ -904,8 +928,10 @@ sub killpid # sub log_timestamp { my ($message) = @_; my @ta=localtime(time()); print LOG sprintf("%4d-%02d-%02d %02d:%02d:%02d\n", $ta[5]+1900, $ta[4]+1, $ta[3], $ta[2], $ta[1], $ta[0]); print LOG sprintf("%4d-%02d-%02d %02d:%02d:%02d %s %s\n", $ta[5]+1900, $ta[4]+1, $ta[3], $ta[2], $ta[1], $ta[0], $message, $global_step); } Makefile.am +2 −2 Original line number Diff line number Diff line Loading @@ -25,14 +25,14 @@ SUBDIRS = . include @docs_dirs@ @zlib_dir@ \ @thread_dirs@ pstack \ @sql_union_dirs@ scripts man tests \ netware @libmysqld_dirs@ \ @bench_dirs@ support-files @fs_dirs@ @tools_dirs@ @bench_dirs@ support-files @tools_dirs@ DIST_SUBDIRS = . include @docs_dirs@ zlib \ @readline_topdir@ sql-common \ @thread_dirs@ pstack \ @sql_union_dirs@ scripts @man_dirs@ tests SSL\ BUILD netware os2 @libmysqld_dirs@ \ @bench_dirs@ support-files @fs_dirs@ @tools_dirs@ @bench_dirs@ support-files @tools_dirs@ # Relink after clean linked_sources = linked_client_sources linked_server_sources \ Loading client/mysqlbinlog.cc +196 −48 Original line number Diff line number Diff line Loading @@ -103,6 +103,22 @@ class Load_log_processor { char target_dir_name[FN_REFLEN]; int target_dir_name_len; /* When we see first event corresponding to some LOAD DATA statement in binlog, we create temporary file to store data to be loaded. We add name of this file to file_names array using its file_id as index. If we have Create_file event (i.e. we have binary log in pre-5.0.3 format) we also store save event object to be able which is needed to emit LOAD DATA statement when we will meet Exec_load_data event. If we have Begin_load_query event we simply store 0 in File_name_record::event field. */ struct File_name_record { char *fname; Create_file_log_event *event; }; DYNAMIC_ARRAY file_names; /* Loading Loading @@ -144,7 +160,7 @@ class Load_log_processor int init() { return init_dynamic_array(&file_names,sizeof(Create_file_log_event*), return init_dynamic_array(&file_names, sizeof(File_name_record), 100,100 CALLER_INFO); } Loading @@ -161,33 +177,91 @@ class Load_log_processor } void destroy() { Create_file_log_event **ptr= (Create_file_log_event**)file_names.buffer; Create_file_log_event **end= ptr + file_names.elements; File_name_record *ptr= (File_name_record *)file_names.buffer; File_name_record *end= ptr + file_names.elements; for (; ptr<end; ptr++) { if (*ptr) if (ptr->fname) { my_free((char*)(*ptr)->fname,MYF(MY_WME)); delete *ptr; *ptr= 0; my_free(ptr->fname, MYF(MY_WME)); delete ptr->event; bzero((char *)ptr, sizeof(File_name_record)); } } } /* Obtain Create_file event for LOAD DATA statement by its file_id. SYNOPSIS grab_event() file_id - file_id identifiying LOAD DATA statement DESCRIPTION Checks whenever we have already seen Create_file event for this file_id. If yes then returns pointer to it and removes it from array describing active temporary files. Since this moment caller is responsible for freeing memory occupied by this event and associated file name. RETURN VALUES Pointer to Create_file event or 0 if there was no such event with this file_id. */ Create_file_log_event *grab_event(uint file_id) { File_name_record *ptr; Create_file_log_event *res; if (file_id >= file_names.elements) return 0; Create_file_log_event **ptr= (Create_file_log_event**)file_names.buffer + file_id; Create_file_log_event *res= *ptr; *ptr= 0; ptr= dynamic_element(&file_names, file_id, File_name_record*); if ((res= ptr->event)) bzero((char *)ptr, sizeof(File_name_record)); return res; } /* Obtain file name of temporary file for LOAD DATA statement by its file_id. SYNOPSIS grab_fname() file_id - file_id identifiying LOAD DATA statement DESCRIPTION Checks whenever we have already seen Begin_load_query event for this file_id. If yes then returns file name of corresponding temporary file. Removes record about this file from the array of active temporary files. Since this moment caller is responsible for freeing memory occupied by this name. RETURN VALUES String with name of temporary file or 0 if we have not seen Begin_load_query event with this file_id. */ char *grab_fname(uint file_id) { File_name_record *ptr; char *res= 0; if (file_id >= file_names.elements) return 0; ptr= dynamic_element(&file_names, file_id, File_name_record*); if (!ptr->event) { res= ptr->fname; bzero((char *)ptr, sizeof(File_name_record)); } return res; } int process(Create_file_log_event *ce); int process(Begin_load_query_log_event *ce); int process(Append_block_log_event *ae); File prepare_new_file_for_old_format(Load_log_event *le, char *filename); int load_old_format_file(NET* net, const char *server_fname, uint server_fname_len, File file); int process_first_event(const char *bname, uint blen, const char *block, uint block_len, uint file_id, Create_file_log_event *ce); }; Loading Loading @@ -265,22 +339,42 @@ int Load_log_processor::load_old_format_file(NET* net, const char*server_fname, } int Load_log_processor::process(Create_file_log_event *ce) /* Process first event in the sequence of events representing LOAD DATA statement. SYNOPSIS process_first_event() bname - base name for temporary file to be created blen - base name length block - first block of data to be loaded block_len - first block length file_id - identifies LOAD DATA statement ce - pointer to Create_file event object if we are processing this type of event. DESCRIPTION Creates temporary file to be used in LOAD DATA and writes first block of data to it. Registers its file name (and optional Create_file event) in the array of active temporary files. RETURN VALUES 0 - success non-0 - error */ int Load_log_processor::process_first_event(const char *bname, uint blen, const char *block, uint block_len, uint file_id, Create_file_log_event *ce) { const char *bname= ce->fname+dirname_length(ce->fname); uint blen= ce->fname_len - (bname-ce->fname); uint full_len= target_dir_name_len + blen + 9 + 9 + 1; int error= 0; char *fname, *ptr; File file; DBUG_ENTER("Load_log_processor::process"); File_name_record rec; DBUG_ENTER("Load_log_processor::process_first_event"); if (set_dynamic(&file_names,(gptr)&ce,ce->file_id)) { sql_print_error("Could not construct local filename %s%s", target_dir_name,bname); DBUG_RETURN(-1); } if (!(fname= my_malloc(full_len,MYF(MY_WME)))) DBUG_RETURN(-1); Loading @@ -288,7 +382,7 @@ int Load_log_processor::process(Create_file_log_event *ce) ptr= fname + target_dir_name_len; memcpy(ptr,bname,blen); ptr+= blen; ptr+= my_sprintf(ptr,(ptr,"-%x",ce->file_id)); ptr+= my_sprintf(ptr, (ptr, "-%x", file_id)); if ((file= create_unique_file(fname,ptr)) < 0) { Loading @@ -296,9 +390,21 @@ int Load_log_processor::process(Create_file_log_event *ce) target_dir_name,bname); DBUG_RETURN(-1); } rec.fname= fname; rec.event= ce; if (set_dynamic(&file_names, (gptr)&rec, file_id)) { sql_print_error("Could not construct local filename %s%s", target_dir_name, bname); DBUG_RETURN(-1); } if (ce) ce->set_fname_outside_temp_buf(fname, strlen(fname)); if (my_write(file,(byte*) ce->block,ce->block_len,MYF(MY_WME|MY_NABP))) if (my_write(file, (byte*)block, block_len, MYF(MY_WME|MY_NABP))) error= -1; if (my_close(file, MYF(MY_WME))) error= -1; Loading @@ -306,19 +412,35 @@ int Load_log_processor::process(Create_file_log_event *ce) } int Load_log_processor::process(Create_file_log_event *ce) { const char *bname= ce->fname + dirname_length(ce->fname); uint blen= ce->fname_len - (bname-ce->fname); return process_first_event(bname, blen, ce->block, ce->block_len, ce->file_id, ce); } int Load_log_processor::process(Begin_load_query_log_event *blqe) { return process_first_event("SQL_LOAD_MB", 11, blqe->block, blqe->block_len, blqe->file_id, 0); } int Load_log_processor::process(Append_block_log_event *ae) { DBUG_ENTER("Load_log_processor::process"); Create_file_log_event* ce= ((ae->file_id < file_names.elements) ? *((Create_file_log_event**)file_names.buffer + ae->file_id) : 0); const char* fname= ((ae->file_id < file_names.elements) ? dynamic_element(&file_names, ae->file_id, File_name_record*)->fname : 0); if (ce) if (fname) { File file; int error= 0; if (((file= my_open(ce->fname, if (((file= my_open(fname, O_APPEND|O_BINARY|O_WRONLY,MYF(MY_WME))) < 0)) DBUG_RETURN(-1); if (my_write(file,(byte*)ae->block,ae->block_len,MYF(MY_WME|MY_NABP))) Loading @@ -342,6 +464,14 @@ Create_file event for file_id: %u\n",ae->file_id); Load_log_processor load_processor; static bool check_database(const char *log_dbname) { return one_database && (log_dbname != NULL) && strcmp(log_dbname, database); } /* Process an event Loading Loading @@ -395,29 +525,21 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, switch (ev_type) { case QUERY_EVENT: if (one_database) { const char * log_dbname = ((Query_log_event*)ev)->db; if ((log_dbname != NULL) && (strcmp(log_dbname, database))) if (check_database(((Query_log_event*)ev)->db)) goto end; } ev->print(result_file, short_form, last_event_info); break; case CREATE_FILE_EVENT: { Create_file_log_event* ce= (Create_file_log_event*)ev; if (one_database) { /* We test if this event has to be ignored. If yes, we don't save this event; this will have the good side-effect of ignoring all related Append_block and Exec_load. Note that Load event from 3.23 is not tested. */ const char * log_dbname = ce->db; if ((log_dbname != NULL) && (strcmp(log_dbname, database))) if (check_database(ce->db)) goto end; // Next event } /* We print the event, but with a leading '#': this is just to inform the user of the original command; the command we want to execute Loading Loading @@ -473,6 +595,32 @@ Create_file event for file_id: %u\n",exv->file_id); */ ev= 0; break; case BEGIN_LOAD_QUERY_EVENT: ev->print(result_file, short_form, last_event_info); load_processor.process((Begin_load_query_log_event*) ev); break; case EXECUTE_LOAD_QUERY_EVENT: { Execute_load_query_log_event *exlq= (Execute_load_query_log_event*)ev; char *fname= load_processor.grab_fname(exlq->file_id); if (check_database(exlq->db)) { if (fname) my_free(fname, MYF(MY_WME)); goto end; } if (fname) { exlq->print(result_file, short_form, last_event_info, fname); my_free(fname, MYF(MY_WME)); } else fprintf(stderr,"Warning: ignoring Execute_load_query as there is no \ Begin_load_query event for file_id: %u\n", exlq->file_id); break; } default: ev->print(result_file, short_form, last_event_info); } Loading Loading
BitKeeper/etc/gone +2 −0 Original line number Diff line number Diff line Loading @@ -455,6 +455,7 @@ arjen@co3064164-a.bitbike.com|Docs/section.Comparisons.texi|20011108043647|22614 arjen@fred.bitbike.com|scripts/mysql_fix_extensions.sh|20020516001337|12363|f1048a78f4759b4d ccarkner@nslinuxw10.bedford.progress.com|mysql-test/r/isolation.result|20010327145543|25059|4da11e109a3d93a9 ccarkner@nslinuxw10.bedford.progress.com|mysql-test/t/isolation.test|20010327145543|39049|6a39e4138dd4a456 fs jani@hynda.mysql.fi|client/mysqlcheck|20010419221207|26716|363e3278166d84ec jcole@tetra.bedford.progress.com|BitKeeper/etc/logging_ok|20001004201211|30554 jimw@mysql.com|mysql-test/t/ndb_alter_table.disabled|20050311230559|27526|411e026940e7a0aa Loading @@ -465,6 +466,7 @@ jimw@mysql.com|mysql-test/t/ndb_cache_multi.disabled|20050311230600|18039|9657b6 jimw@mysql.com|mysql-test/t/ndb_cache_multi2.disabled|20050311230600|47901|84fed1a78c0d3e6d jimw@mysql.com|mysql-test/t/ndb_multi.disabled|20050311230600|12240|2599367ad06100f6 jimw@mysql.com|mysql-test/t/ndb_restore.disabled|20050311230600|30718|3c2453d6164b1a30 korbit-kernel-2.4.1 magnus@neptunus.(none)|ndb/src/client/Makefile|20040414084436|02010|6c2778d2bf4954a2 magnus@neptunus.(none)|ndb/src/client/odbc/Extra.mk|20040414082358|47442|eabbb28986ca817d magnus@neptunus.(none)|ndb/src/client/odbc/Makefile|20040414084435|33394|9bc928a18aa88d66 Loading
BitKeeper/etc/logging_ok +1 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ dlenev@jabberwock.localdomain dlenev@mysql.com ejonore@mc03.ndb.mysql.com gbichot@quadita2.mysql.com gbichot@quadxeon.mysql.com georg@beethoven.local georg@beethoven.site georg@lmy002.wdf.sap.corp Loading
Build-tools/Do-compile +41 −15 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ $opt_dbd_options=$opt_perl_options=$opt_config_options=$opt_make_options=$opt_su $opt_tmp=$opt_version_suffix=""; $opt_bundled_zlib=$opt_help=$opt_delete=$opt_debug=$opt_stage=$opt_no_test=$opt_no_perl=$opt_one_error=$opt_with_low_memory=$opt_fast_benchmark=$opt_static_client=$opt_static_server=$opt_static_perl=$opt_sur=$opt_with_small_disk=$opt_local_perl=$opt_tcpip=$opt_build_thread=$opt_use_old_distribution=$opt_enable_shared=$opt_no_crash_me=$opt_no_strip=$opt_with_archive=$opt_with_cluster=$opt_with_csv=$opt_with_example=$opt_with_debug=$opt_no_benchmark=$opt_no_mysqltest=$opt_without_embedded=$opt_readline=0; $opt_skip_embedded_test=$opt_skip_ps_test=$opt_innodb=$opt_bdb=$opt_raid=$opt_libwrap=$opt_clearlogs=$opt_with_federated=0; $global_step=""; GetOptions( "bdb", Loading Loading @@ -179,7 +180,8 @@ info("Compiling MySQL$opt_version_suffix at $host$opt_suffix, stage: $opt_stage\ info("LD_LIBRARY_PATH is $ENV{LD_LIBRARY_PATH}"); info("PATH is $ENV{PATH}"); log_timestamp(); $global_step= "Check MD5, shutdown"; log_timestamp("START"); $md5_result= safe_system("perl $ENV{HOME}/my_md5sum -c ${opt_distribution}.md5"); Loading Loading @@ -207,9 +209,10 @@ kill_all("mysqlmanager"); kill_all("$pwd/host/mysql"); kill_all("$pwd/host/test"); $global_step= "directory cleanup"; if ($opt_stage == 0) { log_timestamp(); log_timestamp("START"); print "$host: Removing old distribution\n" if ($opt_debug); if (!$opt_use_old_distribution) { Loading Loading @@ -255,10 +258,11 @@ safe_cd("$pwd/$host/$ver"); # # Configure the sources # $global_step= "configure"; if ($opt_stage <= 1) { # Fix files if this is in another timezone than the build host log_timestamp(); log_timestamp("START"); unlink("config.cache"); unlink("bdb/build_unix/config.cache"); unlink("innobase/config.cache"); Loading Loading @@ -312,29 +316,33 @@ if ($opt_stage <= 1) { safe_system("cp -r $pwd/$host/include-mysql/* $pwd/$host/$ver/include"); } log_timestamp("DONE "); } # # Compile the binaries # $global_step= "compile + link"; if ($opt_stage <= 2) { my ($command); log_timestamp(); log_timestamp("START"); unlink($opt_distribution) if ($opt_delete && !$opt_use_old_distribution); $command=$make; $command.= " $opt_make_options" if (defined($opt_make_options) && $opt_make_options ne ""); safe_system($command); print LOG "Do-compile: Build successful\n"; log_timestamp("DONE "); } # # Create the binary distribution # $global_step= "pack binary distribution"; if ($opt_stage <= 3) { log_timestamp("START"); my $flags= ""; log_timestamp(); log_system("rm -fr mysql-{3,4,5}* $pwd/$host/mysql*.t*gz"); # No need to add the debug symbols, if the binaries are not stripped (saves space) unless ($opt_with_debug || $opt_no_strip) Loading @@ -355,6 +363,7 @@ if ($opt_stage <= 3) safe_system("cp client/mysqladmin $pwd/$host/bin"); } safe_system("$make clean") if ($opt_with_small_disk); log_timestamp("DONE "); } $tar_file=<$pwd/$host/mysql*.t*gz>; Loading @@ -368,12 +377,14 @@ system("cd $pwd/$host; perl $ENV{HOME}/my_md5sum $tar_file_lite > ${tar_file_lit # # Unpack the binary distribution # $global_step= "extract binary distribution"; if ($opt_stage <= 4 && !$opt_no_test) { log_timestamp(); log_timestamp("START"); rm_all(<$pwd/$host/test/*>); safe_cd("$pwd/$host/test"); safe_system("gunzip < $tar_file | $tar xf -"); log_timestamp("DONE "); } $tar_file =~ /(mysql[^\/]*)\.(tar\.gz|tgz)/; Loading @@ -385,31 +396,37 @@ $ENV{"LD_LIBRARY_PATH"}= ("$test_dir/lib" . # # Run the test suite # $global_step= "tests in default mode"; if ($opt_stage <= 5 && !$opt_no_test && !$opt_no_mysqltest) { log_timestamp("START"); my $flags= ""; $flags.= " --with-ndbcluster" if ($opt_with_cluster); $flags.= " --force" if (!$opt_one_error); log_timestamp(); info("Running test suite"); system("mkdir $bench_tmpdir") if (! -d $bench_tmpdir); safe_cd("${test_dir}/mysql-test"); check_system("./mysql-test-run $flags --tmpdir=$bench_tmpdir --master_port=$mysql_tcp_port --slave_port=$slave_port --ndbcluster_port=$ndbcluster_port --manager-port=$manager_port --no-manager --sleep=10", "were successful"); log_timestamp("DONE "); $global_step= "tests using prepared statements"; unless ($opt_skip_ps_test) { log_timestamp(); log_timestamp("START"); info("Running test suite using prepared statements"); check_system("./mysql-test-run $flags --ps-protocol --tmpdir=$bench_tmpdir --master_port=$mysql_tcp_port --slave_port=$slave_port --ndbcluster_port=$ndbcluster_port --manager-port=$manager_port --no-manager --sleep=10", "were successful"); log_timestamp("DONE "); } $global_step= "tests using embedded server"; unless ($opt_skip_embedded_test) { log_timestamp(); log_timestamp("START"); info("Running embedded server test suite"); # Embedded server and NDB don't jive $flags=~ s/ --with-ndbcluster//; check_system("./mysql-test-run $flags --embedded-server --tmpdir=$bench_tmpdir --master_port=$mysql_tcp_port --slave_port=$slave_port --manager-port=$manager_port --no-manager --sleep=10", "were successful"); log_timestamp("DONE "); } # 'mysql-test-run' writes its own final message for log evaluation. } Loading Loading @@ -441,10 +458,11 @@ if (!$opt_no_test && !$opt_no_benchmark) # # Compile and install the required Perl modules # $global_step= "installing Perl modules"; if ($opt_stage <= 7 && $opt_perl_files && !$opt_no_perl && !$opt_no_test && !$opt_no_benchmark) { log_timestamp(); log_timestamp("START"); safe_cd($test_dir); rm_all("perl"); safe_system("mkdir perl"); Loading Loading @@ -473,25 +491,29 @@ if ($opt_stage <= 7 && $opt_perl_files && !$opt_no_perl && !$opt_no_test && safe_system($opt_static_perl ? "perl Makefile.PL -static $options" : "perl Makefile.PL $options"); safe_system("$make ; $sur $make install"); } log_timestamp("DONE "); } # # Run crash-me test # $global_step= "crash-me checks"; if ($opt_stage <= 8 && !$opt_no_test && !$opt_no_crash_me) { log_timestamp(); log_timestamp("START"); safe_cd("$test_dir/sql-bench"); log_system("rm -f limits/mysql.cfg"); safe_system("perl ./crash-me --force --batch-mode $connect_option"); log_timestamp("DONE "); } # # Run sql-bench Benchmarks # $global_step= "benchmarks"; if ($opt_stage <= 9 && !$opt_no_test && !$opt_no_benchmark) { log_timestamp(); log_timestamp("START"); safe_cd("$test_dir/sql-bench"); log_system("rm -f output/*"); $tmp= $opt_fast_benchmark ? "--fast --user root --small-test" : ""; Loading @@ -506,6 +528,7 @@ if ($opt_stage <= 9 && !$opt_no_test && !$opt_no_benchmark) { check_system("perl ./run-all-tests --log --suffix=\"_bdb\" --die-on-errors $connect_option $tmp --create-options=\"type=bdb\"","RUN-mysql"); } log_timestamp("DONE "); } rm_all($bench_tmpdir); Loading Loading @@ -690,7 +713,7 @@ sub abort my($mail_header_file); print LOG "\n$message\n"; print "$host: $message\n" if ($opt_debug); print LOG "Aborting\n"; log_timestamp("ABORT"); close LOG; if ($opt_user) Loading Loading @@ -866,6 +889,7 @@ sub kill_all if (!open(PS, "$pscmd|")) { print "Warning: Can't run $pscmd: $!\n"; log_timestamp("ABORT"); exit; } Loading Loading @@ -904,8 +928,10 @@ sub killpid # sub log_timestamp { my ($message) = @_; my @ta=localtime(time()); print LOG sprintf("%4d-%02d-%02d %02d:%02d:%02d\n", $ta[5]+1900, $ta[4]+1, $ta[3], $ta[2], $ta[1], $ta[0]); print LOG sprintf("%4d-%02d-%02d %02d:%02d:%02d %s %s\n", $ta[5]+1900, $ta[4]+1, $ta[3], $ta[2], $ta[1], $ta[0], $message, $global_step); }
Makefile.am +2 −2 Original line number Diff line number Diff line Loading @@ -25,14 +25,14 @@ SUBDIRS = . include @docs_dirs@ @zlib_dir@ \ @thread_dirs@ pstack \ @sql_union_dirs@ scripts man tests \ netware @libmysqld_dirs@ \ @bench_dirs@ support-files @fs_dirs@ @tools_dirs@ @bench_dirs@ support-files @tools_dirs@ DIST_SUBDIRS = . include @docs_dirs@ zlib \ @readline_topdir@ sql-common \ @thread_dirs@ pstack \ @sql_union_dirs@ scripts @man_dirs@ tests SSL\ BUILD netware os2 @libmysqld_dirs@ \ @bench_dirs@ support-files @fs_dirs@ @tools_dirs@ @bench_dirs@ support-files @tools_dirs@ # Relink after clean linked_sources = linked_client_sources linked_server_sources \ Loading
client/mysqlbinlog.cc +196 −48 Original line number Diff line number Diff line Loading @@ -103,6 +103,22 @@ class Load_log_processor { char target_dir_name[FN_REFLEN]; int target_dir_name_len; /* When we see first event corresponding to some LOAD DATA statement in binlog, we create temporary file to store data to be loaded. We add name of this file to file_names array using its file_id as index. If we have Create_file event (i.e. we have binary log in pre-5.0.3 format) we also store save event object to be able which is needed to emit LOAD DATA statement when we will meet Exec_load_data event. If we have Begin_load_query event we simply store 0 in File_name_record::event field. */ struct File_name_record { char *fname; Create_file_log_event *event; }; DYNAMIC_ARRAY file_names; /* Loading Loading @@ -144,7 +160,7 @@ class Load_log_processor int init() { return init_dynamic_array(&file_names,sizeof(Create_file_log_event*), return init_dynamic_array(&file_names, sizeof(File_name_record), 100,100 CALLER_INFO); } Loading @@ -161,33 +177,91 @@ class Load_log_processor } void destroy() { Create_file_log_event **ptr= (Create_file_log_event**)file_names.buffer; Create_file_log_event **end= ptr + file_names.elements; File_name_record *ptr= (File_name_record *)file_names.buffer; File_name_record *end= ptr + file_names.elements; for (; ptr<end; ptr++) { if (*ptr) if (ptr->fname) { my_free((char*)(*ptr)->fname,MYF(MY_WME)); delete *ptr; *ptr= 0; my_free(ptr->fname, MYF(MY_WME)); delete ptr->event; bzero((char *)ptr, sizeof(File_name_record)); } } } /* Obtain Create_file event for LOAD DATA statement by its file_id. SYNOPSIS grab_event() file_id - file_id identifiying LOAD DATA statement DESCRIPTION Checks whenever we have already seen Create_file event for this file_id. If yes then returns pointer to it and removes it from array describing active temporary files. Since this moment caller is responsible for freeing memory occupied by this event and associated file name. RETURN VALUES Pointer to Create_file event or 0 if there was no such event with this file_id. */ Create_file_log_event *grab_event(uint file_id) { File_name_record *ptr; Create_file_log_event *res; if (file_id >= file_names.elements) return 0; Create_file_log_event **ptr= (Create_file_log_event**)file_names.buffer + file_id; Create_file_log_event *res= *ptr; *ptr= 0; ptr= dynamic_element(&file_names, file_id, File_name_record*); if ((res= ptr->event)) bzero((char *)ptr, sizeof(File_name_record)); return res; } /* Obtain file name of temporary file for LOAD DATA statement by its file_id. SYNOPSIS grab_fname() file_id - file_id identifiying LOAD DATA statement DESCRIPTION Checks whenever we have already seen Begin_load_query event for this file_id. If yes then returns file name of corresponding temporary file. Removes record about this file from the array of active temporary files. Since this moment caller is responsible for freeing memory occupied by this name. RETURN VALUES String with name of temporary file or 0 if we have not seen Begin_load_query event with this file_id. */ char *grab_fname(uint file_id) { File_name_record *ptr; char *res= 0; if (file_id >= file_names.elements) return 0; ptr= dynamic_element(&file_names, file_id, File_name_record*); if (!ptr->event) { res= ptr->fname; bzero((char *)ptr, sizeof(File_name_record)); } return res; } int process(Create_file_log_event *ce); int process(Begin_load_query_log_event *ce); int process(Append_block_log_event *ae); File prepare_new_file_for_old_format(Load_log_event *le, char *filename); int load_old_format_file(NET* net, const char *server_fname, uint server_fname_len, File file); int process_first_event(const char *bname, uint blen, const char *block, uint block_len, uint file_id, Create_file_log_event *ce); }; Loading Loading @@ -265,22 +339,42 @@ int Load_log_processor::load_old_format_file(NET* net, const char*server_fname, } int Load_log_processor::process(Create_file_log_event *ce) /* Process first event in the sequence of events representing LOAD DATA statement. SYNOPSIS process_first_event() bname - base name for temporary file to be created blen - base name length block - first block of data to be loaded block_len - first block length file_id - identifies LOAD DATA statement ce - pointer to Create_file event object if we are processing this type of event. DESCRIPTION Creates temporary file to be used in LOAD DATA and writes first block of data to it. Registers its file name (and optional Create_file event) in the array of active temporary files. RETURN VALUES 0 - success non-0 - error */ int Load_log_processor::process_first_event(const char *bname, uint blen, const char *block, uint block_len, uint file_id, Create_file_log_event *ce) { const char *bname= ce->fname+dirname_length(ce->fname); uint blen= ce->fname_len - (bname-ce->fname); uint full_len= target_dir_name_len + blen + 9 + 9 + 1; int error= 0; char *fname, *ptr; File file; DBUG_ENTER("Load_log_processor::process"); File_name_record rec; DBUG_ENTER("Load_log_processor::process_first_event"); if (set_dynamic(&file_names,(gptr)&ce,ce->file_id)) { sql_print_error("Could not construct local filename %s%s", target_dir_name,bname); DBUG_RETURN(-1); } if (!(fname= my_malloc(full_len,MYF(MY_WME)))) DBUG_RETURN(-1); Loading @@ -288,7 +382,7 @@ int Load_log_processor::process(Create_file_log_event *ce) ptr= fname + target_dir_name_len; memcpy(ptr,bname,blen); ptr+= blen; ptr+= my_sprintf(ptr,(ptr,"-%x",ce->file_id)); ptr+= my_sprintf(ptr, (ptr, "-%x", file_id)); if ((file= create_unique_file(fname,ptr)) < 0) { Loading @@ -296,9 +390,21 @@ int Load_log_processor::process(Create_file_log_event *ce) target_dir_name,bname); DBUG_RETURN(-1); } rec.fname= fname; rec.event= ce; if (set_dynamic(&file_names, (gptr)&rec, file_id)) { sql_print_error("Could not construct local filename %s%s", target_dir_name, bname); DBUG_RETURN(-1); } if (ce) ce->set_fname_outside_temp_buf(fname, strlen(fname)); if (my_write(file,(byte*) ce->block,ce->block_len,MYF(MY_WME|MY_NABP))) if (my_write(file, (byte*)block, block_len, MYF(MY_WME|MY_NABP))) error= -1; if (my_close(file, MYF(MY_WME))) error= -1; Loading @@ -306,19 +412,35 @@ int Load_log_processor::process(Create_file_log_event *ce) } int Load_log_processor::process(Create_file_log_event *ce) { const char *bname= ce->fname + dirname_length(ce->fname); uint blen= ce->fname_len - (bname-ce->fname); return process_first_event(bname, blen, ce->block, ce->block_len, ce->file_id, ce); } int Load_log_processor::process(Begin_load_query_log_event *blqe) { return process_first_event("SQL_LOAD_MB", 11, blqe->block, blqe->block_len, blqe->file_id, 0); } int Load_log_processor::process(Append_block_log_event *ae) { DBUG_ENTER("Load_log_processor::process"); Create_file_log_event* ce= ((ae->file_id < file_names.elements) ? *((Create_file_log_event**)file_names.buffer + ae->file_id) : 0); const char* fname= ((ae->file_id < file_names.elements) ? dynamic_element(&file_names, ae->file_id, File_name_record*)->fname : 0); if (ce) if (fname) { File file; int error= 0; if (((file= my_open(ce->fname, if (((file= my_open(fname, O_APPEND|O_BINARY|O_WRONLY,MYF(MY_WME))) < 0)) DBUG_RETURN(-1); if (my_write(file,(byte*)ae->block,ae->block_len,MYF(MY_WME|MY_NABP))) Loading @@ -342,6 +464,14 @@ Create_file event for file_id: %u\n",ae->file_id); Load_log_processor load_processor; static bool check_database(const char *log_dbname) { return one_database && (log_dbname != NULL) && strcmp(log_dbname, database); } /* Process an event Loading Loading @@ -395,29 +525,21 @@ int process_event(LAST_EVENT_INFO *last_event_info, Log_event *ev, switch (ev_type) { case QUERY_EVENT: if (one_database) { const char * log_dbname = ((Query_log_event*)ev)->db; if ((log_dbname != NULL) && (strcmp(log_dbname, database))) if (check_database(((Query_log_event*)ev)->db)) goto end; } ev->print(result_file, short_form, last_event_info); break; case CREATE_FILE_EVENT: { Create_file_log_event* ce= (Create_file_log_event*)ev; if (one_database) { /* We test if this event has to be ignored. If yes, we don't save this event; this will have the good side-effect of ignoring all related Append_block and Exec_load. Note that Load event from 3.23 is not tested. */ const char * log_dbname = ce->db; if ((log_dbname != NULL) && (strcmp(log_dbname, database))) if (check_database(ce->db)) goto end; // Next event } /* We print the event, but with a leading '#': this is just to inform the user of the original command; the command we want to execute Loading Loading @@ -473,6 +595,32 @@ Create_file event for file_id: %u\n",exv->file_id); */ ev= 0; break; case BEGIN_LOAD_QUERY_EVENT: ev->print(result_file, short_form, last_event_info); load_processor.process((Begin_load_query_log_event*) ev); break; case EXECUTE_LOAD_QUERY_EVENT: { Execute_load_query_log_event *exlq= (Execute_load_query_log_event*)ev; char *fname= load_processor.grab_fname(exlq->file_id); if (check_database(exlq->db)) { if (fname) my_free(fname, MYF(MY_WME)); goto end; } if (fname) { exlq->print(result_file, short_form, last_event_info, fname); my_free(fname, MYF(MY_WME)); } else fprintf(stderr,"Warning: ignoring Execute_load_query as there is no \ Begin_load_query event for file_id: %u\n", exlq->file_id); break; } default: ev->print(result_file, short_form, last_event_info); } Loading