mirror of
https://github.com/MariaDB/server.git
synced 2026-04-20 15:25:33 +02:00
Auto-merge from mysql-next-mr.
This commit is contained in:
commit
594d05a688
191 changed files with 5568 additions and 2213 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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_;
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue