diff options
author | Michael Widenius <monty@askmonty.org> | 2012-06-15 12:52:58 +0300 |
---|---|---|
committer | Michael Widenius <monty@askmonty.org> | 2012-06-15 12:52:58 +0300 |
commit | acba7d2f9f131a7726138608fd260ddbf5973f65 (patch) | |
tree | 7276dda3ec142b39840afe174b97533699a9fd05 /storage | |
parent | 28b4aba40a65006af33cc8e1464ab28643442309 (diff) | |
download | mariadb-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.c | 3 | ||||
-rw-r--r-- | storage/maria/ma_delete_table.c | 12 | ||||
-rw-r--r-- | storage/maria/ma_info.c | 1 | ||||
-rw-r--r-- | storage/maria/ma_open.c | 4 |
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: |