mariadb/fsp
marko 64096ab555 branches/zip: Clean up after a crash during DROP INDEX.
When InnoDB crashes while dropping an index, ensure that
the index will be completely dropped during crash recovery.

row_merge_drop_index(): Before dropping an index, rename the index to
start with TEMP_INDEX_PREFIX_STR and commit the change, so that
row_merge_drop_temp_indexes() will drop the index after crash
recovery if the server crashes while dropping the index.

fseg_inode_try_get(): New function, forked from fseg_inode_get().
Return NULL if the file segment index node is free.

fseg_inode_get(): Assert that the file segment index node is not free.

fseg_free_step(): If the file segment index node is already free,
print a diagnostic message and return TRUE.

fsp_free_seg_inode(): Write a nonzero number to FSEG_MAGIC_N, so that
allocated-and-freed file segment index nodes can be better
distinguished from uninitialized ones.

This is rb://174, addressing Issue #348.

Tested by restarting mysqld upon the completion of the added
log_write_up_to() invocation below, during DROP INDEX.  The index was
dropped after crash recovery, and re-issuing the DROP INDEX did not
crash the server.

  Index: btr/btr0btr.c
  ===================================================================
  --- btr/btr0btr.c	(revision 6026)
  +++ btr/btr0btr.c	(working copy)
  @@ -42,6 +42,7 @@ Created 6/2/1994 Heikki Tuuri
   #include "ibuf0ibuf.h"
   #include "trx0trx.h"
  +#include "log0log.h"
   
   /*
   Latching strategy of the InnoDB B-tree
   --------------------------------------
  @@ -873,6 +874,8 @@ leaf_loop:
   
   		goto leaf_loop;
   	}
  +
  +	log_write_up_to(mtr.end_lsn, LOG_WAIT_ALL_GROUPS, TRUE);
   top_loop:
   	mtr_start(&mtr);
2009-10-01 10:24:33 +00:00
..
fsp0fsp.c branches/zip: Clean up after a crash during DROP INDEX. 2009-10-01 10:24:33 +00:00