summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <grog@mysql.com[grog]>2006-04-13 17:22:56 +0930
committerunknown <grog@mysql.com[grog]>2006-04-13 17:22:56 +0930
commit365f6f6f03a247976eabd64fe9d8510b456647f4 (patch)
tree5068606c120d0affa61289212c97ed0321bc9003
parentce33555014b52d43b1f6911b24abf6ac0da62550 (diff)
downloadmariadb-git-365f6f6f03a247976eabd64fe9d8510b456647f4.tar.gz
foo2
sql/ha_innodb.cc: Import patch foo2 sql/ha_innodb.h: Import patch foo2 sql/handler.cc: Import patch foo2 sql/handler.h: Import patch foo2 sql/mysqld.cc: Import patch foo2 sql/set_var.cc: Import patch foo2 sql/sql_class.h: Import patch foo2 sql/sql_repl.cc: Import patch foo2
-rw-r--r--sql/ha_innodb.cc231
-rw-r--r--sql/ha_innodb.h3
-rw-r--r--sql/handler.cc53
-rw-r--r--sql/handler.h5
-rw-r--r--sql/mysqld.cc17
-rw-r--r--sql/set_var.cc25
-rw-r--r--sql/sql_class.h6
-rw-r--r--sql/sql_repl.cc21
8 files changed, 2 insertions, 359 deletions
diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc
index 98fb6b69ab3..934437e0c91 100644
--- a/sql/ha_innodb.cc
+++ b/sql/ha_innodb.cc
@@ -1741,25 +1741,6 @@ innobase_report_binlog_offset_and_commit(
trx->mysql_log_file_name = log_file_name;
trx->mysql_log_offset = (ib_longlong)end_offset;
-#ifdef HAVE_REPLICATION
- if (thd->variables.sync_replication) {
- /* Let us store the binlog file name and the position, so that
- we know how long to wait for the binlog to the replicated to
- the slave in synchronous replication. */
-
- if (trx->repl_wait_binlog_name == NULL) {
-
- trx->repl_wait_binlog_name =
- (char*)mem_alloc_noninline(FN_REFLEN + 100);
- }
-
- ut_a(strlen(log_file_name) < FN_REFLEN + 100);
-
- strcpy(trx->repl_wait_binlog_name, log_file_name);
-
- trx->repl_wait_binlog_pos = (ib_longlong)end_offset;
- }
-#endif /* HAVE_REPLICATION */
trx->flush_log_later = TRUE;
innobase_commit(thd, TRUE);
@@ -1828,218 +1809,8 @@ innobase_commit_complete(
trx_commit_complete_for_mysql(trx);
}
-#ifdef HAVE_REPLICATION
- if (thd->variables.sync_replication
- && trx->repl_wait_binlog_name
- && innobase_repl_state != 0) {
-
- struct timespec abstime;
- int cmp;
- int ret;
-
- /* In synchronous replication, let us wait until the MySQL
- replication has sent the relevant binlog segment to the
- replication slave. */
-
- pthread_mutex_lock(&innobase_repl_cond_mutex);
-try_again:
- if (innobase_repl_state == 0) {
-
- pthread_mutex_unlock(&innobase_repl_cond_mutex);
-
- return(0);
- }
-
- cmp = strcmp(innobase_repl_file_name,
- trx->repl_wait_binlog_name);
- if (cmp > 0
- || (cmp == 0 && innobase_repl_pos
- >= (my_off_t)trx->repl_wait_binlog_pos)) {
- /* We have already sent the relevant binlog to the
- slave: no need to wait here */
-
- pthread_mutex_unlock(&innobase_repl_cond_mutex);
-
-/* printf("Binlog now sent\n"); */
-
- return(0);
- }
-
- /* Let us update the info about the minimum binlog position
- of waiting threads in the innobase_repl_... variables */
-
- if (innobase_repl_wait_file_name_inited != 0) {
- cmp = strcmp(trx->repl_wait_binlog_name,
- innobase_repl_wait_file_name);
- if (cmp < 0
- || (cmp == 0 && (my_off_t)trx->repl_wait_binlog_pos
- <= innobase_repl_wait_pos)) {
- /* This thd has an even lower position, let
- us update the minimum info */
-
- strcpy(innobase_repl_wait_file_name,
- trx->repl_wait_binlog_name);
-
- innobase_repl_wait_pos =
- trx->repl_wait_binlog_pos;
- }
- } else {
- strcpy(innobase_repl_wait_file_name,
- trx->repl_wait_binlog_name);
-
- innobase_repl_wait_pos = trx->repl_wait_binlog_pos;
-
- innobase_repl_wait_file_name_inited = 1;
- }
- set_timespec(abstime, thd->variables.sync_replication_timeout);
-
- /* Let us suspend this thread to wait on the condition;
- when replication has progressed far enough, we will release
- these waiting threads. The following call
- pthread_cond_timedwait also atomically unlocks
- innobase_repl_cond_mutex. */
-
- innobase_repl_n_wait_threads++;
-
-/* printf("Waiting for binlog to be sent\n"); */
-
- ret = pthread_cond_timedwait(&innobase_repl_cond,
- &innobase_repl_cond_mutex, &abstime);
- innobase_repl_n_wait_threads--;
-
- if (ret != 0) {
- ut_print_timestamp(stderr);
-
- sql_print_error("MySQL synchronous replication was "
- "not able to send the binlog to the "
- "slave within the timeout %lu. We "
- "assume that the slave has become "
- "inaccessible, and switch off "
- "synchronous replication until the "
- "communication to the slave works "
- "again. MySQL synchronous replication "
- "has sent binlog to the slave up to "
- "file %s, position %lu. This "
- "transaction needs it to be sent up "
- "to file %s, position %lu.",
- thd->variables.sync_replication_timeout,
- innobase_repl_file_name,
- (ulong) innobase_repl_pos,
- trx->repl_wait_binlog_name,
- (ulong) trx->repl_wait_binlog_pos);
-
- innobase_repl_state = 0;
-
- pthread_mutex_unlock(&innobase_repl_cond_mutex);
-
- return(0);
- }
-
- goto try_again;
- }
-#endif // HAVE_REPLICATION
- return(0);
-}
-
-#ifdef HAVE_REPLICATION
-/*********************************************************************
-In synchronous replication, reports to InnoDB up to which binlog position
-we have sent the binlog to the slave. Note that replication is synchronous
-for one slave only. For other slaves, we do nothing in this function. This
-function is used in a replication master. */
-
-int
-innobase_repl_report_sent_binlog(
-/*=============================*/
- /* out: 0 */
- THD* thd, /* in: thread doing the binlog communication to
- the slave */
- char* log_file_name, /* in: binlog file name */
- my_off_t end_offset) /* in: the offset in the binlog file up to
- which we sent the contents to the slave */
-{
- int cmp;
- ibool can_release_threads = 0;
-
- /* If synchronous replication is not switched on, or this thd is
- sending binlog to a slave where we do not need synchronous replication,
- then return immediately */
-
- if (thd->server_id != thd->variables.sync_replication_slave_id) {
-
- /* Do nothing */
-
- return(0);
- }
-
- pthread_mutex_lock(&innobase_repl_cond_mutex);
-
- if (innobase_repl_state == 0) {
-
- ut_print_timestamp(stderr);
- sql_print_warning("Switching MySQL synchronous replication on "
- "again at binlog file %s, position %lu",
- log_file_name, (ulong) end_offset);
-
- innobase_repl_state = 1;
- }
-
- /* The position should increase monotonically, since just one thread
- is sending the binlog to the slave for which we want synchronous
- replication. Let us check this, and print an error to the .err log
- if that is not the case. */
-
- if (innobase_repl_file_name_inited) {
- cmp = strcmp(log_file_name, innobase_repl_file_name);
-
- if (cmp < 0
- || (cmp == 0 && end_offset < innobase_repl_pos)) {
-
- ut_print_timestamp(stderr);
- sql_print_error("MySQL synchronous replication has "
- "sent binlog to the slave up to file "
- "%s, position %lu, but now MySQL "
- "reports that it sent the binlog only "
- "up to file %s, position %lu",
- innobase_repl_file_name,
- (ulong) innobase_repl_pos,
- log_file_name, (ulong) end_offset);
- }
- }
-
- strcpy(innobase_repl_file_name, log_file_name);
- innobase_repl_pos = end_offset;
- innobase_repl_file_name_inited = 1;
-
- if (innobase_repl_n_wait_threads > 0) {
- /* Let us check if some of the waiting threads doing a trx
- commit can now proceed */
-
- cmp = strcmp(innobase_repl_file_name,
- innobase_repl_wait_file_name);
- if (cmp > 0
- || (cmp == 0 && innobase_repl_pos
- >= innobase_repl_wait_pos)) {
-
- /* Yes, at least one waiting thread can now proceed:
- let us release all waiting threads with a broadcast */
-
- can_release_threads = 1;
-
- innobase_repl_wait_file_name_inited = 0;
- }
- }
-
- pthread_mutex_unlock(&innobase_repl_cond_mutex);
-
- if (can_release_threads) {
-
- pthread_cond_broadcast(&innobase_repl_cond);
- }
-
return(0);
}
-#endif /* HAVE_REPLICATION */
/*********************************************************************
Rolls back a transaction or the latest SQL statement. */
@@ -4815,7 +4586,7 @@ ha_innobase::create(
possible adaptive hash latch to avoid deadlocks of threads */
trx_search_latch_release_if_reserved(parent_trx);
-
+
trx = trx_allocate_for_mysql();
trx->mysql_thd = thd;
diff --git a/sql/ha_innodb.h b/sql/ha_innodb.h
index 7ab252f97dd..5dd6a92c4b0 100644
--- a/sql/ha_innodb.h
+++ b/sql/ha_innodb.h
@@ -303,9 +303,6 @@ int innobase_rollback_by_xid(
XID *xid); /* in : X/Open XA Transaction Identification */
-int innobase_repl_report_sent_binlog(THD *thd, char *log_file_name,
- my_off_t end_offset);
-
/***********************************************************************
Create a consistent view for a cursor based on current transaction
which is created if the corresponding MySQL thread still lacks one.
diff --git a/sql/handler.cc b/sql/handler.cc
index 627117a65a5..b40934ea194 100644
--- a/sql/handler.cc
+++ b/sql/handler.cc
@@ -2684,56 +2684,3 @@ TYPELIB *ha_known_exts(void)
}
return &known_extensions;
}
-
-
-#ifdef HAVE_REPLICATION
-/*
- Reports to table handlers up to which position we have sent the binlog
- to a slave in replication
-
- SYNOPSIS
- ha_repl_report_sent_binlog()
- thd thread doing the binlog communication to the slave
- log_file_name binlog file name
- end_offse t the offset in the binlog file up to which we sent the
- contents to the slave
-
- NOTES
- Only works for InnoDB at the moment
-
- RETURN VALUE
- Always 0 (= success)
-*/
-
-int ha_repl_report_sent_binlog(THD *thd, char *log_file_name,
- my_off_t end_offset)
-{
-#ifdef HAVE_INNOBASE_DB
- return innobase_repl_report_sent_binlog(thd,log_file_name,end_offset);
-#else
- return 0;
-#endif
-}
-
-
-/*
- Reports to table handlers that we stop replication to a specific slave
-
- SYNOPSIS
- ha_repl_report_replication_stop()
- thd thread doing the binlog communication to the slave
-
- NOTES
- Does nothing at the moment
-
- RETURN VALUE
- Always 0 (= success)
-
- PARAMETERS
-*/
-
-int ha_repl_report_replication_stop(THD *thd)
-{
- return 0;
-}
-#endif /* HAVE_REPLICATION */
diff --git a/sql/handler.h b/sql/handler.h
index 8270849348a..e531a3f1077 100644
--- a/sql/handler.h
+++ b/sql/handler.h
@@ -965,8 +965,3 @@ void trans_register_ha(THD *thd, bool all, handlerton *ht);
*/
#define trans_need_2pc(thd, all) ((total_ha_2pc > 1) && \
!((all ? &thd->transaction.all : &thd->transaction.stmt)->no_2pc))
-
-/* semi-synchronous replication */
-int ha_repl_report_sent_binlog(THD *thd, char *log_file_name,
- my_off_t end_offset);
-int ha_repl_report_replication_stop(THD *thd);
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 2690b2f6852..83722b1c6a7 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -5899,23 +5899,6 @@ The minimum value for this variable is 4096.",
{"sync-frm", OPT_SYNC_FRM, "Sync .frm to disk on create. Enabled by default.",
(gptr*) &opt_sync_frm, (gptr*) &opt_sync_frm, 0, GET_BOOL, NO_ARG, 1, 0,
0, 0, 0, 0},
-#ifdef HAVE_REPLICATION
- {"sync-replication", OPT_SYNC_REPLICATION,
- "Enable synchronous replication.",
- (gptr*) &global_system_variables.sync_replication,
- (gptr*) &global_system_variables.sync_replication,
- 0, GET_ULONG, REQUIRED_ARG, 0, 0, 1, 0, 1, 0},
- {"sync-replication-slave-id", OPT_SYNC_REPLICATION_SLAVE_ID,
- "Synchronous replication is wished for this slave.",
- (gptr*) &global_system_variables.sync_replication_slave_id,
- (gptr*) &global_system_variables.sync_replication_slave_id,
- 0, GET_ULONG, REQUIRED_ARG, 0, 0, ~0L, 0, 1, 0},
- {"sync-replication-timeout", OPT_SYNC_REPLICATION_TIMEOUT,
- "Synchronous replication timeout.",
- (gptr*) &global_system_variables.sync_replication_timeout,
- (gptr*) &global_system_variables.sync_replication_timeout,
- 0, GET_ULONG, REQUIRED_ARG, 10, 0, ~0L, 0, 1, 0},
-#endif /* HAVE_REPLICATION */
{"table_cache", OPT_TABLE_CACHE,
"The number of open tables for all threads.", (gptr*) &table_cache_size,
(gptr*) &table_cache_size, 0, GET_ULONG, REQUIRED_ARG, 64, 1, 512*1024L,
diff --git a/sql/set_var.cc b/sql/set_var.cc
index 762b8d7ec60..a0b60251354 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -376,17 +376,6 @@ sys_var_thd_table_type sys_table_type("table_type",
&SV::table_type);
sys_var_thd_storage_engine sys_storage_engine("storage_engine",
&SV::table_type);
-#ifdef HAVE_REPLICATION
-sys_var_sync_binlog_period sys_sync_binlog_period("sync_binlog", &sync_binlog_period);
-sys_var_thd_ulong sys_sync_replication("sync_replication",
- &SV::sync_replication);
-sys_var_thd_ulong sys_sync_replication_slave_id(
- "sync_replication_slave_id",
- &SV::sync_replication_slave_id);
-sys_var_thd_ulong sys_sync_replication_timeout(
- "sync_replication_timeout",
- &SV::sync_replication_timeout);
-#endif
sys_var_bool_ptr sys_sync_frm("sync_frm", &opt_sync_frm);
sys_var_long_ptr sys_table_cache_size("table_cache",
&table_cache_size);
@@ -708,12 +697,6 @@ sys_var *sys_variables[]=
&sys_sql_warnings,
&sys_sql_notes,
&sys_storage_engine,
-#ifdef HAVE_REPLICATION
- &sys_sync_binlog_period,
- &sys_sync_replication,
- &sys_sync_replication_slave_id,
- &sys_sync_replication_timeout,
-#endif
&sys_sync_frm,
&sys_table_cache_size,
&sys_table_lock_wait_timeout,
@@ -1009,15 +992,7 @@ struct show_var_st init_vars[]= {
{"sql_notes", (char*) &sys_sql_notes, SHOW_BOOL},
{"sql_warnings", (char*) &sys_sql_warnings, SHOW_BOOL},
{sys_storage_engine.name, (char*) &sys_storage_engine, SHOW_SYS},
-#ifdef HAVE_REPLICATION
- {sys_sync_binlog_period.name,(char*) &sys_sync_binlog_period, SHOW_SYS},
-#endif
{sys_sync_frm.name, (char*) &sys_sync_frm, SHOW_SYS},
-#ifdef HAVE_REPLICATION
- {sys_sync_replication.name, (char*) &sys_sync_replication, SHOW_SYS},
- {sys_sync_replication_slave_id.name, (char*) &sys_sync_replication_slave_id,SHOW_SYS},
- {sys_sync_replication_timeout.name, (char*) &sys_sync_replication_timeout,SHOW_SYS},
-#endif
#ifdef HAVE_TZNAME
{"system_time_zone", system_time_zone, SHOW_CHAR},
#endif
diff --git a/sql/sql_class.h b/sql/sql_class.h
index ed116a16f4f..0ddba0e6f05 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -552,11 +552,7 @@ struct system_variables
my_bool new_mode;
my_bool query_cache_wlock_invalidate;
my_bool engine_condition_pushdown;
-#ifdef HAVE_REPLICATION
- ulong sync_replication;
- ulong sync_replication_slave_id;
- ulong sync_replication_timeout;
-#endif /* HAVE_REPLICATION */
+
#ifdef HAVE_INNOBASE_DB
my_bool innodb_table_locks;
my_bool innodb_support_xa;
diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc
index 76e458783c4..ccda69522c7 100644
--- a/sql/sql_repl.cc
+++ b/sql/sql_repl.cc
@@ -385,9 +385,6 @@ impossible position";
goto err;
}
- if (thd->variables.sync_replication)
- ha_repl_report_sent_binlog(thd, log_file_name, pos);
-
/*
We need to start a packet with something other than 255
to distinguish it from error
@@ -480,9 +477,6 @@ impossible position";
goto err;
}
- if (thd->variables.sync_replication)
- ha_repl_report_sent_binlog(thd, log_file_name, my_b_tell(&log));
-
/*
No need to save this event. We are only doing simple reads
(no real parsing of the events) so we don't need it. And so
@@ -541,9 +535,6 @@ impossible position";
goto err;
}
- if (thd->variables.sync_replication)
- ha_repl_report_sent_binlog(thd, log_file_name, my_b_tell(&log));
-
DBUG_PRINT("info", ("log event code %d",
(*packet)[LOG_EVENT_OFFSET+1] ));
if ((*packet)[LOG_EVENT_OFFSET+1] == LOAD_EVENT)
@@ -657,9 +648,6 @@ impossible position";
goto err;
}
- if (thd->variables.sync_replication)
- ha_repl_report_sent_binlog(thd, log_file_name, my_b_tell(&log));
-
if ((*packet)[LOG_EVENT_OFFSET+1] == LOAD_EVENT)
{
if (send_file(thd))
@@ -726,18 +714,12 @@ impossible position";
goto err;
}
- if (thd->variables.sync_replication)
- ha_repl_report_sent_binlog(thd, log_file_name, 0);
-
packet->length(0);
packet->append('\0');
}
}
end:
- if (thd->variables.sync_replication)
- ha_repl_report_replication_stop(thd);
-
end_io_cache(&log);
(void)my_close(file, MYF(MY_WME));
@@ -749,9 +731,6 @@ end:
DBUG_VOID_RETURN;
err:
- if (thd->variables.sync_replication)
- ha_repl_report_replication_stop(thd);
-
thd->proc_info = "Waiting to finalize termination";
end_io_cache(&log);
/*