List:Commits« Previous MessageNext Message »
From:Michael Widenius Date:October 23 2008 9:25pm
Subject:bzr push into mysql-6.0 branch (monty:2749)
View as plain text  
 2749 Michael Widenius	2008-10-24 [merge]
      Automatic merge with base MySQL-maria tree.
modified:
  include/errmsg.h
  include/my_global.h
  libmysql/errmsg.c
  libmysql/libmysql.c
  libmysqld/libmysqld.c
  mysql-test/r/create.result
  mysql-test/r/log_tables.result
  mysql-test/r/mysql.result
  mysql-test/r/partition.result
  mysql-test/r/partition_innodb.result
  mysql-test/r/plugin.result
  mysql-test/r/sp.result
  mysql-test/r/storage_engine_basic.result
  mysql-test/r/variables.result
  mysql-test/suite/falcon/r/falcon_bugs.result
  mysql-test/suite/falcon/t/falcon_bugs.test
  mysql-test/t/sp.test
  mysys/my_largepage.c
  scripts/make_win_bin_dist
  sql-common/client.c
  sql/backup/backup_info.cc
  sql/backup/backup_info.h
  sql/backup/backup_kernel.h
  sql/backup/backup_test.cc
  sql/backup/error.h
  sql/backup/kernel.cc
  sql/backup/logger.cc
  sql/backup/logger.h
  sql/log.cc
  sql/mysql_priv.h
  sql/mysqld.cc
  sql/share/errmsg.txt
  sql/si_objects.cc
  sql/si_objects.h
  sql/sql_class.cc
  sql/sql_table.cc
  storage/falcon/NNode.h
  storage/falcon/Types.h
  storage/falcon/ha_falcon.cpp
  storage/falcon/plug.in
  support-files/my-huge.cnf.sh
  support-files/my-large.cnf.sh
  support-files/my-medium.cnf.sh
  support-files/my-small.cnf.sh
  support-files/mysql.spec.sh
  tests/mysql_client_test.c
  unittest/mytap/tap.c

=== modified file '.bzrignore'
--- a/.bzrignore	2008-10-22 11:51:28 +0000
+++ b/.bzrignore	2008-10-23 21:08:32 +0000
@@ -1899,3 +1899,5 @@ libmysqld/event_parse_data.cc
 client/transaction.h
 libmysqld/transaction.cc
 libmysqld/rpl_handler.cc
+libmysql/probes.h
+libmysql_r/probes.h

=== modified file 'mysql-test/mysql-test-run.pl'
--- a/mysql-test/mysql-test-run.pl	2008-10-20 19:13:22 +0000
+++ b/mysql-test/mysql-test-run.pl	2008-10-23 16:29:52 +0000
@@ -2829,7 +2829,7 @@ sub run_benchmarks ($) {
 
   if ( ! $benchmark )
   {
-    mtr_add_arg($args, "--log");
+    mtr_add_arg($args, "--general-log");
     mtr_run("$glob_mysql_bench_dir/run-all-tests", $args, "", "", "", "");
     # FIXME check result code?!
   }
@@ -3766,9 +3766,11 @@ sub mysqld_arguments ($$$$) {
   }
 
   my $log_base_path= "$opt_vardir/log/$mysqld->{'type'}$sidx";
-  mtr_add_arg($args, "%s--log=%s.log", $prefix, $log_base_path);
+  mtr_add_arg($args, "%s--general-log", $prefix);
+  mtr_add_arg($args, "%s--general-log-file=%s.log", $prefix, $log_base_path);
+  mtr_add_arg($args, "%s--slow-query-log", $prefix);
   mtr_add_arg($args,
-	      "%s--log-slow-queries=%s-slow.log", $prefix, $log_base_path);
+	      "%s--slow-query-log-file=%s-slow.log", $prefix, $log_base_path);
 
   # Check if "extra_opt" contains --skip-log-bin
   my $skip_binlog= grep(/^--skip-log-bin/, @$extra_opt, @opt_extra_mysqld_opt);

=== modified file 'mysql-test/suite/maria/r/maria-lock.result'
--- a/mysql-test/suite/maria/r/maria-lock.result	2008-10-21 23:23:23 +0000
+++ b/mysql-test/suite/maria/r/maria-lock.result	2008-10-23 16:29:52 +0000
@@ -1,4 +1,5 @@
 drop table if exists t1,t2,t3;
+drop view if exists v1;
 create table t1 (c1 int) engine=maria;
 create table t2 (c1 int) engine=maria;
 create table t3 (c1 int) engine=maria;
@@ -33,3 +34,24 @@ insert t1 select * from t2;
 drop table t2;
 ERROR 42S02: Table 'test.t2' doesn't exist
 drop table t1;
+create table t1 (a int, b int) engine=maria;
+insert into t1 values (1, 2), (2, 3), (3, 4);
+create table t2 (a int) engine=maria;
+insert into t2 values (10), (20), (30);
+create view v1 as select a as b, a/10 as a from t2;
+lock table t1 write;
+alter table t1 add column c int default 100 after a;
+update t1, v1 set t1.b=t1.a+t1.b+v1.b where t1.a=v1.a;
+unlock tables;
+select * from t1;
+a	c	b
+1	100	13
+2	100	25
+3	100	37
+select * from t2;
+a
+10
+20
+30
+drop view v1;
+drop table t1, t2;

=== modified file 'mysql-test/suite/maria/t/maria-lock.test'
--- a/mysql-test/suite/maria/t/maria-lock.test	2008-10-21 23:23:23 +0000
+++ b/mysql-test/suite/maria/t/maria-lock.test	2008-10-23 16:29:52 +0000
@@ -6,6 +6,7 @@
 
 --disable_warnings
 drop table if exists t1,t2,t3;
+drop view if exists v1;
 --enable_warnings
 
 # Check that a lock merge works.
@@ -96,3 +97,48 @@ connection default;
 disconnect locker;
 disconnect reader;
 disconnect writer;
+
+#
+# Bug#39396 Maria: ha_maria.cc:2415: assertion in ha_maria::store_lock()
+#
+# Test alter table and a concurrent multi update
+# (This will force update to reopen tables)
+#
+
+create table t1 (a int, b int) engine=maria;
+insert into t1 values (1, 2), (2, 3), (3, 4);
+create table t2 (a int) engine=maria;
+insert into t2 values (10), (20), (30);
+create view v1 as select a as b, a/10 as a from t2;
+
+connect (locker,localhost,root,,test);
+connection locker;
+lock table t1 write;
+
+connect (changer,localhost,root,,test);
+connection changer;
+send alter table t1 add column c int default 100 after a;
+
+connect (updater,localhost,root,,test);
+connection updater;
+sleep 2;
+send update t1, v1 set t1.b=t1.a+t1.b+v1.b where t1.a=v1.a;
+
+connection locker;
+sleep 2;
+unlock tables;
+
+connection changer;
+reap;
+
+connection updater;
+reap;
+select * from t1;
+select * from t2;
+drop view v1;
+drop table t1, t2;
+
+connection default;
+disconnect updater;
+disconnect changer;
+disconnect locker;

=== modified file 'sql/lock.cc'
--- a/sql/lock.cc	2008-10-20 19:13:22 +0000
+++ b/sql/lock.cc	2008-10-23 16:29:52 +0000
@@ -169,9 +169,8 @@ int mysql_lock_tables_check(THD *thd, TA
   DBUG_RETURN(0);
 }
 
-
 /**
-  Reset lock type in lock data and free.
+  Reset lock type in lock data
 
   @param mysql_lock Lock structures to reset.
 
@@ -190,10 +189,11 @@ int mysql_lock_tables_check(THD *thd, TA
         lock request will set its lock type properly.
 */
 
-static void reset_lock_data_and_free(MYSQL_LOCK **mysql_lock)
+
+static void reset_lock_data(MYSQL_LOCK *sql_lock)
 {
-  MYSQL_LOCK *sql_lock= *mysql_lock;
   THR_LOCK_DATA **ldata, **ldata_end;
+  DBUG_ENTER("reset_lock_data");
 
   /* Clear the lock type of all lock data to avoid reusage. */
   for (ldata= sql_lock->locks, ldata_end= ldata + sql_lock->lock_count;
@@ -203,7 +203,21 @@ static void reset_lock_data_and_free(MYS
     /* Reset lock type. */
     (*ldata)->type= TL_UNLOCK;
   }
-  my_free((uchar*) sql_lock, MYF(0));
+  DBUG_VOID_RETURN;
+}
+
+
+/**
+  Reset lock type in lock data and free.
+
+  @param mysql_lock Lock structures to reset.
+
+*/
+
+static void reset_lock_data_and_free(MYSQL_LOCK **mysql_lock)
+{
+  reset_lock_data(*mysql_lock);
+  my_free(*mysql_lock, MYF(0));
   *mysql_lock= 0;
 }
 
@@ -315,6 +329,13 @@ MYSQL_LOCK *mysql_lock_tables(THD *thd, 
     }
     else if (rc == 1)                           /* aborted or killed */
     {
+      /*
+        reset_lock_data is required here. If thr_multi_lock fails it
+        resets lock type for tables, which were locked before (and
+        including) one that caused error. Lock type for other tables
+        preserved.
+      */
+      reset_lock_data(sql_lock);
       thd->some_tables_deleted=1;		// Try again
       sql_lock->lock_count= 0;                  // Locks are already freed
       // Fall through: unlock, reset lock data, free and retry

=== modified file 'sql/mysqld.cc'
--- a/sql/mysqld.cc	2008-10-22 11:51:28 +0000
+++ b/sql/mysqld.cc	2008-10-23 21:08:32 +0000
@@ -8067,7 +8067,7 @@ mysqld_get_one_option(int optid,
       default_collation_name= 0;
     break;
   case 'l':
-    WARN_DEPRECATED(NULL, 7,0, "--log", "'--general_log'/'--general_log_file'");
+    WARN_DEPRECATED(NULL, 7,0, "--log", "'--general-log --general-log-file'");
     opt_log=1;
     break;
   case 'B':
@@ -8252,7 +8252,8 @@ mysqld_get_one_option(int optid,
   }
 #endif /* HAVE_REPLICATION */
   case (int) OPT_SLOW_QUERY_LOG:
-    WARN_DEPRECATED(NULL, 7,0, "--log_slow_queries", "'--slow_query_log'/'--slow_query_log_file'");
+    WARN_DEPRECATED(NULL, 7,0, "--log-slow-queries",
+                    "'--slow-query-log --slow-query-log-file'");
     opt_slow_log= 1;
     break;
 #ifdef WITH_CSV_STORAGE_ENGINE

=== modified file 'storage/maria/ma_close.c'
--- a/storage/maria/ma_close.c	2008-10-20 13:03:34 +0000
+++ b/storage/maria/ma_close.c	2008-10-23 16:29:52 +0000
@@ -28,9 +28,8 @@ int maria_close(register MARIA_HA *info)
   my_bool share_can_be_freed= FALSE;
   MARIA_SHARE *share= info->s;
   DBUG_ENTER("maria_close");
-  DBUG_PRINT("enter",("base: 0x%lx  reopen: %u  locks: %u",
-		      (long) info, (uint) share->reopen,
-                      (uint) share->tot_locks));
+  DBUG_PRINT("enter",("maria_handler: %p  reopen: %u  locks: %u",
+		      info, (uint) share->reopen, (uint) share->tot_locks));
 
   /* Check that we have unlocked key delete-links properly */
   DBUG_ASSERT(info->key_del_used == 0);

=== modified file 'storage/maria/ma_locking.c'
--- a/storage/maria/ma_locking.c	2008-08-25 18:23:18 +0000
+++ b/storage/maria/ma_locking.c	2008-10-23 16:29:52 +0000
@@ -29,7 +29,7 @@ int maria_lock_database(MARIA_HA *info, 
   uint count;
   MARIA_SHARE *share= info->s;
   DBUG_ENTER("maria_lock_database");
-  DBUG_PRINT("enter",("lock_type: %d  old lock %d  r_locks: %u  w_locks: %u "
+  DBUG_PRINT("enter",("lock_type: %d  old lock %d  r_locks: %u  w_locks: %u  "
                       "global_changed:  %d  open_count: %u  name: '%s'",
                       lock_type, info->lock_type, share->r_locks,
                       share->w_locks,

=== modified file 'storage/maria/ma_open.c'
--- a/storage/maria/ma_open.c	2008-10-20 09:16:47 +0000
+++ b/storage/maria/ma_open.c	2008-10-23 16:29:52 +0000
@@ -896,6 +896,7 @@ MARIA_HA *maria_open(const char *name, i
     goto err;
 
   pthread_mutex_unlock(&THR_LOCK_maria);
+  DBUG_PRINT("exit", ("maria_handler: %p", m_info));
   DBUG_RETURN(m_info);
 
 err:

=== modified file 'strings/my_vsnprintf.c'
--- a/strings/my_vsnprintf.c	2008-07-09 07:12:43 +0000
+++ b/strings/my_vsnprintf.c	2008-10-23 16:29:52 +0000
@@ -55,9 +55,9 @@ size_t my_vsnprintf(char *to, size_t n, 
   {
     if (*fmt != '%')
     {
-      if (to == end)			/* End of buffer */
+      if (to == end)                            /* End of buffer */
 	break;
-      *to++= *fmt;			/* Copy ordinary char */
+      *to++= *fmt;                            /* Copy ordinary char */
       continue;
     }
     fmt++;					/* skip '%' */
@@ -76,7 +76,7 @@ size_t my_vsnprintf(char *to, size_t n, 
       {
         length= length * 10 + (uint)(*fmt - '0');
         if (!length)
-          pre_zero= 1;			/* first digit was 0 */
+          pre_zero= 1;                         /* first digit was 0 */
       }
     if (*fmt == '.')
     {
@@ -87,15 +87,17 @@ size_t my_vsnprintf(char *to, size_t n, 
         width= va_arg(ap, int);
       }
       else
+      {
         for (; my_isdigit(&my_charset_latin1, *fmt); fmt++)
           width= width * 10 + (uint)(*fmt - '0');
+      }
     }
     else
       width= SIZE_T_MAX;
     if (*fmt == 'l')
     {
       fmt++;
-      if (fmt[1] != 'l')
+      if (*fmt != 'l')
         have_longlong= (sizeof(long) == sizeof(longlong));
       else
       {
@@ -103,20 +105,21 @@ size_t my_vsnprintf(char *to, size_t n, 
         have_longlong= 1;
       }
     }
-    else if(*fmt == 'z')
+    else if (*fmt == 'z')
     {
       fmt++;
       have_longlong= (sizeof(size_t) == sizeof(longlong));
     }
     if (*fmt == 's')				/* String parameter */
     {
-      reg2 char	*par = va_arg(ap, char *);
-      size_t plen,left_len = (size_t) (end - to) + 1;
-      if (!par) par = (char*)"(null)";
-      plen= (uint) strnlen(par, width);
+      reg2 char	*par= va_arg(ap, char *);
+      size_t plen, left_len= (size_t) (end - to) + 1;
+      if (!par)
+        par = (char*) "(null)";
+      plen= strnlen(par, width);
       if (left_len <= plen)
 	plen = left_len - 1;
-      to=strnmov(to,par,plen);
+      to= strnmov(to,par,plen);
       continue;
     }
     else if (*fmt == 'b')				/* Buffer parameter */
@@ -143,9 +146,10 @@ size_t my_vsnprintf(char *to, size_t n, 
       else
         to+= my_gcvt(d, MY_GCVT_ARG_DOUBLE, (int) width , to, NULL);
     }
-    else if (*fmt == 'd' || *fmt == 'u'|| *fmt== 'x' || *fmt =='X' || *fmt =='p')
-    /* Integer parameter */
+    else if (*fmt == 'd' || *fmt == 'u' || *fmt == 'x' || *fmt == 'X' ||
+             *fmt == 'p')
     {
+      /* Integer parameter */
       longlong larg;
       size_t res_length, to_length;
       char *store_start= to, *store_end;
@@ -159,27 +163,25 @@ size_t my_vsnprintf(char *to, size_t n, 
 	store_start= buff;
       if (have_longlong)
         larg = va_arg(ap,longlong);
+      else if (*fmt == 'd')
+        larg = va_arg(ap, int);
       else
-        if (*fmt == 'd')
-          larg = va_arg(ap, int);
-        else
-          larg= va_arg(ap, uint);
+        larg= va_arg(ap, uint);
       if (*fmt == 'd')
 	store_end= longlong10_to_str(larg, store_start, -10);
+      else if (*fmt == 'u')
+        store_end= longlong10_to_str(larg, store_start, 10);
+      else if (*fmt == 'p')
+      {
+        store_start[0]= '0';
+        store_start[1]= 'x';
+        store_end= ll2str(larg, store_start + 2, 16, 0);
+      }
       else
-        if (*fmt== 'u')
-          store_end= longlong10_to_str(larg, store_start, 10);
-        else if(*fmt == 'p')
-        {
-          store_start[0]= '0';
-          store_start[1]= 'x';
-          store_end= ll2str(larg, store_start + 2, 16, 0);
-        }
-        else
-        {
-          DBUG_ASSERT(*fmt == 'X' || *fmt =='x');
-          store_end= ll2str(larg, store_start, 16, (*fmt == 'X'));
-        }
+      {
+        DBUG_ASSERT(*fmt == 'X' || *fmt =='x');
+        store_end= ll2str(larg, store_start, 16, (*fmt == 'X'));
+      }
 
       if ((res_length= (size_t) (store_end - store_start)) > to_length)
 	break;					/* num doesn't fit in output */

Thread
bzr push into mysql-6.0 branch (monty:2749) Michael Widenius23 Oct