← Back to team overview

maria-developers team mailing list archive

Preparing MDEV-4506, Parallel replication, for 10.0.5 release

 

Hi Monty,

I was asked to prepare MDEV-4506, parallel replication, for release of 10.0.5
on Monday.

For this, I did merge to 10.0-base and then to 10.0. I have pushed the results
here:

    lp:~maria-captains/maria/mdev-4506-base   # for 10.0-base merge
    lp:~maria-captains/maria/mdev-4506        # for 10.0 merge

However, I had problems with a couple of your changes, to temporary tables and
innodb log file size. The code that you modified in 10.0-base does not seem to
exist in 10.0 (or at least I couldn't find it easily).

Can you take a look at this and see if you can complete the merge? The missing
bits are just the few hunks appended at the end of this mail, so I assume it
should be easy for someone who knows what the patches are supposed to do.

The tree lp:~maria-captains/maria/mdev-4506 currently has a lot of test
failures, but it looks like most of them will be fixed by completing the last
bits of the merge.

 - Kristian.

-----------------------------------------------------------------------

sql/sql_base.cc:

<<<<<<< TREE
  if (table_list->mdl_request.type >= MDL_SHARED_WRITE &&
      thd->tx_read_only &&
      !(flags & (MYSQL_LOCK_LOG_TABLE | MYSQL_OPEN_HAS_MDL_LOCK)))
||||||| BASE-REVISION
  if (table_list->open_type != OT_BASE_ONLY &&
      ! (flags & MYSQL_OPEN_SKIP_TEMPORARY))
=======
  if (table_list->open_type != OT_BASE_ONLY &&
      ! (flags & MYSQL_OPEN_SKIP_TEMPORARY) && thd->have_temporary_tables())
>>>>>>> MERGE-SOURCE
  {
<<<<<<< TREE
    my_error(ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION, MYF(0));
    DBUG_RETURN(true);
||||||| BASE-REVISION
    for (table= thd->temporary_tables; table ; table=table->next)
    {
      if (table->s->table_cache_key.length == key_length +
          TMP_TABLE_KEY_EXTRA &&
	  !memcmp(table->s->table_cache_key.str, key,
		  key_length + TMP_TABLE_KEY_EXTRA))
      {
        /*
          We're trying to use the same temporary table twice in a query.
          Right now we don't support this because a temporary table
          is always represented by only one TABLE object in THD, and
          it can not be cloned. Emit an error for an unsupported behaviour.
        */
	if (table->query_id)
	{
          DBUG_PRINT("error",
                     ("query_id: %lu  server_id: %u  pseudo_thread_id: %lu",
                      (ulong) table->query_id, (uint) thd->variables.server_id,
                      (ulong) thd->variables.pseudo_thread_id));
	  my_error(ER_CANT_REOPEN_TABLE, MYF(0), table->alias.c_ptr());
	  DBUG_RETURN(TRUE);
	}
	table->query_id= thd->query_id;
	thd->thread_specific_used= TRUE;
        DBUG_PRINT("info",("Using temporary table"));
        goto reset;
      }
    }
=======
    if ((table= find_temporary_table(thd, key,
                                     key_length + TMP_TABLE_KEY_EXTRA)))
    {      
      /*
        Check if we're trying to use the same temporary table twice in a query.
        Right now we don't support this because a temporary table
        is always represented by only one TABLE object in THD, and
        it can not be cloned. Emit an error for an unsupported behaviour.
      */
      if (table->query_id)
      {
        DBUG_PRINT("error",
                   ("query_id: %lu  server_id: %u  pseudo_thread_id: %lu",
                    (ulong) table->query_id, (uint) thd->variables.server_id,
                    (ulong) thd->variables.pseudo_thread_id));
        my_error(ER_CANT_REOPEN_TABLE, MYF(0), table->alias.c_ptr());
        DBUG_RETURN(TRUE);
      }
      table->query_id= thd->query_id;
      thd->thread_specific_used= TRUE;
      DBUG_PRINT("info",("Using temporary table"));
      goto reset;
    }
>>>>>>> MERGE-SOURCE



sql/slave.cc:

<<<<<<< TREE
static void set_thd_in_use_temporary_tables(Relay_log_info *rli)
{
  TABLE *table;

  for (table= rli->save_temporary_tables ; table ; table= table->next)
  {
    table->in_use= rli->sql_thd;
    if (table->file != NULL)
    {
      /*
        Since we are stealing opened temporary tables from one thread to another,
        we need to let the performance schema know that,
        for aggregates per thread to work properly.
      */
      table->file->unbind_psi();
      table->file->rebind_psi();
    }
  }
}
||||||| BASE-REVISION
static void set_thd_in_use_temporary_tables(Relay_log_info *rli)
{
  TABLE *table;

  for (table= rli->save_temporary_tables ; table ; table= table->next)
    table->in_use= rli->sql_thd;
}
=======
>>>>>>> MERGE-SOURCE



=== modified file 'storage/innobase/srv/srv0start.c'
--- storage/innobase/srv/srv0start.c	2013-09-06 20:31:30 +0000
+++ storage/innobase/srv/srv0start.c	2013-11-01 08:17:06 +0000
@@ -621,7 +621,7 @@ open_or_create_log_file(
 		    || size_high != srv_calc_high32(srv_log_file_size)) {
 
 			fprintf(stderr,
-				"InnoDB: Error: log file %s is"
+				"InnoDB: Warning: log file %s is"
 				" of different size %lu %lu bytes\n"
 				"InnoDB: than specified in the .cnf"
 				" file %lu %lu bytes!\n",
@@ -629,7 +629,8 @@ open_or_create_log_file(
 				(ulong) srv_calc_high32(srv_log_file_size),
 				(ulong) srv_calc_low32(srv_log_file_size));
 
-			return(DB_ERROR);
+                        srv_log_file_size= size +
+                                           (((longlong) size_high) << 32);
 		}
 	} else {
 		*log_file_created = TRUE;


Follow ups