1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-07 17:42:39 +03:00
Commit Graph

269 Commits

Author SHA1 Message Date
unknown
c2d849f8bd Fix for BUG#2452 "Empty LOAD DATA INFILE failes with the master in 3.23.x":
do not write the Execute_load_log_event if there was no Create_file_log_event
(empty file).
2004-01-20 15:41:22 -05:00
unknown
f8d7b467b8 Fix for BUG#2145 "mysqld becomes unreliable if unable to create a relay log when replic starts":
release the mutex before exiting the function, or it will be kept forever
(=> START SLAVE, STOP SLAVE, etc will hang).


sql/slave.cc:
  release the mutex before exiting the function, or it will be kept forever
  (=> START SLAVE, STOP SLAVE, etc will hang).
2003-12-17 23:29:11 +01:00
unknown
66927c51fa - Fix for BUG#1858 "SQL-Thread stops working when using optimize table":
we change THD::system_thread from a 'bool' to a bitmap to be able to
distinguish between delayed-insert threads and slave threads.
- Fix for BUG#1701 "Update from multiple tables" (one line in sql_parse.cc,
plus a new test rpl_multi_update.test). That's just adding an initialization.


sql/repl_failsafe.cc:
  comment to warn about this unused code
sql/slave.cc:
  Now thd->system_thread is a bitmap, not a bool.
sql/sql_class.h:
  'bool' for THD::system_thread is not accurate enough; sometimes we need
  to distinguish between delayed-insert threads and slave threads;
  so changing THD::system_thread to a bitmap (uint).
sql/sql_insert.cc:
  thd.system_thread is now a bitmap
sql/sql_parse.cc:
  We need to initialize thd->lex.select_lex.options in mysql_init_query();
  it's already initialized in dispatch_command() but replication calls
  mysql_parse() directly, thus bypassing dispatch_command().
  Not initing it here leads to a query influencing the next query,
  in the slave SQL thread.
  The initialization in dispatch_command() must be kept as this
  command uses the variable in tests, even when the command was not a
  query (i.e. when mysql_init_query() was not called).
2003-12-04 22:42:18 +01:00
unknown
8479e5a379 Fix for BUG#2011 "rare race condition producing "binlog has bad magic number" error in slave".
The problem was that when the slave SQL thread reads a hot relay log (hot = the one being written to by the
slave I/O thread), it must have the LOCK_log. It already took it for read_log_event(), but needs
it also for check_binlog_magic().
This should fix all recently reported failures of the rpl_max_relay_size test in 4.1 and 5.0
(though the bug exists since 4.0, it showed up first in 5.0).


sql/slave.cc:
  Fix for BUG#2011 "rare race condition producing "binlog has bad magic number" error in slave".
  The problem was that when the slave SQL thread reads a hot relay log (hot = the one being written to by the
  slave I/O thread), it must have the LOCK_log. It already took it for read_log_event(), but needs
  it also for check_binlog_magic().
2003-12-04 15:30:14 +01:00
unknown
5ec3a67132 When we delete the slave's temp tables from memory, we reset
rli->save_temporary_tables and slave_open_temp_tables
(in old 4.0 you could make "SHOW STATUS LIKE 'slave_open_temp_tables'" grow
indefinitely by doing RESET SLAVE and replicating always the same CREATE
TEMPORARY TABLE).
It's critical to reset save_temporary_tables to 0 (otherwise you may later
read memory which has been freed) so this changeset should go into 4.1.


mysql-test/r/rpl_reset_slave.result:
  result update
mysql-test/t/rpl_reset_slave.test:
  test for RESET SLAVE and creating twice the same temp table in the slave.
sql/slave.cc:
  when we delete the slave's temp tables (when slave server shuts down and when
  RESET SLAVE), we reset 2 variables: rli->save_temporary_tables & slave_open_temp_tables.
2003-11-03 18:24:01 +01:00
unknown
b920ab261e 4 small items in this:
- when we don't have in_addr_t, use uint32.
- a forgotten initialization of slave_proxy_id in sql/log_event.cc (was not really "forgot", was
"we needn't init it there", but there was one case where we needed...).
- made slave_proxy_id always meaningful in THD and Log_event, so we can
rely more on it (no need to test if it's meaningful). THD::slave_proxy_id
is equal to THD::thread_id except for the slave SQL thread.
- clean up the slave's temporary table (i.e. free their memory) when slave
server shuts down.


extra/resolveip.c:
  removed #define as it is simpler to put it in my_net.h
  (because we need the #define elsewhere)
include/my_net.h:
  When in_addr_t is not defined, use uint32.
libmysql/libmysql.c:
  using in_addr_t is more generic.
libmysql/manager.c:
  using in_addr_t is more generic.
mysql-test/t/rpl_chain_temp_table.test:
  comments
sql/log_event.cc:
  * Had forgot to initialize slave_proxy_id in the event constructor (char* buf...).
  Initializing is in fact only needed for Create_file_log_event, because
  it uses slave_proxy_id even if it does not write an event to the binlog
  (it uses slave_proxy_id to write it to SQL-LOAD.info).
  * When we write events we now always write slave_proxy_id, which is now always
  meaningful (as thd->slave_proxy_id is now always meaningful, see change in
  sql_class.cc).
sql/mini_client.cc:
  in_addr_t is more generic.
sql/slave.cc:
  A RELAY_LOG_INFO method to free the slave's temporary tables from memory
  at slave's server shutdown.
  It is called by end_slave(), which is called by close_connections(),
  which is called when the server terminates
  (close_connections() is just before clean_up(); putting the call in 
  clean_up() was buggy, as active_mi is already deleted by close_connections().
sql/slave.h:
  new method
sql/sql_class.cc:
  By default we set THD::slave_proxy_id to THD::thread_id,
  so THD::slave_proxy_id is always meaningful (not 0).
  It's always the same as the thread id except for the slave
  SQL thread.
2003-10-31 23:20:23 +01:00
unknown
03dbf8ccbb Fix for BUG#1686
"If 2 master threads with same-name temp table, slave makes bad binlog"
and (two birds with one stone) for
BUG#1240 "slave of slave breaks when STOP SLAVE was issud on parent slave
and temp tables".

Here is the design change:
in a slave running with --log-slave-updates, events are now logged with the
thread id they had on the master. So no more id conflicts between master threads,
but introduces id conflicts between one master thread and one normal 
client thread connected to the slave. This is solved by storing the server id
in the temp table's name.

New test which requires mysql-test-run to be run with --manager,
otherwise it will be skipped.

Undoing a Monty's change (hum, a chill runs down my spine ;) which was
"Cleanup temporary tables when slave ends" in ChangeSet 1.1572.1.1.


mysql-test/mysql-test-run.sh:
  One new test which needs more than one slave so must be hardcoded in mysql-test-run.sh.
sql/log_event.cc:
  The event needs to carry a slave_proxy_id (which is set at event's creation
  and used at event's logging).
  This is used for events created by ::exec_event() in the slave SQL thread:
  now we want to log these events with the thread id they had on the master.
  This is so that several same-name temp tables simultaneously created on
  the master end up with not the same thread id in the slave's binlog.
sql/log_event.h:
  Query and Load need to carry a slave_proxy_id, like they carried a thread_id
  (to replicate temp tables well).
sql/slave.cc:
  Do not free temp tables in the slave SQL thread. Or they will be lost when
  one does STOP SLAVE / START SLAVE.
  We even save them in rli->save_temporary_tables and set thd->temporary_tables=0
  to prevent them to be freed.
sql/sql_base.cc:
  Put the server id in the table cache key name for temp tables
  (we already put the slave_proxy_id, but we also need the server id
  in case normal clients (not slave threads) are using temp tables
  on the slave).
sql/unireg.h:
  4 more bytes, to store the server id.
2003-10-29 14:23:35 +01:00
unknown
0b8743c1b2 A fix for a random test failure rpl_trunc_binlog: don't RESET MASTER
while the slave is connected.


mysql-test/t/rpl_trunc_binlog.test:
  don't RESET MASTER while the slave is connected; this could confuse the master or slave.
  (In replication you don't RESET MASTER while a slave is connected!)
sql/slave.cc:
  typo
2003-10-17 00:00:25 +02:00
unknown
b06eb4d81a Better fix for CREATE TABLE IF NOT EXISTS ... SELECT
Fixed chsize() problem on windows
Extend default timeout on windows clients to 1 year (to avoid timeout problems)


include/mysql.h:
  Added client timeouts (for TCP/IP)
libmysql/libmysql.c:
  Added client timeouts (for TCP/IP)
mysql-test/r/create.result:
  More tests for CREATE TABLE IF NOT EXISTS ... SELECT
mysql-test/t/create.test:
  More tests for CREATE TABLE IF NOT EXISTS ... SELECT
mysys/my_chsize.c:
  Fix for windows
sql/handler.h:
  Remove not used field 'if_not_exists'
  Ordered fields to be more optimized for new CPU's
  Added field 'table_existed'
sql/slave.cc:
  Cleanup temporary tables when slave ends
sql/sql_class.h:
  Remove not used 'do_not_drop' field
sql/sql_insert.cc:
  Better fix for CREATE TABLE IF NOT EXISTS ... SELECT
sql/sql_table.cc:
  Better fix for CREATE TABLE IF NOT EXISTS ... SELECT
2003-10-15 21:41:13 +03:00
unknown
7e1a1032e8 Make the slave die if master is 5.0. Indeed, 5.0 masters send
a Format_description_log_event (or maybe it will be named
Description_log_event) which is not recognized by 4.0, so
a 4.0 can't be a slave of 5.0. We detect it early to produce
a helpful message instead of "corrupted relay log" later.


sql/slave.cc:
  Make the slave die if master is 5.0.
2003-10-09 17:40:38 +02:00
unknown
69b8b3ff7c * Fix for BUG#1248: "LOAD DATA FROM MASTER drops the slave's db unexpectedly".
Now LOAD DATA FROM MASTER does not drop the database, instead it only tries to
create it, and drops/creates table-by-table.
* replicate_wild_ignore_table='db1.%' is now considered as "ignore the 'db1'
database as a whole", as it already works for CREATE DATABASE and DROP DATABASE.


mysql-test/r/rpl000009.result:
  result update
mysql-test/t/rpl000009.test:
  test that LOAD DATA FROM MASTER does not drop databases,
  but rather table by table, thus preserving non-replicated tables.
  Test that LOAD DATA FROM MASTER reports the error when a table could not
  be dropped (system's "permission denied" for example).
  Test that LOAD TABLE FROM MASTER reports the error when the table already exists.
sql/repl_failsafe.cc:
  * replicate_wild_ignore_table='db1.%' is now considered as "ignore the 'db1'
  database as a whole", as it already works for CREATE DATABASE and DROP DATABASE.
  * If a db matches replicate_*_db rules, we don't drop/recreate it because this
  could drop some tables in this db which could be slave-specific. Instead,
  we do a CREATE DATABASE IF EXISTS, and we will drop each table which has
  an equivalent on the master, table-by-table.
sql/slave.cc:
  New argument to drop the table in create_table_from_dump() 
  (LOAD TABLE/DATA FROM MASTER are the only places where this function is used).
  This is needed because LOAD DATA FROM MASTER does not drop the database anymore.
  The behaviour when the table exists is unchanged: LOAD DATA silently replaces
  the table, LOAD TABLE gives error.
sql/slave.h:
  new argument to drop the table in fetch_master_table
sql/sql_parse.cc:
  do not drop the table in LOAD TABLE FROM MASTER (this behaviour is already
  true; but changes in LOAD DATA FROM MASTER made the argument needed).
2003-09-11 23:17:28 +02:00
unknown
3fdc38d4bb comments about mutexes in replication.
Don't start the SQL slave thread with SQL_BIG_SELECTS;
it's better to inhibate max_join_size instead.


sql/slave.cc:
  OPTION_BIG_SELECTS does more than ignoring max_join_size (talks to the optimiser),
  just ignore max_join_size.
sql/slave.h:
  comments
2003-08-25 16:20:21 +02:00
unknown
c47ee56915 Clearer states in SHOW PROCESSLIST for replication threads.
For example the Binlog_dump thread (on the master) sometimes showed "Slave:".
And there were confusing messages where "binlog" was employed instead
of "relay log".


sql/log.cc:
  MYSQL_LOG::wait_for_update() is used by the binlog_dump and I/Oslave threads,
  and it updates thd->proc_info, so we need a bool to not show the same
  proc_info for 2 different things (previously we showed "Slave: etc" and that's
  bad for a binlog_dump thread).
sql/slave.cc:
  Clearer thd-proc_info for slave threads.
sql/sql_class.h:
  prototype change
sql/sql_repl.cc:
  clearer thd->proc_info for binlog_dump thread
2003-08-25 14:13:58 +02:00
unknown
89e95d0c26 The slave threads MUST not care about max_join_size, we start them with
OPTION_BIG_SELECTS.


sql/slave.cc:
  The slave threads MUST not care about max_join_size.
  I can imagine the case of a slave where users can connect and do SELECTs, but
  DBA does not want them to issue crazy SELECTs, but he/she still wants replication
  to work.
  Before, this just printed a warning to the error log (not fatal) but that
  was still annoying.
2003-08-23 17:41:43 +02:00
unknown
6e10224d71 * Fix for a potential bug:
when the SQL thread stops, set rli->inside_transaction to 0. This is needed if the user
later restarts replication from a completely different place where there are only autocommit
statements.
* Detect the case where the master died while flushing the binlog cache to the binlog
and stop with error. Cannot add a testcase for this in 4.0 (I tested it manually)
as the slave always runs with --skip-innodb.


sql/log_event.cc:
  Detect the case where the master died while flushing the binlog cache to the binlog:
  in that case, we have a BEGIN with no COMMIT/ROLLBACK in the relay log; we detect
  this with rli->inside_transaction in Rotate_log_event::exec_event() (which is the
  only right place to detect this, see comments). When we see it, we stop with error.
  In 4.1, I had put code in Start_log_event::exec_event(); I'll remove it next time
  I push in the 4.1 tree.
sql/slave.cc:
  * Use slave_print_error instead of sql_print_error, to put the info in SHOW SLAVE STATUS too.
  * Fix for a potential bug:
  when the SQL thread stops, set rli->inside_transaction to 0. This is not needed if
  replication later restarts from the same position; but this is needed if the user
  restarts replication from a completely different place where there are only autocommit
  statements (in that case, if we didn't set to 0, the position would never increment in SHOW
  SLAVE STATUS, even if queries are processed well).
2003-08-23 16:53:04 +02:00
unknown
fd9b177564 Yesterday I removed process_io_create_file; I shouldn't have.
Let's say the lack of comments did not help me ;)
Copying it back again and adding comments; now 3.23->4.0
replication of LOAD DATA INFILE works again.


sql/slave.cc:
  Enabling again process_io_create_file
2003-08-21 10:24:37 +02:00
unknown
d52145da3d Merge gbichot@bk-internal.mysql.com:/home/bk/mysql-4.0
into mysql.com:/home/mysql_src/mysql-4.0


sql/log.cc:
  Auto merged
sql/log_event.cc:
  Auto merged
sql/slave.cc:
  Auto merged
2003-08-20 23:25:58 +02:00
unknown
1542fffb34 First commit for fixing BUG#1100
"LOAD DATA INFILE is badly filtered by binlog-*-db rules".
There will probably be a second final one to merge Dmitri's changes
to rpl_log.result and mine.
2 new tests:
rpl_loaddata_rule_m : test of logging of LOAD DATA INFILE when the master has binlog-*-db rules,
rpl_loaddata_rule_s : test of logging of LOAD DATA INFILE when the slave has binlog-*-db rules and --log-slave-updates.


mysql-test/r/rpl_loaddata.result:
  Test that logging of LOAD DATA INFILE is done on the slave
mysql-test/t/rpl_loaddata.test:
  Test that logging of LOAD DATA is done on the slave
sql/log.cc:
  debug info
sql/log_event.cc:
  * Append_block, Exec_load and Delete_file now have a member 'db' like Create_file.
  This member is filled by mysql_load(). It is used for filtering by binlog-*-db rules,
  that's all. It's not written to the binlog, and so can't be read from the binlog.
  In other words, that's temporary info which is stored in the event and lost when
  it is written and deleted.
  * Better error messages in Append_block et al. events.
  * The slave now logs (log-slave-updates) the Create_file et al. events in mysql_load()
  (they are not directly copied from the events in the relay log, because this
  prevented filtering by binlog-*-db rules). Before, mysql_load() in the slave
  did no logging, now it does the logging, as in any regular thread.
sql/log_event.h:
  New member 'db' for Append_block et al. events.
sql/slave.cc:
  Removed useless code. Why was it useless:
  - CREATE_FILE_EVENT is not defined in 3.23. It appeared in 4.0.
  - in queue_old_event(), which is called only if the master is 3.23, we had a
  case CREATE_FILE_EVENT:
  so this case can be removed.
  - this case was the only caller of process_io_create_file() so this function
  can be removed.
sql/sql_load.cc:
  Pass the db to events, so that they can be well filtered.
sql/sql_repl.cc:
  Pass the db to events so that they can be well filtered.
2003-08-20 23:24:45 +02:00
unknown
e3541b8a97 Fix for BUG#1086. Now we don't preserve event's log_pos through
log-slave-updates since this causes unexpected values in 
Exec_master_log_pos in A->B->C replication setup, synchronization
 problems in master_pos_wait()... 
Still this brokes some functionality in sql/repl_failsafe.cc 
(but this file is not used now)


mysql-test/r/rpl_log.result:
  SHOW BINLOG EVENTS for binlog on slave should give the same 
  Orig_log_pos and Pos values
sql/log_event.cc:
  Do not propagate our master's log pos to our bin log
sql/repl_failsafe.cc:
  Added comment about broken SHOW NEW MASTER
sql/slave.cc:
  Do not propagate our master's log pos to our bin log
sql/sql_class.cc:
  THD::log_pos is no longer needed
sql/sql_class.h:
  THD::log_pos is no longer needed
sql/sql_parse.cc:
  Added comment about broken SHOW NEW MASTER
2003-08-20 03:38:31 +04:00
unknown
6db21de014 Merge bk-internal.mysql.com:/home/bk/mysql-4.0
into mashka.mysql.fi:/home/my/mysql-4.0


sql/slave.cc:
  Auto merged
sql/slave.h:
  Auto merged
sql/sql_acl.cc:
  Auto merged
2003-08-07 20:18:51 +03:00
unknown
fa1613be0a Review of changesets since last pull.
(Mostly code cleanups)


include/my_sys.h:
  Removed not used define
myisam/mi_check.c:
  Indentation change
mysql-test/t/rpl_insert_id.test:
  Add test if server supports innodb
mysys/mf_format.c:
  Remove QUOTE handling from fn_format()
  (fn_format() should not have anything to do with quoting things)
sql/log_event.cc:
  Removed some unnecessary casts (by changing functions to use const char *)
  Cleaned up some error messages to make them shorter and (hopefully) more readable.
  Fixed wrong format strings
  Restored 'thd->options' on error.
sql/mini_client.cc:
  Changed order of include files to remove compilation warning
sql/mysqld.cc:
  Add proper quoting of service arguments (don't use fn_format)
sql/slave.cc:
  Simple optimization and cleanup.
  Changed rewrite_db() and print_slave_db_safe() to use const char* to avoid casting of arguments when calling functions.
  Cleanup of some error messages.
sql/slave.h:
  Changed protypes to use const char *
sql/sql_acl.cc:
  Simple optimization
vio/viosslfactories.c:
  Changed order of include files to remove compilation warning
2003-08-07 20:16:37 +03:00
unknown
d8df84aa43 2 bugfixes:
- Bug #985: "Between RESET SLAVE and START SLAVE, SHOW SLAVE STATUS is wrong."
Now RESET SLAVE puts correct info in mi->host etc. A new test rpl_reset_slave
for that.
- Bug #986: "CHANGE MASTER & START SLAVE do not reset error columns in SHOW
SLAVE STATUS". Now these reset the errors.


mysql-test/r/rpl_loaddata.result:
  result update.
mysql-test/t/rpl_loaddata.test:
  Test that RESET SLAVE, START SLAVE and CHANGE MASTER all reset 
  Last_slave_error and Last_slave_errno (columns of SHOW SLAVE STATUS).
  We do it in this test because that's one of tests which have 
  an intentional query error on the slave.
sql/slave.cc:
  As we need TWICE the code to copy command-line options (--master-host etc)
  to mi (we already had it in init_master_info, but we also need it in RESET
  SLAVE to fix bug#985), I make a function of this code.
  And a function to reset Last_slave_error and Last_slave_errno (we need
  it in CHANGE MASTER, RESET SLAVE, and at the start of the SQL thread).
sql/slave.h:
  declarations for new functions.
sql/sql_repl.cc:
  copy --master-host etc to mi in RESET SLAVE, so that SHOW SLAVE STATUS
  shows correct information.
2003-08-04 10:59:44 +02:00
unknown
ab34adf66a WL#1036 (print the db in slave error messages).
I extended the task to cleaning error messages, making them look nicer,
and making the output of SHOW SLAVE STATUS (column Last_error) be as complete
as what's printed on the .err file;
previously we would have, for a failure of a replicated LOAD DATA INFILE:
- in the .err, 2 lines:
"duplicate entry 2708 for key 1"
"failed loading SQL_LOAD-5-2-2.info"
- and in SHOW SLAVE STATUS, only:
"failed loading SQL_LOAD-5-2-2.info".
Now SHOW SLAVE STATUS will contain the concatenation of the 2 messages.


sql/log_event.cc:
  Print the default database when replication stops because of an error. Previously, we had:
  "error "Duplicate entry 87987 for key 1", query 'insert into t values(87987)'", ie the db
  was not mentioned, making it hard for cases where the same table name is used in
  several databases.
  Lengthened some error messages (for failing replication of LOAD DATA: mention the table
  and the db).
  Changes so that SHOW SLAVE STATUS reports as complete errors as the .err file.
sql/slave.cc:
  Removed a useless declaration (the rewrite_db() function is already declared in slave.h).
  Added missing ')' in error messages.
  Tried to make error messages look nicer (previously we had
  "do START SLAVE;, error_code=1062"
  now we'll have
  "do START SLAVE; . Error_code=1062".
  This form has been discussed, I agree it's no panacea, but it's still more readable
  like this. To be improved in the future :)
sql/slave.h:
  declarations.
2003-07-24 22:25:36 +02:00
unknown
128feded87 Better fix for bug #791: At binlog rotation, INSERTs may not find their way into the binlog
mysql-test/t/rpl_flush_log_loop.test:
  Add timer to avoid problem when 'flush logs' is executed before we have read all data from master
sql/log.cc:
  Better fix for bug #791:
  Mark log as LOG_TO_BE_OPENED instead of LOG_CLOSED when it's closed and opened.
sql/mysqld.cc:
  Better startup message
sql/slave.cc:
  Fix argument to close()
sql/sql_class.h:
  Better handling of log.close()
2003-07-14 14:59:26 +03:00
unknown
d974959b4f Fix for BUG#791:
a safer way of initing the mutexes in MYSQL_LOG.
is_open() is now always thread-safe.
See each file for details.


sql/handler.cc:
  is_open() with locks
sql/item_func.cc:
  is_open() with locks
sql/log.cc:
  No more 'inited'.
  We now always use is_open() in a thread-safe manner.
  This simplifies some functions (no more need to test is_open() twice).
sql/log_event.cc:
  is_open() with locks
sql/mysqld.cc:
  Init mutexes for the global MYSQL_LOG objects.
  We care about no_rotate, because we can't do it in open() anymore (because
  we don't have 'inited' anymore).
sql/repl_failsafe.cc:
  is_open() with locks
sql/slave.cc:
  init pthread objects (mutexes, conds) in the constructor of st_relay_log_info.
  Some better locking in rotate_relay_log().
sql/sql_base.cc:
  is_open() with locks
sql/sql_class.h:
  Before, we inited LOCK_log in MYSQL_LOG::open(), so in other places of the code
  when we were never 100% sure that it had been inited. For example, if the server
  was running without --log-bin, ::open() was not called so the mutex was not
  inited. We could detect it with !inited, but not safely as 'inited' was not
  protected by any mutex.
  So now:
  we *always* init the LOCK_log mutex, even if the log is not used. We can't init
  the mutex in MYSQL_LOG's constructor, because for global objects like
  mysql_bin_log, mysql_log etc, the constructor is called before MY_INIT(), but
  safe_mutex depends on MY_INIT(). So we have a new function MYSQL_LOG::init_pthread_objects
  which we call in main(), after MY_INIT().
  For the relay log, we call this function in the constructor of
  st_relay_log_info, which is called before any function tries to
  use the relay log (the relay log is always invoked as rli.relay_log).
  So now we should be safe in all cases and we don't need 'inited'.
sql/sql_db.cc:
  is_open() with locks
sql/sql_delete.cc:
  is_open() with locks
sql/sql_insert.cc:
  is_open() with locks
sql/sql_load.cc:
  is_open() with locks
sql/sql_parse.cc:
  is_open() with locks
sql/sql_rename.cc:
  is_open() with locks
sql/sql_repl.cc:
  is_open() with locks
sql/sql_table.cc:
  is_open() with locks
sql/sql_update.cc:
  is_open() with locks
2003-07-11 14:26:44 +02:00
unknown
3c268e59ec Cleanups
mysql-test/t/distinct.test:
  Cleanup
sql/log.cc:
  Cleanup
sql/slave.cc:
  Cleanup
sql/sql_delete.cc:
  Cleanup
sql/sql_parse.cc:
  Simple optimization
2003-07-09 00:55:07 +03:00
unknown
27601fc5ee WL#912 (more user control on relay logs):
FLUSH LOGS now rotates relay logs,
and a new variable max_relay_log_size.
Plus a very small bit of code cleaning.


libmysqld/lib_sql.cc:
  open_log has no default arguments anymore.
mysql-test/r/rpl_flush_log_loop.result:
  result update now that FLUSH LOGS rotates relay logs.
mysql-test/r/rpl_log.result:
  result update now that FLUSH LOGS rotates relay logs.
mysql-test/r/rpl_rotate_logs.result:
  result update now that max_binlog_size is 4096.
mysql-test/t/rpl_rotate_logs-master.opt:
  now max_binlog_size must be a multiple of 4096 (see change in mysqld.cc)
sql/log.cc:
  Got rid of default arguments of various MYSQL_LOG methods (the default arguments
  made code reading uneasy).
  Set max_size in ::init().
  New function set_max_size() to set max_size of a MYSQL_LOG on-the-fly.
  More DBUG info.
sql/mysql_priv.h:
  no defaults in open_log().
  New variables max_relay_log_size.
sql/mysqld.cc:
  New variable and option max_relay_log_size.
  max_binlog_size and max_relay_log_size are multiples of IO_SIZE.
  No more default arguments for log functions.
sql/set_var.cc:
  New variable max_relay_log_size.
  If it is 0, then max_binlog_size will apply to relay logs.
  When one of these variables is changed, fix_max_%log_size is called
  to update max_size of the binary and/or relay logs.
sql/slave.cc:
  New function rotate_relay_log().
sql/slave.h:
  New function rotate_relay_log().
sql/sql_class.h:
  New member max_size of MYSQL_LOG (for automatic rotation).
  New method set_max_size() for setting on-the-fly.
sql/sql_parse.cc:
  Flush the relay log in FLUSH LOGS.
2003-07-06 17:59:54 +02:00
unknown
e22a31f173 I committed the same changeset in my tree yesterday, but broke the tree since,
so I commit again in a fresh tree.
Fix for bug#763 (Relay_log_space too big by 4 bytes),
plus comments and DBUG_PRINT, and we don't start replication
if --bootstrap.


mysql-test/r/rpl_log.result:
  Result update
mysql-test/r/rpl_log_pos.result:
  Result update
sql/mysqld.cc:
  Don't start replication if in bootstrap mode (bootstrap isn't supposed to have
  several threads).
sql/slave.cc:
  Fix for bug 763 (Relay_log_space too big by 4 bytes).
  A DBUG_PRINT.
sql/sql_acl.cc:
  Replaced a return by DBUG_RETURN (happened to find this reading a debug log).
sql/sql_repl.cc:
  A comment.
2003-07-03 01:08:36 +02:00
unknown
c0eb448582 Added missing (char*) casts in bzero calls.
(Needed for platforms with the traditional bzero prototype.)
Fixes BUG#460.
2003-07-03 01:08:34 +02:00
unknown
bbf8ebe87d Code/testcase cleanups
mysql-test/r/insert_select.result:
  Fixed results
mysql-test/r/join_outer.result:
  New test case for inner join table dependency
mysql-test/t/insert_select.test:
  Remove not used drop tables.
  Fixed table names
mysql-test/t/join_outer.test:
  New test case for inner join table dependency
sql/slave.cc:
  Simple optimizations
2003-07-01 13:29:55 +03:00
unknown
68524c81fe Simple code cleanup
mysql-test/r/innodb.result:
  Fixed test case after innodb optimize->analyze fix
mysys/mf_pack.c:
  Added comments
sql/log_event.cc:
  Fixed usage of fn_format()
sql/slave.cc:
  Indentation fixes and comments cleanup
sql/sql_repl.cc:
  Comment cleanup
2003-06-23 20:05:54 +03:00
unknown
b518744d16 Changed change_master() to use ER_MASTER_INFO (better display).
mysql-test/r/rpl_rotate_logs.result:
  result update
mysql-test/t/rpl_rotate_logs.test:
  comments and test update with the error code
sql/slave.cc:
  A DBUG_PRINT
sql/sql_repl.cc:
  Use ER_MASTER_INFO instead of custom message and zero error code (which display
  badly).
2003-06-17 23:19:38 +02:00
unknown
366fd92e8d Fix for nightly build test failure (test update).
More messages.
Testcase for bug 651.


client/mysqltest.c:
  More explicit error message if MASTER_POS_WAIT() returns NULL.
mysql-test/r/rpl_loaddata.result:
  result update
mysql-test/r/rpl_master_pos_wait.result:
  result update
mysql-test/t/rpl000001.test:
  sync_with_master (=MASTER_POS_WAIT()) was called when we could expect the SQL slave thread had stopped.
  As I yesterday changed code so that "SQL thread stops => MASTER_POS_WAIT() returns NULL immediately" (bugfix),
  sync_with_master received NULL (on build.mysql.com, not on my machine; this is a question of milliseconds,
  if the slave server will process MASTER_POS_WAIT() before or after the slave SQL thread has stopped), and
  in mysqltest.c, sync_with_master complained that it could not sync.
  So I just remove this sync_with_master, which does not make sense anymore: we just wait for the slave SQL
  thread to stop.
mysql-test/t/rpl_loaddata.test:
  Discovered we had wait_for_slave_to_stop, so used it as it automates things.
mysql-test/t/rpl_master_pos_wait.test:
  Discovered we had 'send' to send a query without waiting for the resultn so could had a testcase for bug 651.
  Shorter timeouts as there is no risk the position is reached.
sql/slave.cc:
  A longer DBUG_PRINT.
2003-06-16 15:49:54 +02:00
unknown
292f91e83d Simplified a test.
thd->enter_cond() and exit_cond(), so that the I/O thread accepts to stop
when it's waiting for relay log space.
Reset ignore_log_space_limit to 0 when the SQL thread terminates.


mysql-test/r/rpl_relayspace.result:
  result update
mysql-test/t/rpl_relayspace-slave.opt:
  smaller relay_log_space_limit to speed up things.
mysql-test/t/rpl_relayspace.test:
  Less queries in the test, to make it simpler.
  Testcase if the IO thread blocked in wait_for_relay_log_space
  accepts to stop when STOP SLAVE.
sql/slave.cc:
  thd->enter_cond() and exit_cond(), so that the I/O thread accepts to stop
  when it's waiting on cond (waiting for relay log space).
  Reset ignore_log_space_limit to 0 when the SQL thread terminates.
2003-06-15 12:01:51 +02:00
unknown
58d679e34f - Fix for bug 651: now a dying SQL slave threads wakes up any waiting MASTER_POS_WAIT().
Could not add a testcase for this: if the test goes into a MASTER_POS_WAIT, it waits
until this terminates (even doing "connection other_con" to launch "stop slave" is blocked).
- In MASTER_POS_WAIT() don't test if the I/O slave is running, but if the SQL thread
is running.
- Some DBUG info for this bugfix.


sql/slave.cc:
  Fix for bug 651: now a dying SQL slave threads wakes up any waiting MASTER_POS_WAIT().
  In MASTER_POS_WAIT() don't test if the I/O slave is running, but if the SQL thread
  is running.
  Some DBUG info.
2003-06-14 16:40:00 +02:00
unknown
0880795793 More error messages. This is intended to help debugging; presently I have a
support issue with an unclear message which can have N reasons for appearing.
This should help us know at which point it failed, and get the errno when
my_open was involved (as the reason for the unclear message is often a
permission problem).
RESET SLAVE resets last_error and last_errno in SHOW SLAVE STATUS (without this,
rpl_loaddata.test, which is expected to generate an error in last_error, influenced
rpl_log_pos.test).
A small test update.
Added STOP SLAVE to mysql-test-run to get rid of several stupid error messages
which are printed while the master restarts and the slave attempts/manages to
connect to it and sends it nonsense binlog requests.


mysql-test/mysql-test-run.sh:
  Before running a test, stop slave threads if they exist (if they don't
  the script goes on fine). This also works fine with the manager.
  Before this change, when the master was stopped/restarted (which happened before
  the slave server was stopped/restarted), the slave threads
  noticed the stop (so printed an error message in slave.err), then managed to
  reconnect (to the new master, the one that is running for the _next_ test),
  and this reconnection had time to produce error messages (because, for example,
  the binlog the slave thread was asking had been deleted) before the slave server
  was killed. This change reduces by 10% (40 lines) slave.err in replication tests.
mysql-test/r/rpl000018.result:
  Result update.
mysql-test/t/rpl000018.test:
  This test does "show master logs" so should do "reset master" instead of
  relying on the previous tests.
sql/slave.cc:
  More error messages.
sql/sql_repl.cc:
  More error messages.
  RESET SLAVE resets last_error and last_errno in SHOW SLAVE STATUS.
2003-06-10 23:29:49 +02:00
unknown
a0120344b9 Fix for bug 254 :
we now make a distinction between if the master is < 3.23.57, 3.23 && >=57, and 4.x
(before the 2 3.23 were one). This is because in 3.23.57 we have a way to distinguish between
a Start_log_event written at server startup and one written at FLUSH LOGS, so we
have a way to know if the slave must drop old temp tables or not.
Change: mi->old_format was bool, now it's enum (to handle 3 cases). However, functions
which had 'bool old_format' as an argument have their prototypes unchanged, because
the old old_format == 0 now corresponds to the enum value BINLOG_FORMAT_CURRENT which
is equal to 0, so boolean tests are left untouched. The only case were we use mi->old_format
as an enum instead of casting it implicitly to a bool, is in Start_log_event::exec_event,
where we want to distinguish between the 3 possible enum values.


sql/log_event.cc:
  Fix for bug 254 :
  we now make a distinction between if the master is < 3.23.57, 3.23 && >=57, and 4.x
  (before the 2 3.23 were one), to know if the slave must drop old temp tables or not.
sql/slave.cc:
  Fix for bug 254 : mi->old_format is now enum.
  An unrelated comment.
sql/slave.h:
  fix for bug 254 : mi->old_format is now enum.
2003-06-06 16:41:28 +02:00
unknown
bd414c301c Test for bug 578. And a comment in slave.cc.
sql/slave.cc:
  Comment to remember that size of relay logs on disk is not the total size
  of the relay log.
2003-06-05 17:02:00 +02:00
unknown
6d1081cda2 One-line fix for bug 576 (DBUG_ASSERT failure when using CHANGE MASTER TO RELAY_LOG_POS=4).
Plus a changeset which I had committed but forgot to push (and this changeset is lost on
another computer, so I recreate it here). This changeset is "user-friendly SHOW BINLOG EVENTS
and CHANGE MASTER TO when log positions < 4 are used.


sql/slave.cc:
  fix for bug 576 (DBUG_ASSERT failure when using CHANGE MASTER TO RELAY_LOG_POS=4).
sql/sql_repl.cc:
  User-friendly SHOW BINLOG EVENTS:
  SHOW BINLOG EVENTS FROM 0: currently one gets
      MASTER> show binlog events from 0;
      ERROR 1220: Error when executing command SHOW BINLOG EVENTS: Invalid log position
  so we silently convert <4 to 4.
sql/sql_yacc.yy:
  User-friendly CHANGE MASTER TO:
  presently when one does CHANGE MASTER TO MASTER_LOG_POS=0 he gets
      030425 10:12:41  Slave I/O thread: connected to master 'root@localhost:3306',  r
      eplication started in log 'gbichot-bin.013' at position 151
      030425 10:12:41  Error reading packet from server: Client requested master to st
      art replication from impossible position (server_errno=1236)
      030425 10:12:41  Got fatal error 1236: 'Client requested master to start replica
      tion from impossible position' from master when reading data from binary log
      030425 10:12:41  Slave I/O thread exiting, read up to log 'gbichot-bin.013', pos
      ition 151
      
  while she/he probably just wanted to start at the beginning of the
  binlog, which is 4. So we silently convert <4 to 4 in sql_yacc.yy
  (i.e. in the slave code; fortunately all versions have the same
  BIN_LOG_HEADER_SIZE=4 and we should not change this). See comments
  for an explaination of why we have to do this in sql_yacc.yy,
  not in sql_repl.cc.
  Same thing for CHANGE MASTER TO RELAY_LOG_POS.
sql/unireg.h:
  warning comment
2003-06-03 23:13:06 +02:00
unknown
72f23f4d5d Clearer error message (in the customer's case, the relay log was corrupted,
not the master's binlog) (SW 1571).


sql/slave.cc:
  Clearer error message (in the customer's case, the relay log was corrupted,
  not the master's binlog).
2003-06-02 17:30:47 +02:00
unknown
c1607401de Removed bad mutex locking 2003-05-27 18:16:50 +02:00
unknown
2917fdb9d3 - Fix for memory leak if the SQL slave thread is killed just after reading an event.
- A few more mutex locks and unlocks of rli.log_space_lock for doing clean reads of
rli.ignore_log_space_limit
- Broadcast after unlock, not before (small speed optimisation).
2003-05-25 23:09:46 +02:00
unknown
ae5e364c19 Changes from Novell for NetWare platform
include/my_pthread.h:
  Consolidated NetWare pthread_exit() changes.
mysys/mf_path.c:
  NetWare needs a semicolon path delimiter.
mysys/my_pthread.c:
  Consolidated NetWare pthread_exit() changes.
sql/mini_client.cc:
  Modified to match my_connect().
sql/mysqld.cc:
  Consolidated NetWare pthread_exit() changes.
sql/slave.cc:
  Consolidated NetWare pthread_exit() changes.
sql/sql_load.cc:
  Stat properites should not be checked here on NetWare.
2003-04-24 20:48:54 -04:00
unknown
40c0b2c6c8 New variable rli->ignore_log_space_limit to resolve
a deadlock between I/O and SQL threads in replication
when relay_log_space is too small. This fixes bug #79.


sql/log.cc:
  New variable rli->ignore_log_space_limit to resolve
  a deadlock between I/O and SQL threads in replication
  when relay_log_space is too small.
sql/slave.cc:
  New variable rli->ignore_log_space_limit to resolve
  a deadlock between I/O and SQL threads in replication
  when relay_log_space is too small.
sql/slave.h:
  New variable rli->ignore_log_space_limit to resolve
  a deadlock between I/O and SQL threads in replication
  when relay_log_space is too small.
sql/sql_repl.cc:
  New variable rli->ignore_log_space_limit to resolve
  a deadlock between I/O and SQL threads in replication
  when relay_log_space is too small.
2003-03-17 22:51:56 +01:00
unknown
fa4f6e8998 Simple fixes (nothing notable)
dbug/dbug.c:
  Remove duplicate va_end() call
mysql-test/mysql-test-run.sh:
  Longer stack trace from valgrind
mysys/my_lib.c:
  Fixed wrong dbug printf
sql/slave.cc:
  Simple optimization
sql/sql_class.cc:
  Added DBUG info
2003-03-12 01:40:06 +02:00
unknown
a6ea34ee5b merge
BitKeeper/etc/ignore:
  auto-union
BitKeeper/deleted/.del-delete.result:
  Auto merged
client/mysqlbinlog.cc:
  Auto merged
libmysql/libmysql.c:
  Auto merged
mysql-test/r/delete.result:
  Auto merged
mysql-test/r/type_datetime.result:
  Auto merged
mysql-test/t/delete.test:
  Auto merged
mysql-test/t/type_datetime.test:
  Auto merged
sql/field.h:
  Auto merged
sql/ha_myisam.cc:
  Auto merged
sql/lock.cc:
  Auto merged
sql/log_event.h:
  Auto merged
sql/mysql_priv.h:
  Auto merged
sql/mysqld.cc:
  Auto merged
sql/share/polish/errmsg.txt:
  Auto merged
sql/slave.cc:
  Auto merged
sql/sql_repl.h:
  Auto merged
sql/sql_select.cc:
  Auto merged
2003-03-10 14:13:46 +02:00
unknown
66e8db8241 Fix that round(0.1,1) == round(0.1,1)
sql/slave.cc:
  Fixed problem with --debug output in handle_slave
2003-03-10 12:00:19 +02:00
unknown
44c9a3893d Clearer error message when one forgot to grant REPLICATION SLAVE :
now we'll have something like this :
030308 18:46:58  Slave I/O thread: connected to master 'gb@localhost:3306',  replication started in log 'FIRST' at position 4
030308 18:46:58  While trying to obtain the list of slaves from the master 'localhost:3306', user 'gb' got the following error: 'Access denied. You need the REPLICATION SLAVE privilege for this operation'
030308 18:46:58  Slave I/O thread exiting, read up to log 'FIRST', position 4
instead of "Error updating slave list: Query error".
This fixes bug #80.


sql/repl_failsafe.cc:
  Clearer error message when one forgot to grant REPLICATION SLAVE
sql/repl_failsafe.h:
  Clearer error message when one forgot to grant REPLICATION SLAVE
sql/slave.cc:
  Updated for new syntax of update_slave_list
2003-03-08 18:53:32 +01:00
unknown
2855415058 Replication: small bug fixes in mysql-test-run.sh and in replication code (more reinitializations)
+ fix for #70 
+ test result fix for LOAD DATA LOCAL bug #82


client/mysqltest.c:
  Removed wrong comment and useless sleep
mysql-test/mysql-test-run.sh:
  Fix $slave_datadir variable because this
    if [ -n "$1" ] ; 
     slave_datadir="var/$slave_ident-data/"
    else
      slave_datadir=$SLAVE_MYDDIR
  was not coherent and led to problems of master.info not being deleted.
  Delete relay-log.info too.
mysql-test/r/rpl000001.result:
  SUM is 1022 (1021 was when we had the LOAD DATA LOCAL bug #82).
  It's logical to have an even number as we load the same file twice.
sql/slave.cc:
  When we RESET SLAVE, clear rli->master_log_* to give a good display in SHOW SLAVE STATUS ;
  seeing the old values may confuse the user.
  When we START SLAVE, clear rli->master_log_name, not only rli->master_log_pos.
sql/sql_repl.cc:
  When we RESET SLAVE, clear mi->master_log_* to give a good display in SHOW SLAVE STATUS (bug #70)
2003-03-03 14:57:02 +01:00
unknown
14ea63cd1b Replication: simplification of init_relay_log_pos: always initialize,
remove variable rli->log_pos_current.


sql/slave.cc:
  Simplification of init_relay_log_pos : always initialize,
  remove variable rli->log_pos_current.
sql/slave.h:
  Simplification of init_relay_log_pos : always initialize,
  remove variable rli->log_pos_current.
2003-03-02 00:45:19 +01:00