Auto-merge from mysql-next-mr.

This commit is contained in:
Alexander Nozdrin 2009-12-19 11:35:19 +03:00
commit 594d05a688
191 changed files with 5568 additions and 2213 deletions

View file

@ -1,5 +1,5 @@
/* Copyright (C) 2007 Google Inc.
Copyright (C) 2008 MySQL AB
Copyright (C) 2008 MySQL AB, 2008-2009 Sun Microsystems, Inc
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -63,7 +63,7 @@ static int gettimeofday(struct timeval *tv, void *tz)
*
******************************************************************************/
ActiveTranx::ActiveTranx(pthread_mutex_t *lock,
ActiveTranx::ActiveTranx(mysql_mutex_t *lock,
unsigned long trace_level)
: Trace(trace_level),
num_entries_(max_connections << 1), /* Transaction hash table size
@ -377,8 +377,10 @@ int ReplSemiSyncMaster::initObject()
setTraceLevel(rpl_semi_sync_master_trace_level);
/* Mutex initialization can only be done after MY_INIT(). */
pthread_mutex_init(&LOCK_binlog_, MY_MUTEX_INIT_FAST);
pthread_cond_init(&COND_binlog_send_, NULL);
mysql_mutex_init(key_ss_mutex_LOCK_binlog_,
&LOCK_binlog_, MY_MUTEX_INIT_FAST);
mysql_cond_init(key_ss_cond_COND_binlog_send_,
&COND_binlog_send_, NULL);
if (rpl_semi_sync_master_enabled)
result = enableMaster();
@ -453,8 +455,8 @@ ReplSemiSyncMaster::~ReplSemiSyncMaster()
{
if (init_done_)
{
pthread_mutex_destroy(&LOCK_binlog_);
pthread_cond_destroy(&COND_binlog_send_);
mysql_mutex_destroy(&LOCK_binlog_);
mysql_cond_destroy(&COND_binlog_send_);
}
delete active_tranxs_;
@ -462,17 +464,17 @@ ReplSemiSyncMaster::~ReplSemiSyncMaster()
void ReplSemiSyncMaster::lock()
{
pthread_mutex_lock(&LOCK_binlog_);
mysql_mutex_lock(&LOCK_binlog_);
}
void ReplSemiSyncMaster::unlock()
{
pthread_mutex_unlock(&LOCK_binlog_);
mysql_mutex_unlock(&LOCK_binlog_);
}
void ReplSemiSyncMaster::cond_broadcast()
{
pthread_cond_broadcast(&COND_binlog_send_);
mysql_cond_broadcast(&COND_binlog_send_);
}
int ReplSemiSyncMaster::cond_timewait(struct timespec *wait_time)
@ -481,8 +483,8 @@ int ReplSemiSyncMaster::cond_timewait(struct timespec *wait_time)
int wait_res;
function_enter(kWho);
wait_res = pthread_cond_timedwait(&COND_binlog_send_,
&LOCK_binlog_, wait_time);
wait_res= mysql_cond_timedwait(&COND_binlog_send_,
&LOCK_binlog_, wait_time);
return function_exit(kWho, wait_res);
}

View file

@ -1,5 +1,6 @@
/* Copyright (C) 2007 Google Inc.
Copyright (C) 2008 MySQL AB
Copyright (C) 2009 Sun Microsystems, Inc
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -20,6 +21,11 @@
#include "semisync.h"
#ifdef HAVE_PSI_INTERFACE
extern PSI_mutex_key key_ss_mutex_LOCK_binlog_;
extern PSI_cond_key key_ss_cond_COND_binlog_send_;
#endif
/**
This class manages memory for active transaction list.
@ -44,7 +50,7 @@ private:
TranxNode **trx_htb_; /* A hash table on active transactions. */
int num_entries_; /* maximum hash table entries */
pthread_mutex_t *lock_; /* mutex lock */
mysql_mutex_t *lock_; /* mutex lock */
inline void assert_lock_owner();
@ -69,7 +75,7 @@ private:
}
public:
ActiveTranx(pthread_mutex_t *lock, unsigned long trace_level);
ActiveTranx(mysql_mutex_t *lock, unsigned long trace_level);
~ActiveTranx();
/* Insert an active transaction node with the specified position.
@ -118,14 +124,14 @@ class ReplSemiSyncMaster
/* This cond variable is signaled when enough binlog has been sent to slave,
* so that a waiting trx can return the 'ok' to the client for a commit.
*/
pthread_cond_t COND_binlog_send_;
mysql_cond_t COND_binlog_send_;
/* Mutex that protects the following state variables and the active
* transaction list.
* Under no cirumstances we can acquire mysql_bin_log.LOCK_log if we are
* already holding LOCK_binlog_ because it can cause deadlocks.
*/
pthread_mutex_t LOCK_binlog_;
mysql_mutex_t LOCK_binlog_;
/* This is set to true when reply_file_name_ contains meaningful data. */
bool reply_file_name_inited_;

View file

@ -1,5 +1,5 @@
/* Copyright (C) 2007 Google Inc.
Copyright (C) 2008 MySQL AB
Copyright (C) 2008 MySQL AB, 2008-2009 Sun Microsystems, Inc
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -334,9 +334,43 @@ static SHOW_VAR semi_sync_master_status_vars[]= {
{NULL, NULL, SHOW_LONG},
};
#ifdef HAVE_PSI_INTERFACE
PSI_mutex_key key_ss_mutex_LOCK_binlog_;
static PSI_mutex_info all_semisync_mutexes[]=
{
{ &key_ss_mutex_LOCK_binlog_, "LOCK_binlog_", 0}
};
PSI_cond_key key_ss_cond_COND_binlog_send_;
static PSI_cond_info all_semisync_conds[]=
{
{ &key_ss_cond_COND_binlog_send_, "COND_binlog_send_", 0}
};
static void init_semisync_psi_keys(void)
{
const char* category= "semisync";
int count;
if (PSI_server == NULL)
return;
count= array_elements(all_semisync_mutexes);
PSI_server->register_mutex(category, all_semisync_mutexes, count);
count= array_elements(all_semisync_conds);
PSI_server->register_cond(category, all_semisync_conds, count);
}
#endif /* HAVE_PSI_INTERFACE */
static int semi_sync_master_plugin_init(void *p)
{
#ifdef HAVE_PSI_INTERFACE
init_semisync_psi_keys();
#endif
if (repl_semisync.initObject())
return 1;
if (register_trans_observer(&trans_observer, p))