Commit 61a65573 authored by monty@mysql.com's avatar monty@mysql.com

merge with 4.0 to get windows fixes

parents c342318c dab0b7d4
...@@ -41,7 +41,7 @@ RSC=rc.exe ...@@ -41,7 +41,7 @@ RSC=rc.exe
# PROP Intermediate_Dir "release" # PROP Intermediate_Dir "release"
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../" /D "DBUG_OFF" /D "_WINDOWS" /D "USE_TLS" /D "NDEBUG" /FD /c # ADD CPP /nologo /G6 /MT /W3 /O2 /I "../include" /I "../" /D "DBUG_OFF" /D "_WINDOWS" /D "USE_TLS" /D "MYSQL_CLIENT" /D "NDEBUG" /FD /c
# SUBTRACT CPP /YX # SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 # ADD BASE RSC /l 0x409
# ADD RSC /l 0x409 # ADD RSC /l 0x409
...@@ -65,7 +65,7 @@ LIB32=xilink6.exe -lib ...@@ -65,7 +65,7 @@ LIB32=xilink6.exe -lib
# PROP Intermediate_Dir "debug" # PROP Intermediate_Dir "debug"
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c # ADD BASE CPP /nologo /W3 /GX /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /G6 /MTd /W3 /Z7 /Od /I "../include" /I "../" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_WINDOWS" /D "USE_TLS" /FD /c # ADD CPP /nologo /G6 /MTd /W3 /Z7 /Od /I "../include" /I "../" /D "_DEBUG" /D "SAFEMALLOC" /D "SAFE_MUTEX" /D "_WINDOWS" /D "USE_TLS" /D "MYSQL_CLIENT" /FD /c
# SUBTRACT CPP /YX # SUBTRACT CPP /YX
# ADD BASE RSC /l 0x409 # ADD BASE RSC /l 0x409
# ADD RSC /l 0x409 # ADD RSC /l 0x409
......
...@@ -312,10 +312,6 @@ SOURCE=.\pars\pars0sym.c ...@@ -312,10 +312,6 @@ SOURCE=.\pars\pars0sym.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\que\que0que.c
# End Source File
# Begin Source File
SOURCE=.\read\read0read.c SOURCE=.\read\read0read.c
# End Source File # End Source File
# Begin Source File # Begin Source File
...@@ -368,10 +364,6 @@ SOURCE=.\row\row0vers.c ...@@ -368,10 +364,6 @@ SOURCE=.\row\row0vers.c
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=.\srv\srv0que.c
# End Source File
# Begin Source File
SOURCE=.\srv\srv0srv.c SOURCE=.\srv\srv0srv.c
# End Source File # End Source File
# Begin Source File # Begin Source File
......
...@@ -136,6 +136,7 @@ static my_bool info_flag=0,ignore_errors=0,wait_flag=0,quick=0, ...@@ -136,6 +136,7 @@ static my_bool info_flag=0,ignore_errors=0,wait_flag=0,quick=0,
tty_password= 0, opt_nobeep=0, opt_reconnect=1, tty_password= 0, opt_nobeep=0, opt_reconnect=1,
default_charset_used= 0, opt_secure_auth= 0, default_charset_used= 0, opt_secure_auth= 0,
default_pager_set= 0; default_pager_set= 0;
static ulong opt_max_allowed_packet, opt_net_buffer_length;
static uint verbose=0,opt_silent=0,opt_mysql_port=0, opt_local_infile=0; static uint verbose=0,opt_silent=0,opt_mysql_port=0, opt_local_infile=0;
static my_string opt_mysql_unix_port=0; static my_string opt_mysql_unix_port=0;
static int connect_flag=CLIENT_INTERACTIVE; static int connect_flag=CLIENT_INTERACTIVE;
...@@ -368,7 +369,7 @@ int main(int argc,char *argv[]) ...@@ -368,7 +369,7 @@ int main(int argc,char *argv[])
exit(1); exit(1);
} }
if (status.batch && !status.line_buff && if (status.batch && !status.line_buff &&
!(status.line_buff=batch_readline_init(max_allowed_packet+512,stdin))) !(status.line_buff=batch_readline_init(opt_max_allowed_packet+512,stdin)))
{ {
free_defaults(defaults_argv); free_defaults(defaults_argv);
my_end(0); my_end(0);
...@@ -644,12 +645,12 @@ static struct my_option my_long_options[] = ...@@ -644,12 +645,12 @@ static struct my_option my_long_options[] =
0, 1}, 0, 1},
{"max_allowed_packet", OPT_MAX_ALLOWED_PACKET, {"max_allowed_packet", OPT_MAX_ALLOWED_PACKET,
"Max packet length to send to, or receive from server", "Max packet length to send to, or receive from server",
(gptr*) &max_allowed_packet, (gptr*) &max_allowed_packet, 0, GET_ULONG, (gptr*) &opt_max_allowed_packet, (gptr*) &opt_max_allowed_packet, 0, GET_ULONG,
REQUIRED_ARG, 16 *1024L*1024L, 4096, (longlong) 2*1024L*1024L*1024L, REQUIRED_ARG, 16 *1024L*1024L, 4096, (longlong) 2*1024L*1024L*1024L,
MALLOC_OVERHEAD, 1024, 0}, MALLOC_OVERHEAD, 1024, 0},
{"net_buffer_length", OPT_NET_BUFFER_LENGTH, {"net_buffer_length", OPT_NET_BUFFER_LENGTH,
"Buffer for TCP/IP and socket communication", "Buffer for TCP/IP and socket communication",
(gptr*) &net_buffer_length, (gptr*) &net_buffer_length, 0, GET_ULONG, (gptr*) &opt_net_buffer_length, (gptr*) &opt_net_buffer_length, 0, GET_ULONG,
REQUIRED_ARG, 16384, 1024, 512*1024*1024L, MALLOC_OVERHEAD, 1024, 0}, REQUIRED_ARG, 16384, 1024, 512*1024*1024L, MALLOC_OVERHEAD, 1024, 0},
{"select_limit", OPT_SELECT_LIMIT, {"select_limit", OPT_SELECT_LIMIT,
"Automatic limit for SELECT when using --safe-updates", "Automatic limit for SELECT when using --safe-updates",
...@@ -839,6 +840,7 @@ static int get_options(int argc, char **argv) ...@@ -839,6 +840,7 @@ static int get_options(int argc, char **argv)
{ {
char *tmp, *pagpoint; char *tmp, *pagpoint;
int ho_error; int ho_error;
MYSQL_PARAMETERS *mysql_params= mysql_get_parameters();
tmp= (char *) getenv("MYSQL_HOST"); tmp= (char *) getenv("MYSQL_HOST");
if (tmp) if (tmp)
...@@ -854,9 +856,15 @@ static int get_options(int argc, char **argv) ...@@ -854,9 +856,15 @@ static int get_options(int argc, char **argv)
strmov(pager, pagpoint); strmov(pager, pagpoint);
strmov(default_pager, pager); strmov(default_pager, pager);
opt_max_allowed_packet= *mysql_params->p_max_allowed_packet;
opt_net_buffer_length= *mysql_params->p_net_buffer_length;
if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option))) if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
exit(ho_error); exit(ho_error);
*mysql_params->p_max_allowed_packet= opt_max_allowed_packet;
*mysql_params->p_net_buffer_length= opt_net_buffer_length;
if (status.batch) /* disable pager and outfile in this case */ if (status.batch) /* disable pager and outfile in this case */
{ {
strmov(default_pager, "stdout"); strmov(default_pager, "stdout");
...@@ -2529,7 +2537,7 @@ static int com_source(String *buffer, char *line) ...@@ -2529,7 +2537,7 @@ static int com_source(String *buffer, char *line)
return put_info(buff, INFO_ERROR, 0); return put_info(buff, INFO_ERROR, 0);
} }
if (!(line_buff=batch_readline_init(max_allowed_packet+512,sql_file))) if (!(line_buff=batch_readline_init(opt_max_allowed_packet+512,sql_file)))
{ {
my_fclose(sql_file,MYF(0)); my_fclose(sql_file,MYF(0));
return put_info("Can't initialize batch_readline", INFO_ERROR, 0); return put_info("Can't initialize batch_readline", INFO_ERROR, 0);
......
...@@ -82,7 +82,7 @@ static my_bool verbose=0,tFlag=0,cFlag=0,dFlag=0,quick= 1, extended_insert= 1, ...@@ -82,7 +82,7 @@ static my_bool verbose=0,tFlag=0,cFlag=0,dFlag=0,quick= 1, extended_insert= 1,
opt_autocommit=0,opt_master_data,opt_disable_keys=1,opt_xml=0, opt_autocommit=0,opt_master_data,opt_disable_keys=1,opt_xml=0,
opt_delete_master_logs=0, tty_password=0, opt_delete_master_logs=0, tty_password=0,
opt_single_transaction=0, opt_comments= 0, opt_compact= 0; opt_single_transaction=0, opt_comments= 0, opt_compact= 0;
static ulong opt_max_allowed_packet, opt_net_buffer_length;
static MYSQL mysql_connection,*sock=0; static MYSQL mysql_connection,*sock=0;
static char insert_pat[12 * 1024],*opt_password=0,*current_user=0, static char insert_pat[12 * 1024],*opt_password=0,*current_user=0,
*current_host=0,*path=0,*fields_terminated=0, *current_host=0,*path=0,*fields_terminated=0,
...@@ -95,7 +95,6 @@ static ulong opt_compatible_mode= 0; ...@@ -95,7 +95,6 @@ static ulong opt_compatible_mode= 0;
static uint opt_mysql_port= 0, err_len= 0; static uint opt_mysql_port= 0, err_len= 0;
static my_string opt_mysql_unix_port=0; static my_string opt_mysql_unix_port=0;
static int first_error=0; static int first_error=0;
extern ulong net_buffer_length;
static DYNAMIC_STRING extended_row; static DYNAMIC_STRING extended_row;
#include <sslopt-vars.h> #include <sslopt-vars.h>
FILE *md_result_file; FILE *md_result_file;
...@@ -304,11 +303,11 @@ static struct my_option my_long_options[] = ...@@ -304,11 +303,11 @@ static struct my_option my_long_options[] =
{"xml", 'X', "Dump a database as well formed XML.", 0, 0, 0, GET_NO_ARG, {"xml", 'X', "Dump a database as well formed XML.", 0, 0, 0, GET_NO_ARG,
NO_ARG, 0, 0, 0, 0, 0, 0}, NO_ARG, 0, 0, 0, 0, 0, 0},
{"max_allowed_packet", OPT_MAX_ALLOWED_PACKET, "", {"max_allowed_packet", OPT_MAX_ALLOWED_PACKET, "",
(gptr*) &max_allowed_packet, (gptr*) &max_allowed_packet, 0, (gptr*) &opt_max_allowed_packet, (gptr*) &opt_max_allowed_packet, 0,
GET_ULONG, REQUIRED_ARG, 24*1024*1024, 4096, GET_ULONG, REQUIRED_ARG, 24*1024*1024, 4096,
(longlong) 2L*1024L*1024L*1024L, MALLOC_OVERHEAD, 1024, 0}, (longlong) 2L*1024L*1024L*1024L, MALLOC_OVERHEAD, 1024, 0},
{"net_buffer_length", OPT_NET_BUFFER_LENGTH, "", {"net_buffer_length", OPT_NET_BUFFER_LENGTH, "",
(gptr*) &net_buffer_length, (gptr*) &net_buffer_length, 0, (gptr*) &opt_net_buffer_length, (gptr*) &opt_net_buffer_length, 0,
GET_ULONG, REQUIRED_ARG, 1024*1024L-1025, 4096, 16*1024L*1024L, GET_ULONG, REQUIRED_ARG, 1024*1024L-1025, 4096, 16*1024L*1024L,
MALLOC_OVERHEAD-1024, 1024, 0}, MALLOC_OVERHEAD-1024, 1024, 0},
{"comments", 'i', "Write additional information.", {"comments", 'i', "Write additional information.",
...@@ -566,6 +565,10 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), ...@@ -566,6 +565,10 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
static int get_options(int *argc, char ***argv) static int get_options(int *argc, char ***argv)
{ {
int ho_error; int ho_error;
MYSQL_PARAMETERS *mysql_params= mysql_get_parameters();
opt_max_allowed_packet= *mysql_params->p_max_allowed_packet;
opt_net_buffer_length= *mysql_params->p_net_buffer_length;
md_result_file= stdout; md_result_file= stdout;
load_defaults("my",load_default_groups,argc,argv); load_defaults("my",load_default_groups,argc,argv);
...@@ -573,6 +576,9 @@ static int get_options(int *argc, char ***argv) ...@@ -573,6 +576,9 @@ static int get_options(int *argc, char ***argv)
if ((ho_error=handle_options(argc, argv, my_long_options, get_one_option))) if ((ho_error=handle_options(argc, argv, my_long_options, get_one_option)))
exit(ho_error); exit(ho_error);
*mysql_params->p_max_allowed_packet= opt_max_allowed_packet;
*mysql_params->p_net_buffer_length= opt_net_buffer_length;
if (opt_delayed) if (opt_delayed)
opt_lock=0; /* Can't have lock with delayed */ opt_lock=0; /* Can't have lock with delayed */
if (!path && (enclosed || opt_enclosed || escaped || lines_terminated || if (!path && (enclosed || opt_enclosed || escaped || lines_terminated ||
......
...@@ -317,6 +317,17 @@ typedef struct st_mysql_manager ...@@ -317,6 +317,17 @@ typedef struct st_mysql_manager
char last_error[MAX_MYSQL_MANAGER_ERR]; char last_error[MAX_MYSQL_MANAGER_ERR];
} MYSQL_MANAGER; } MYSQL_MANAGER;
typedef struct st_mysql_parameters
{
unsigned long *p_max_allowed_packet;
unsigned long *p_net_buffer_length;
} MYSQL_PARAMETERS;
#if !defined(MYSQL_CLIENT) && !defined(MYSQL_SERVER) && !defined(EMBEDDED_LIBRARY)
#define max_allowed_packet (*mysql_get_parameters()->p_max_allowed_packet)
#define net_buffer_length (*mysql_get_parameters()->p_net_buffer_length)
#endif
/* /*
Set up and bring down the server; to ensure that applications will Set up and bring down the server; to ensure that applications will
work when linked against either the standard client library or the work when linked against either the standard client library or the
...@@ -325,6 +336,8 @@ typedef struct st_mysql_manager ...@@ -325,6 +336,8 @@ typedef struct st_mysql_manager
int STDCALL mysql_server_init(int argc, char **argv, char **groups); int STDCALL mysql_server_init(int argc, char **argv, char **groups);
void STDCALL mysql_server_end(void); void STDCALL mysql_server_end(void);
MYSQL_PARAMETERS *STDCALL mysql_get_parameters();
/* /*
Set up and bring down a thread; these function should be called Set up and bring down a thread; these function should be called
for each thread in an application which opens at least one MySQL for each thread in an application which opens at least one MySQL
......
...@@ -36,12 +36,6 @@ ...@@ -36,12 +36,6 @@
#define MYSQL_SERVICENAME "MySQL" #define MYSQL_SERVICENAME "MySQL"
#endif /* __WIN__ */ #endif /* __WIN__ */
#if defined(__WIN__) && !defined(MYSQL_SERVER) && !defined(MYSQL_CLIENT) && !defined(EMBEDDED_LIBRARY)
#define dll_import_spec __declspec( dllimport )
#else
#define dll_import_spec
#endif
enum enum_server_command enum enum_server_command
{ {
COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST, COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST,
...@@ -312,9 +306,6 @@ typedef struct st_udf_init ...@@ -312,9 +306,6 @@ typedef struct st_udf_init
extern "C" { extern "C" {
#endif #endif
dll_import_spec extern unsigned long max_allowed_packet;
dll_import_spec extern unsigned long net_buffer_length;
/* /*
These functions are used for authentication by client and server and These functions are used for authentication by client and server and
implemented in sql/password.c implemented in sql/password.c
......
...@@ -114,20 +114,6 @@ dulint ...@@ -114,20 +114,6 @@ dulint
log_get_lsn(void); log_get_lsn(void);
/*=============*/ /*=============*/
/* out: current lsn */ /* out: current lsn */
/****************************************************************************
Gets the online backup lsn. */
UNIV_INLINE
dulint
log_get_online_backup_lsn_low(void);
/*===============================*/
/****************************************************************************
Gets the online backup state. */
UNIV_INLINE
ibool
log_get_online_backup_state_low(void);
/*=================================*/
/* out: online backup state, the caller must
own the log_sys mutex */
/********************************************************** /**********************************************************
Initializes the log. */ Initializes the log. */
...@@ -326,20 +312,6 @@ log_archived_file_name_gen( ...@@ -326,20 +312,6 @@ log_archived_file_name_gen(
char* buf, /* in: buffer where to write */ char* buf, /* in: buffer where to write */
ulint id, /* in: group id */ ulint id, /* in: group id */
ulint file_no);/* in: file number */ ulint file_no);/* in: file number */
/**********************************************************
Switches the database to the online backup state. */
ulint
log_switch_backup_state_on(void);
/*============================*/
/* out: DB_SUCCESS or DB_ERROR */
/**********************************************************
Switches the online backup state off. */
ulint
log_switch_backup_state_off(void);
/*=============================*/
/* out: DB_SUCCESS or DB_ERROR */
/************************************************************************ /************************************************************************
Checks that there is enough free space in the log to start a new query step. Checks that there is enough free space in the log to start a new query step.
Flushes the log buffer or makes a new checkpoint if necessary. NOTE: this Flushes the log buffer or makes a new checkpoint if necessary. NOTE: this
...@@ -878,13 +850,6 @@ struct log_struct{ ...@@ -878,13 +850,6 @@ struct log_struct{
os_event_t archiving_on; /* if archiving has been stopped, os_event_t archiving_on; /* if archiving has been stopped,
a thread can wait for this event to a thread can wait for this event to
become signaled */ become signaled */
/* Fields involved in online backups */
ibool online_backup_state;
/* TRUE if the database is in the
online backup state */
dulint online_backup_lsn;
/* lsn when the state was changed to
the online backup state */
}; };
#define LOG_ARCH_ON 71 #define LOG_ARCH_ON 71
......
...@@ -318,8 +318,7 @@ log_reserve_and_write_fast( ...@@ -318,8 +318,7 @@ log_reserve_and_write_fast(
data_len = len + log->buf_free % OS_FILE_LOG_BLOCK_SIZE; data_len = len + log->buf_free % OS_FILE_LOG_BLOCK_SIZE;
if (log->online_backup_state if (data_len >= OS_FILE_LOG_BLOCK_SIZE - LOG_BLOCK_TRL_SIZE) {
|| (data_len >= OS_FILE_LOG_BLOCK_SIZE - LOG_BLOCK_TRL_SIZE)) {
/* The string does not fit within the current log block /* The string does not fit within the current log block
or the log block would become full */ or the log block would become full */
...@@ -403,36 +402,3 @@ log_free_check(void) ...@@ -403,36 +402,3 @@ log_free_check(void)
log_check_margins(); log_check_margins();
} }
} }
/****************************************************************************
Gets the online backup lsn. */
UNIV_INLINE
dulint
log_get_online_backup_lsn_low(void)
/*===============================*/
/* out: online_backup_lsn, the caller must
own the log_sys mutex */
{
#ifdef UNIV_SYNC_DEBUG
ut_ad(mutex_own(&(log_sys->mutex)));
#endif /* UNIV_SYNC_DEBUG */
ut_ad(log_sys->online_backup_state);
return(log_sys->online_backup_lsn);
}
/****************************************************************************
Gets the online backup state. */
UNIV_INLINE
ibool
log_get_online_backup_state_low(void)
/*=================================*/
/* out: online backup state, the caller must
own the log_sys mutex */
{
#ifdef UNIV_SYNC_DEBUG
ut_ad(mutex_own(&(log_sys->mutex)));
#endif /* UNIV_SYNC_DEBUG */
return(log_sys->online_backup_state);
}
...@@ -82,7 +82,7 @@ flag value must give the length also! */ ...@@ -82,7 +82,7 @@ flag value must give the length also! */
predefined minimum record */ predefined minimum record */
#define MLOG_IBUF_BITMAP_INIT ((byte)27) /* initialize an ibuf bitmap #define MLOG_IBUF_BITMAP_INIT ((byte)27) /* initialize an ibuf bitmap
page */ page */
#define MLOG_FULL_PAGE ((byte)28) /* full contents of a page */ /*#define MLOG_FULL_PAGE ((byte)28) full contents of a page */
#define MLOG_INIT_FILE_PAGE ((byte)29) /* this means that a file page #define MLOG_INIT_FILE_PAGE ((byte)29) /* this means that a file page
is taken into use and the prior is taken into use and the prior
contents of the page should be contents of the page should be
...@@ -236,16 +236,6 @@ mtr_memo_release( ...@@ -236,16 +236,6 @@ mtr_memo_release(
mtr_t* mtr, /* in: mtr */ mtr_t* mtr, /* in: mtr */
void* object, /* in: object */ void* object, /* in: object */
ulint type); /* in: object type: MTR_MEMO_S_LOCK, ... */ ulint type); /* in: object type: MTR_MEMO_S_LOCK, ... */
/****************************************************************
Parses a log record which contains the full contents of a page. */
byte*
mtr_log_parse_full_page(
/*====================*/
/* out: end of log record or NULL */
byte* ptr, /* in: buffer */
byte* end_ptr,/* in: buffer end */
page_t* page); /* in: page or NULL */
/************************************************************** /**************************************************************
Checks if memo contains the given item. */ Checks if memo contains the given item. */
UNIV_INLINE UNIV_INLINE
......
...@@ -790,11 +790,7 @@ log_init(void) ...@@ -790,11 +790,7 @@ log_init(void)
log_sys->archiving_on = os_event_create(NULL); log_sys->archiving_on = os_event_create(NULL);
/*----------------------------*/ /*----------------------------*/
log_sys->online_backup_state = FALSE;
/*----------------------------*/
log_block_init(log_sys->buf, log_sys->lsn); log_block_init(log_sys->buf, log_sys->lsn);
log_block_set_first_rec_group(log_sys->buf, LOG_BLOCK_HDR_SIZE); log_block_set_first_rec_group(log_sys->buf, LOG_BLOCK_HDR_SIZE);
...@@ -3003,66 +2999,6 @@ loop: ...@@ -3003,66 +2999,6 @@ loop:
mutex_exit(&(log_sys->mutex)); mutex_exit(&(log_sys->mutex));
} }
/**********************************************************
Switches the database to the online backup state. */
ulint
log_switch_backup_state_on(void)
/*============================*/
/* out: DB_SUCCESS or DB_ERROR */
{
dulint backup_lsn;
mutex_enter(&(log_sys->mutex));
if (log_sys->online_backup_state) {
/* The database is already in that state */
mutex_exit(&(log_sys->mutex));
return(DB_ERROR);
}
log_sys->online_backup_state = TRUE;
backup_lsn = log_sys->lsn;
log_sys->online_backup_lsn = backup_lsn;
mutex_exit(&(log_sys->mutex));
/* log_checkpoint_and_mark_file_spaces(); */
return(DB_SUCCESS);
}
/**********************************************************
Switches the online backup state off. */
ulint
log_switch_backup_state_off(void)
/*=============================*/
/* out: DB_SUCCESS or DB_ERROR */
{
mutex_enter(&(log_sys->mutex));
if (!log_sys->online_backup_state) {
/* The database is already in that state */
mutex_exit(&(log_sys->mutex));
return(DB_ERROR);
}
log_sys->online_backup_state = FALSE;
mutex_exit(&(log_sys->mutex));
return(DB_SUCCESS);
}
/******************************************************************** /********************************************************************
Makes a checkpoint at the latest lsn and writes it to first page of each Makes a checkpoint at the latest lsn and writes it to first page of each
data file in the database, so that we know that the file spaces contain data file in the database, so that we know that the file spaces contain
......
...@@ -808,9 +808,6 @@ recv_parse_or_apply_log_rec_body( ...@@ -808,9 +808,6 @@ recv_parse_or_apply_log_rec_body(
} else if (type == MLOG_IBUF_BITMAP_INIT) { } else if (type == MLOG_IBUF_BITMAP_INIT) {
new_ptr = ibuf_parse_bitmap_init(ptr, end_ptr, page, mtr); new_ptr = ibuf_parse_bitmap_init(ptr, end_ptr, page, mtr);
} else if (type == MLOG_FULL_PAGE) {
new_ptr = mtr_log_parse_full_page(ptr, end_ptr, page);
} else if (type == MLOG_INIT_FILE_PAGE) { } else if (type == MLOG_INIT_FILE_PAGE) {
new_ptr = fsp_parse_init_file_page(ptr, end_ptr, page); new_ptr = fsp_parse_init_file_page(ptr, end_ptr, page);
...@@ -1127,15 +1124,7 @@ recv_recover_page( ...@@ -1127,15 +1124,7 @@ recv_recover_page(
buf = ((byte*)(recv->data)) + sizeof(recv_data_t); buf = ((byte*)(recv->data)) + sizeof(recv_data_t);
} }
if (recv->type == MLOG_INIT_FILE_PAGE if (recv->type == MLOG_INIT_FILE_PAGE) {
|| recv->type == MLOG_FULL_PAGE) {
/* A new file page may have been taken into use,
or we have stored the full contents of the page:
in this case it may be that the original log record
type was MLOG_INIT_FILE_PAGE, and we replaced it
with MLOG_FULL_PAGE, thus we have to apply
any record of type MLOG_FULL_PAGE */
page_lsn = page_newest_lsn; page_lsn = page_newest_lsn;
mach_write_to_8(page + UNIV_PAGE_SIZE mach_write_to_8(page + UNIV_PAGE_SIZE
......
...@@ -105,179 +105,6 @@ mtr_memo_pop_all( ...@@ -105,179 +105,6 @@ mtr_memo_pop_all(
} }
} }
/****************************************************************
Writes to the log the contents of a full page. This is called when the
database is in the online backup state. */
static
void
mtr_log_write_full_page(
/*====================*/
page_t* page, /* in: page to write */
ulint i, /* in: i'th page for mtr */
ulint n_pages,/* in: total number of pages for mtr */
mtr_t* mtr) /* in: mtr */
{
byte* buf;
byte* ptr;
ulint len;
buf = mem_alloc(UNIV_PAGE_SIZE + 50);
ptr = mlog_write_initial_log_record_fast(page, MLOG_FULL_PAGE, buf,
mtr);
ut_memcpy(ptr, page, UNIV_PAGE_SIZE);
len = (ptr - buf) + UNIV_PAGE_SIZE;
if (i == n_pages - 1) {
if (n_pages > 1) {
*(buf + len) = MLOG_MULTI_REC_END;
len++;
} else {
*buf = (byte)((ulint)*buf | MLOG_SINGLE_REC_FLAG);
}
}
ut_ad(len < UNIV_PAGE_SIZE + 50);
log_write_low(buf, len);
mem_free(buf);
}
/****************************************************************
Parses a log record which contains the full contents of a page. */
byte*
mtr_log_parse_full_page(
/*====================*/
/* out: end of log record or NULL */
byte* ptr, /* in: buffer */
byte* end_ptr,/* in: buffer end */
page_t* page) /* in: page or NULL */
{
if (end_ptr < ptr + UNIV_PAGE_SIZE) {
return(NULL);
}
if (page) {
ut_memcpy(page, ptr, UNIV_PAGE_SIZE);
}
return(ptr + UNIV_PAGE_SIZE);
}
/****************************************************************
Writes to the database log the full contents of the pages that this mtr has
modified. */
static
void
mtr_log_write_backup_full_pages(
/*============================*/
mtr_t* mtr, /* in: mini-transaction */
ulint n_pages)/* in: number of pages modified by mtr */
{
mtr_memo_slot_t* slot;
dyn_array_t* memo;
buf_block_t* block;
ulint offset;
ulint type;
ulint i;
ut_ad(mtr);
ut_ad(mtr->magic_n == MTR_MAGIC_N);
ut_ad(mtr->state == MTR_COMMITTING);
/* Open the database log for log_write_low */
mtr->start_lsn = log_reserve_and_open(n_pages * (UNIV_PAGE_SIZE + 50));
memo = &(mtr->memo);
offset = dyn_array_get_data_size(memo);
i = 0;
while (offset > 0) {
offset -= sizeof(mtr_memo_slot_t);
slot = dyn_array_get_element(memo, offset);
block = slot->object;
type = slot->type;
if ((block != NULL) && (type == MTR_MEMO_PAGE_X_FIX)) {
mtr_log_write_full_page(block->frame, i, n_pages, mtr);
i++;
}
}
ut_ad(i == n_pages);
}
/****************************************************************
Checks if mtr is the first to modify any page after online_backup_lsn. */
static
ibool
mtr_first_to_modify_page_after_backup(
/*==================================*/
/* out: TRUE if first for a page */
mtr_t* mtr, /* in: mini-transaction */
ulint* n_pages) /* out: number of modified pages (all modified
pages, backup_lsn does not matter here) */
{
mtr_memo_slot_t* slot;
dyn_array_t* memo;
ulint offset;
buf_block_t* block;
ulint type;
dulint backup_lsn;
ibool ret = FALSE;
ut_ad(mtr);
ut_ad(mtr->magic_n == MTR_MAGIC_N);
ut_ad(mtr->state == MTR_COMMITTING);
backup_lsn = log_get_online_backup_lsn_low();
memo = &(mtr->memo);
offset = dyn_array_get_data_size(memo);
*n_pages = 0;
while (offset > 0) {
offset -= sizeof(mtr_memo_slot_t);
slot = dyn_array_get_element(memo, offset);
block = slot->object;
type = slot->type;
if ((block != NULL) && (type == MTR_MEMO_PAGE_X_FIX)) {
*n_pages = *n_pages + 1;
if (ut_dulint_cmp(buf_frame_get_newest_modification(
block->frame),
backup_lsn) <= 0) {
fprintf(stderr,
"Page %lu newest %lu backup %lu\n",
(ulong) block->offset,
(ulong) ut_dulint_get_low(
buf_frame_get_newest_modification(
block->frame)),
(ulong) ut_dulint_get_low(backup_lsn));
ret = TRUE;
}
}
}
return(ret);
}
/**************************************************************** /****************************************************************
Writes the contents of a mini-transaction log, if any, to the database log. */ Writes the contents of a mini-transaction log, if any, to the database log. */
static static
...@@ -291,7 +118,6 @@ mtr_log_reserve_and_write( ...@@ -291,7 +118,6 @@ mtr_log_reserve_and_write(
ulint data_size; ulint data_size;
ibool success; ibool success;
byte* first_data; byte* first_data;
ulint n_modified_pages;
ut_ad(mtr); ut_ad(mtr);
...@@ -322,27 +148,12 @@ mtr_log_reserve_and_write( ...@@ -322,27 +148,12 @@ mtr_log_reserve_and_write(
if (mtr->log_mode == MTR_LOG_ALL) { if (mtr->log_mode == MTR_LOG_ALL) {
if (log_get_online_backup_state_low() block = mlog;
&& mtr_first_to_modify_page_after_backup(mtr,
&n_modified_pages)) {
/* The database is in the online backup state: write
to the log the full contents of all the pages if this
mtr is the first to modify any page in the buffer pool
after online_backup_lsn */
log_close();
log_release();
mtr_log_write_backup_full_pages(mtr, n_modified_pages);
} else {
block = mlog;
while (block != NULL) { while (block != NULL) {
log_write_low(dyn_block_get_data(block), log_write_low(dyn_block_get_data(block),
dyn_block_get_used(block)); dyn_block_get_used(block));
block = dyn_array_get_next_block(mlog, block); block = dyn_array_get_next_block(mlog, block);
}
} }
} else { } else {
ut_ad(mtr->log_mode == MTR_LOG_NONE); ut_ad(mtr->log_mode == MTR_LOG_NONE);
......
...@@ -190,8 +190,6 @@ que_thr_end_wait( ...@@ -190,8 +190,6 @@ que_thr_end_wait(
ut_ad(mutex_own(&kernel_mutex)); ut_ad(mutex_own(&kernel_mutex));
#endif /* UNIV_SYNC_DEBUG */ #endif /* UNIV_SYNC_DEBUG */
ut_ad(thr); ut_ad(thr);
ut_ad(next_thr);
ut_ad(*next_thr == NULL);
ut_ad((thr->state == QUE_THR_LOCK_WAIT) ut_ad((thr->state == QUE_THR_LOCK_WAIT)
|| (thr->state == QUE_THR_PROCEDURE_WAIT) || (thr->state == QUE_THR_PROCEDURE_WAIT)
|| (thr->state == QUE_THR_SIG_REPLY_WAIT)); || (thr->state == QUE_THR_SIG_REPLY_WAIT));
......
...@@ -183,6 +183,14 @@ void STDCALL mysql_server_end() ...@@ -183,6 +183,14 @@ void STDCALL mysql_server_end()
mysql_client_init= org_my_init_done= 0; mysql_client_init= org_my_init_done= 0;
} }
static MYSQL_PARAMETERS mysql_internal_parameters=
{&max_allowed_packet, &net_buffer_length};
MYSQL_PARAMETERS *STDCALL mysql_get_parameters()
{
return &mysql_internal_parameters;
}
my_bool STDCALL mysql_thread_init() my_bool STDCALL mysql_thread_init()
{ {
#ifdef THREAD #ifdef THREAD
......
...@@ -16,7 +16,6 @@ EXPORTS ...@@ -16,7 +16,6 @@ EXPORTS
list_add list_add
list_delete list_delete
load_defaults load_defaults
max_allowed_packet
my_end my_end
my_getopt_print_errors my_getopt_print_errors
my_init my_init
...@@ -24,6 +23,7 @@ EXPORTS ...@@ -24,6 +23,7 @@ EXPORTS
my_memdup my_memdup
my_no_flags_free my_no_flags_free
my_path my_path
mysql_get_parameters
my_print_help my_print_help
my_print_variables my_print_variables
my_realloc my_realloc
...@@ -116,7 +116,6 @@ EXPORTS ...@@ -116,7 +116,6 @@ EXPORTS
mysql_stmt_sqlstate mysql_stmt_sqlstate
mysql_sqlstate mysql_sqlstate
mysql_get_server_version mysql_get_server_version
net_buffer_length
set_dynamic set_dynamic
strcend strcend
strcont strcont
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
target = libmysqlclient_r.la target = libmysqlclient_r.la
target_defs = -DDONT_USE_RAID @LIB_EXTRA_CCFLAGS@ target_defs = -DDONT_USE_RAID -DMYSQL_CLIENT @LIB_EXTRA_CCFLAGS@
LIBS = @LIBS@ @openssl_libs@ LIBS = @LIBS@ @openssl_libs@
INCLUDES = @MT_INCLUDES@ -I$(top_srcdir)/include $(openssl_includes) INCLUDES = @MT_INCLUDES@ -I$(top_srcdir)/include $(openssl_includes)
......
...@@ -23,6 +23,11 @@ ...@@ -23,6 +23,11 @@
#define mysql_unix_port mysql_inix_port1 #define mysql_unix_port mysql_inix_port1
#define mysql_port mysql_port1 #define mysql_port mysql_port1
extern "C"
{
unsigned long max_allowed_packet, net_buffer_length;
}
static int fake_argc= 1; static int fake_argc= 1;
static char *fake_argv[]= {(char *)"", 0}; static char *fake_argv[]= {(char *)"", 0};
static const char *fake_groups[] = { "server", "embedded", 0 }; static const char *fake_groups[] = { "server", "embedded", 0 };
......
...@@ -47,6 +47,9 @@ ...@@ -47,6 +47,9 @@
#define INADDR_NONE -1 #define INADDR_NONE -1
#endif #endif
extern ulong net_buffer_length;
extern ulong max_allowed_packet;
#if defined(MSDOS) || defined(__WIN__) #if defined(MSDOS) || defined(__WIN__)
#define ERRNO WSAGetLastError() #define ERRNO WSAGetLastError()
#define perror(A) #define perror(A)
...@@ -81,7 +84,17 @@ static void end_server(MYSQL *mysql) ...@@ -81,7 +84,17 @@ static void end_server(MYSQL *mysql)
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
static inline int mysql_init_charset(MYSQL *mysql)
static MYSQL_PARAMETERS mysql_internal_parameters=
{&max_allowed_packet, &net_buffer_length};
MYSQL_PARAMETERS *STDCALL mysql_get_parameters()
{
return &mysql_internal_parameters;
}
static int mysql_init_charset(MYSQL *mysql)
{ {
char charset_name_buff[16], *charset_name; char charset_name_buff[16], *charset_name;
...@@ -124,6 +137,7 @@ static inline int mysql_init_charset(MYSQL *mysql) ...@@ -124,6 +137,7 @@ static inline int mysql_init_charset(MYSQL *mysql)
return 0; return 0;
} }
MYSQL * STDCALL MYSQL * STDCALL
mysql_real_connect(MYSQL *mysql,const char *host, const char *user, mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
const char *passwd, const char *db, const char *passwd, const char *db,
......
...@@ -92,7 +92,6 @@ EXPORTS ...@@ -92,7 +92,6 @@ EXPORTS
mysql_thread_safe mysql_thread_safe
mysql_use_result mysql_use_result
mysql_warning_count mysql_warning_count
net_buffer_length
set_dynamic set_dynamic
strcend strcend
strcont strcont
...@@ -128,5 +127,5 @@ EXPORTS ...@@ -128,5 +127,5 @@ EXPORTS
alloc_root alloc_root
free_root free_root
my_read my_read
max_allowed_packet
llstr llstr
mysql_get_parameters
...@@ -515,6 +515,7 @@ end: ...@@ -515,6 +515,7 @@ end:
#else #else
#define UNLOCK_MUTEX #define UNLOCK_MUTEX
#define LOCK_MUTEX #define LOCK_MUTEX
#define max_allowed_packet (*mysql_get_parameters()->p_max_allowed_packet)
#endif #endif
/* /*
......
...@@ -357,7 +357,7 @@ LOG_MSG_FUNC(log_info,LOG_INFO) ...@@ -357,7 +357,7 @@ LOG_MSG_FUNC(log_info,LOG_INFO)
#ifndef DBUG_OFF #ifndef DBUG_OFF
LOG_MSG_FUNC(log_debug,LOG_DEBUG) LOG_MSG_FUNC(log_debug,LOG_DEBUG)
#else #else
void log_debug(const char* __attribute__((unused)) fmt,...) {} void log_debug(const char* fmt __attribute__((unused)),...) {}
#endif #endif
static void handle_sigterm(int sig __attribute__((unused))) static void handle_sigterm(int sig __attribute__((unused)))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment