Commit 9ab13311 authored by joreland@mysql.com's avatar joreland@mysql.com

Merge mysql.com:/home/jonas/src/mysql-5.0

into mysql.com:/home/jonas/src/mysql-5.0-ndb
parents d488a784 d4e9719a
This diff is collapsed.
......@@ -38,7 +38,7 @@ $opt_dry_run= undef;
$opt_export_only= undef;
$opt_help= $opt_verbose= 0;
$opt_log= undef;
$opt_mail= "";
$opt_mail= "build\@mysql.com";
$opt_pull= undef;
$opt_revision= undef;
$opt_suffix= "";
......@@ -431,6 +431,7 @@ Options:
include a log file snippet, if logging is enabled)
Note that the \@-Sign needs to be quoted!
Example: --mail=user\\\@domain.com
Default: build\@mysql.com
-q, --quiet Be quiet
-p, --pull Update the source BK trees before building
-r, --revision=<rev> Export the tree as of revision <rev>
......
......@@ -1767,7 +1767,7 @@ os_file_flush(
#else
int ret;
#ifdef HAVE_DARWIN_THREADS
#if defined(HAVE_DARWIN_THREADS) && defined(F_FULLFSYNC)
/* Apple has disabled fsync() for internal disk drives in OS X. That
caused corruption for a user when he tested a power outage. Let us in
OS X use a nonstandard flush method recommended by an Apple
......
stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
create table t1 (a int not null auto_increment primary key, b int, key(b));
INSERT INTO t1 (a) VALUES (1),(2);
drop table t1;
# Test for BUG#7658 "optimize crashes slave thread (1 in 1000)]"
source include/master-slave.inc;
create table t1 (a int not null auto_increment primary key, b int, key(b));
INSERT INTO t1 (a) VALUES (1),(2);
# Now many OPTIMIZE to test if we crash (BUG#7658)
let $1=300;
disable_query_log;
disable_result_log;
while ($1)
{
eval OPTIMIZE TABLE t1;
dec $1;
}
enable_result_log;
enable_query_log;
drop table t1;
# Bug was that slave segfaulted after ~ a hundred of OPTIMIZE (or ANALYZE)
sync_slave_with_master;
......@@ -54,7 +54,11 @@ struct NdbThread* NdbThread_Create(NDB_THREAD_FUNC *p_thread_func,
strnmov(tmpThread->thread_name,p_thread_name,sizeof(tmpThread->thread_name));
pthread_attr_init(&thread_attr);
#if (SIZEOF_CHARP == 8)
pthread_attr_setstacksize(&thread_attr, 2*thread_stack_size);
#else
pthread_attr_setstacksize(&thread_attr, thread_stack_size);
#endif
#ifdef USE_PTHREAD_EXTRAS
/* Guard stack overflow with a 2k databuffer */
pthread_attr_setguardsize(&thread_attr, 2048);
......
......@@ -14,19 +14,11 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/**
* O_DIRECT
*/
#if 0
//#ifdef NDB_LINUX
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#endif
#include <ndb_global.h>
#include <my_sys.h>
#include <my_pthread.h>
#include "Error.hpp"
#include <Error.hpp>
#include "AsyncFile.hpp"
#include <ErrorHandlingMacros.hpp>
......@@ -35,15 +27,6 @@
#include <NdbThread.h>
#include <signaldata/FsOpenReq.hpp>
#if 0
#ifdef HAVE_PREAD
// This is for pread and pwrite
#ifndef __USE_UNIX98
#define __USE_UNIX98
#endif
#endif
#endif
#if defined NDB_WIN32 || defined NDB_OSE || defined NDB_SOFTOSE
#else
// For readv and writev
......@@ -91,6 +74,7 @@ static int numAsyncFiles = 0;
extern "C" void * runAsyncFile(void* arg)
{
my_thread_init();
((AsyncFile*)arg)->run();
return (NULL);
}
......@@ -419,7 +403,7 @@ AsyncFile::readBuffer(char * buf, size_t size, off_t offset){
#elif defined NDB_OSE || defined NDB_SOFTOSE
return_value = ::read(theFd, buf, size);
#else // UNIX
return_value = ::pread(theFd, buf, size, offset);
return_value = my_pread(theFd, buf, size, offset,0);
#endif
#ifndef NDB_WIN32
if (return_value == -1 && errno == EINTR) {
......@@ -653,7 +637,7 @@ AsyncFile::writeBuffer(const char * buf, size_t size, off_t offset,
#elif defined NDB_OSE || defined NDB_SOFTOSE
return_value = ::write(theFd, buf, bytes_to_write);
#else // UNIX
return_value = ::pwrite(theFd, buf, bytes_to_write, offset);
return_value = my_pwrite(theFd, buf, bytes_to_write, offset, 0);
#endif
#ifndef NDB_WIN32
if (return_value == -1 && errno == EINTR) {
......@@ -889,6 +873,7 @@ void AsyncFile::endReq()
{
// Thread is ended with return
if (theWriteBuffer) NdbMem_Free(theWriteBuffer);
my_thread_end();
NdbThread_Exit(0);
}
......
......@@ -318,7 +318,8 @@ HANDLE create_named_pipe(NET *net, uint connect_timeout, char **arg_host,
{
net->last_errno=CR_NAMEDPIPEOPEN_ERROR;
strmov(net->sqlstate, unknown_sqlstate);
sprintf(net->last_error,ER(net->last_errno),host, unix_socket,
my_snprintf(net->last_error, sizeof(net->last_error)-1,
ER(net->last_errno), host, unix_socket,
(ulong) GetLastError());
return INVALID_HANDLE_VALUE;
}
......@@ -327,7 +328,8 @@ HANDLE create_named_pipe(NET *net, uint connect_timeout, char **arg_host,
{
net->last_errno=CR_NAMEDPIPEWAIT_ERROR;
strmov(net->sqlstate, unknown_sqlstate);
sprintf(net->last_error,ER(net->last_errno),host, unix_socket,
my_snprintf(net->last_error, sizeof(net->last_error)-1,
ER(net->last_errno), host, unix_socket,
(ulong) GetLastError());
return INVALID_HANDLE_VALUE;
}
......@@ -336,7 +338,8 @@ HANDLE create_named_pipe(NET *net, uint connect_timeout, char **arg_host,
{
net->last_errno=CR_NAMEDPIPEOPEN_ERROR;
strmov(net->sqlstate, unknown_sqlstate);
sprintf(net->last_error,ER(net->last_errno),host, unix_socket,
my_snprintf(net->last_error, sizeof(net->last_error)-1,
ER(net->last_errno), host, unix_socket,
(ulong) GetLastError());
return INVALID_HANDLE_VALUE;
}
......@@ -346,7 +349,8 @@ HANDLE create_named_pipe(NET *net, uint connect_timeout, char **arg_host,
CloseHandle( hPipe );
net->last_errno=CR_NAMEDPIPESETSTATE_ERROR;
strmov(net->sqlstate, unknown_sqlstate);
sprintf(net->last_error,ER(net->last_errno),host, unix_socket,
my_snprintf(net->last_error, sizeof(net->last_error)-1,
ER(net->last_errno),host, unix_socket,
(ulong) GetLastError());
return INVALID_HANDLE_VALUE;
}
......@@ -560,9 +564,11 @@ HANDLE create_shared_memory(MYSQL *mysql,NET *net, uint connect_timeout)
net->last_errno=error_allow;
strmov(net->sqlstate, unknown_sqlstate);
if (error_allow == CR_SHARED_MEMORY_EVENT_ERROR)
sprintf(net->last_error,ER(net->last_errno),suffix_pos,error_code);
my_snprintf(net->last_error,sizeof(net->last_error)-1,
ER(net->last_errno),suffix_pos,error_code);
else
sprintf(net->last_error,ER(net->last_errno),error_code);
my_snprintf(net->last_error,sizeof(net->last_error)-1,
ER(net->last_errno),error_code);
return(INVALID_HANDLE_VALUE);
}
return(handle_map);
......@@ -792,7 +798,8 @@ static int check_license(MYSQL *mysql)
if (net->last_errno == ER_UNKNOWN_SYSTEM_VARIABLE)
{
net->last_errno= CR_WRONG_LICENSE;
sprintf(net->last_error, ER(net->last_errno), required_license);
my_snprintf(net->last_error, sizeof(net->last_error)-1,
ER(net->last_errno), required_license);
}
return 1;
}
......@@ -809,7 +816,8 @@ static int check_license(MYSQL *mysql)
strncmp(row[0], required_license, sizeof(required_license))))
{
net->last_errno= CR_WRONG_LICENSE;
sprintf(net->last_error, ER(net->last_errno), required_license);
my_snprintf(net->last_error, sizeof(net->last_error)-1,
ER(net->last_errno), required_license);
}
mysql_free_result(res);
return net->last_errno;
......@@ -1647,7 +1655,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
sock=0;
unix_socket = 0;
host=mysql->options.shared_memory_base_name;
sprintf(host_info=buff, ER(CR_SHARED_MEMORY_CONNECTION), host);
my_snprintf(host_info=buff, sizeof(buff)-1,
ER(CR_SHARED_MEMORY_CONNECTION), host);
}
}
#endif /* HAVE_SMEM */
......@@ -1667,7 +1676,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
{
net->last_errno=CR_SOCKET_CREATE_ERROR;
strmov(net->sqlstate, unknown_sqlstate);
sprintf(net->last_error,ER(net->last_errno),socket_errno);
my_snprintf(net->last_error,sizeof(net->last_error)-1,
ER(net->last_errno),socket_errno);
goto error;
}
net->vio = vio_new(sock, VIO_TYPE_SOCKET, TRUE);
......@@ -1681,7 +1691,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
socket_errno));
net->last_errno=CR_CONNECTION_ERROR;
strmov(net->sqlstate, unknown_sqlstate);
sprintf(net->last_error,ER(net->last_errno),unix_socket,socket_errno);
my_snprintf(net->last_error,sizeof(net->last_error)-1,
ER(net->last_errno),unix_socket,socket_errno);
goto error;
}
mysql->options.protocol=MYSQL_PROTOCOL_SOCKET;
......@@ -1711,7 +1722,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
else
{
net->vio=vio_new_win32pipe(hPipe);
sprintf(host_info=buff, ER(CR_NAMEDPIPE_CONNECTION), unix_socket);
my_snprintf(host_info=buff, sizeof(buff)-1,
ER(CR_NAMEDPIPE_CONNECTION), unix_socket);
}
}
#endif
......@@ -1724,7 +1736,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
port=mysql_port;
if (!host)
host=LOCAL_HOST;
sprintf(host_info=buff,ER(CR_TCP_CONNECTION),host);
my_snprintf(host_info=buff,sizeof(buff)-1,ER(CR_TCP_CONNECTION),host);
DBUG_PRINT("info",("Server name: '%s'. TCP sock: %d", host,port));
#ifdef MYSQL_SERVER
thr_alarm_init(&alarmed);
......@@ -1739,7 +1751,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
{
net->last_errno=CR_IPSOCK_ERROR;
strmov(net->sqlstate, unknown_sqlstate);
sprintf(net->last_error,ER(net->last_errno),socket_errno);
my_snprintf(net->last_error,sizeof(net->last_error)-1,
ER(net->last_errno),socket_errno);
goto error;
}
net->vio = vio_new(sock,VIO_TYPE_TCPIP,FALSE);
......@@ -1766,7 +1779,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
my_gethostbyname_r_free();
net->last_errno=CR_UNKNOWN_HOST;
strmov(net->sqlstate, unknown_sqlstate);
sprintf(net->last_error, ER(CR_UNKNOWN_HOST), host, tmp_errno);
my_snprintf(net->last_error, sizeof(net->last_error)-1,
ER(CR_UNKNOWN_HOST), host, tmp_errno);
goto error;
}
memcpy(&sock_addr.sin_addr, hp->h_addr,
......@@ -1781,7 +1795,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
host));
net->last_errno= CR_CONN_HOST_ERROR;
strmov(net->sqlstate, unknown_sqlstate);
sprintf(net->last_error ,ER(CR_CONN_HOST_ERROR), host, socket_errno);
my_snprintf(net->last_error, sizeof(net->last_error)-1,
ER(CR_CONN_HOST_ERROR), host, socket_errno);
goto error;
}
}
......@@ -1834,7 +1849,8 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
{
strmov(net->sqlstate, unknown_sqlstate);
net->last_errno= CR_VERSION_ERROR;
sprintf(net->last_error, ER(CR_VERSION_ERROR), mysql->protocol_version,
my_snprintf(net->last_error, sizeof(net->last_error)-1,
ER(CR_VERSION_ERROR), mysql->protocol_version,
PROTOCOL_VERSION);
goto error;
}
......
......@@ -333,10 +333,8 @@ ARCHIVE_SHARE *ha_archive::get_share(const char *table_name, TABLE *table)
if ((share->archive_write= gzopen(share->data_file_name, "ab")) == NULL)
goto error2;
if (my_hash_insert(&archive_open_tables, (byte*) share))
goto error2;
thr_lock_init(&share->lock);
if (pthread_mutex_init(&share->mutex,MY_MUTEX_INIT_FAST))
goto error3;
thr_lock_init(&share->lock);
}
share->use_count++;
pthread_mutex_unlock(&archive_mutex);
......@@ -344,14 +342,13 @@ ARCHIVE_SHARE *ha_archive::get_share(const char *table_name, TABLE *table)
return share;
error3:
VOID(pthread_mutex_destroy(&share->mutex));
thr_lock_delete(&share->lock);
/* We close, but ignore errors since we already have errors */
(void)gzclose(share->archive_write);
error2:
my_close(share->meta_file,MYF(0));
error:
pthread_mutex_unlock(&archive_mutex);
VOID(pthread_mutex_destroy(&share->mutex));
my_free((gptr) share, MYF(0));
return NULL;
......@@ -485,22 +482,29 @@ int ha_archive::create(const char *name, TABLE *table_arg,
if ((archive= gzdopen(create_file, "ab")) == NULL)
{
error= errno;
delete_table(name);
goto error;
goto error2;
}
if (write_data_header(archive))
{
gzclose(archive);
goto error2;
error= errno;
goto error3;
}
if (gzclose(archive))
{
error= errno;
goto error2;
}
my_close(create_file, MYF(0));
DBUG_RETURN(0);
error3:
/* We already have an error, so ignore results of gzclose. */
(void)gzclose(archive);
error2:
error= errno;
my_close(create_file, MYF(0));
delete_table(name);
error:
/* Return error number, if we got one */
......@@ -751,7 +755,7 @@ int ha_archive::repair(THD* thd, HA_CHECK_OPT* check_opt)
if ((rebuild_file= gzopen(data_file_name, "rb")) == NULL)
DBUG_RETURN(errno ? errno : -1);
if (rc= read_data_header(rebuild_file))
if ((rc= read_data_header(rebuild_file)))
goto error;
/*
......@@ -823,7 +827,7 @@ int ha_archive::optimize(THD* thd, HA_CHECK_OPT* check_opt)
DBUG_RETURN(-1);
}
while (read= gzread(reader, block, IO_SIZE))
while ((read= gzread(reader, block, IO_SIZE)))
gzwrite(writer, block, read);
gzclose(reader);
......
This diff is collapsed.
......@@ -713,7 +713,7 @@ class Field_timestamp :public Field_str {
if ((*null_value= is_null()))
return 0;
#ifdef WORDS_BIGENDIAN
if (table->db_low_byte_first)
if (table->s->db_low_byte_first)
return sint4korr(ptr);
#endif
long tmp;
......
......@@ -255,6 +255,8 @@ my_bool
my_net_write(NET *net,const char *packet,ulong len)
{
uchar buff[NET_HEADER_SIZE];
if (unlikely(!net->vio)) // nowhere to write
return 0;
/*
Big packets are handled by splitting them in packets of MAX_PACKET_LENGTH
length. The last packet is always a packet that is < MAX_PACKET_LENGTH.
......
......@@ -5197,6 +5197,7 @@ bool sp_grant_privileges(THD *thd, const char *sp_db, const char *sp_name)
DBUG_RETURN(TRUE);
thd->lex->ssl_type= SSL_TYPE_NOT_SPECIFIED;
bzero((char*) &thd->lex->mqh, sizeof(thd->lex->mqh));
result= mysql_procedure_grant(thd, tables, user_list,
DEFAULT_CREATE_PROC_ACLS, 0, 1);
......
......@@ -3588,6 +3588,16 @@ copy_data_between_tables(TABLE *from,TABLE *to,
ulong save_sql_mode;
DBUG_ENTER("copy_data_between_tables");
/*
Turn off recovery logging since rollback of an alter table is to
delete the new table so there is no need to log the changes to it.
This needs to be done before external_lock
*/
error= ha_enable_transaction(thd, FALSE);
if (error)
DBUG_RETURN(-1);
if (!(copy= new Copy_field[to->s->fields]))
DBUG_RETURN(-1); /* purecov: inspected */
......@@ -3646,17 +3656,6 @@ copy_data_between_tables(TABLE *from,TABLE *to,
goto err;
};
/*
Turn off recovery logging since rollback of an alter table is to
delete the new table so there is no need to log the changes to it.
*/
error= ha_enable_transaction(thd,FALSE);
if (error)
{
error= 1;
goto err;
}
/* Handler must be told explicitly to retrieve all columns, because
this function does not set field->query_id in the columns to the
current query id */
......
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