summaryrefslogtreecommitdiff
path: root/storage
diff options
context:
space:
mode:
authorMichael Widenius <monty@askmonty.org>2012-06-15 12:52:58 +0300
committerMichael Widenius <monty@askmonty.org>2012-06-15 12:52:58 +0300
commitacba7d2f9f131a7726138608fd260ddbf5973f65 (patch)
tree7276dda3ec142b39840afe174b97533699a9fd05 /storage
parent28b4aba40a65006af33cc8e1464ab28643442309 (diff)
downloadmariadb-git-acba7d2f9f131a7726138608fd260ddbf5973f65.tar.gz
Fixed MDEV-306 / LP:1007967 - Assertion `table->file->stats.records > 0 || error' failed join_read_const_table on concurrent SELECT and DROP/ADD INDEX
sql/sql_table.cc: Added comment storage/maria/ma_close.c: Don't store history if it's visible to all. This fixed the MDEV-306 bug storage/maria/ma_delete_table.c: Removed old comment Delete history state for deleted tables storage/maria/ma_info.c: More DBUG_PRINT storage/maria/ma_open.c: More DBUG_PRINT
Diffstat (limited to 'storage')
-rw-r--r--storage/maria/ma_close.c3
-rw-r--r--storage/maria/ma_delete_table.c12
-rw-r--r--storage/maria/ma_info.c1
-rw-r--r--storage/maria/ma_open.c4
4 files changed, 11 insertions, 9 deletions
diff --git a/storage/maria/ma_close.c b/storage/maria/ma_close.c
index 973adf2b91e..d1b90dc826e 100644
--- a/storage/maria/ma_close.c
+++ b/storage/maria/ma_close.c
@@ -193,9 +193,10 @@ int maria_close(register MARIA_HA *info)
else
share_can_be_freed= TRUE;
- if (share->state_history)
+ if (share->state_history && share->state_history->trid)
{
MARIA_STATE_HISTORY_CLOSED *history;
+ DBUG_PRINT("info", ("Storing state history"));
/*
Here we ignore the unlikely case that we don't have memory to
store the state. In the worst case what happens is that any transaction
diff --git a/storage/maria/ma_delete_table.c b/storage/maria/ma_delete_table.c
index 9e91638fa27..09d5cde5ad0 100644
--- a/storage/maria/ma_delete_table.c
+++ b/storage/maria/ma_delete_table.c
@@ -38,14 +38,8 @@ int maria_delete_table(const char *name)
/** @todo LOCK take X-lock on table */
/*
We need to know if this table is transactional.
- When built with RAID support, we also need to determine if this table
- makes use of the raid feature. If yes, we need to remove all raid
- chunks. This is done with my_raid_delete(). Unfortunately it is
- necessary to open the table just to check this. We use
- 'open_for_repair' to be able to open even a crashed table. If even
- this open fails, we assume no raid configuration for this table
- and try to remove the normal data file only. This may however
- leave the raid chunks behind.
+ Unfortunately it is necessary to open the table just to check this. We use
+ 'open_for_repair' to be able to open even a crashed table.
*/
if (!(info= maria_open(name, O_RDONLY, HA_OPEN_FOR_REPAIR)))
{
@@ -56,6 +50,8 @@ int maria_delete_table(const char *name)
sync_dir= (info->s->now_transactional && !info->s->temporary &&
!maria_in_recovery) ?
MY_SYNC_DIR : 0;
+ /* Remove history for table */
+ _ma_reset_state(info);
maria_close(info);
}
diff --git a/storage/maria/ma_info.c b/storage/maria/ma_info.c
index 97b5b8b7f7b..341ea147785 100644
--- a/storage/maria/ma_info.c
+++ b/storage/maria/ma_info.c
@@ -42,6 +42,7 @@ int maria_status(MARIA_HA *info, register MARIA_INFO *x, uint flag)
MY_STAT state;
MARIA_SHARE *share= info->s;
DBUG_ENTER("maria_status");
+ DBUG_PRINT("info", ("records: %lld", info->state->records));
x->recpos= info->cur_row.lastpos;
if (flag == HA_STATUS_POS)
diff --git a/storage/maria/ma_open.c b/storage/maria/ma_open.c
index a526c0d4276..5f90f61c786 100644
--- a/storage/maria/ma_open.c
+++ b/storage/maria/ma_open.c
@@ -866,6 +866,9 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags)
_ma_remove_not_visible_states(history->state_history, 0, 0);
history->state_history= 0;
(void) my_hash_delete(&maria_stored_state, (uchar*) history);
+ DBUG_PRINT("info", ("Reading state history. trid: %lu records: %lld",
+ (ulong) share->state_history->trid,
+ share->state_history->state.records));
}
else
{
@@ -988,6 +991,7 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags)
mysql_mutex_unlock(&THR_LOCK_maria);
m_info->open_flags= open_flags;
+ DBUG_PRINT("exit", ("table: %p name: %s",m_info, name));
DBUG_RETURN(m_info);
err: