Don't crash with: UPDATE performance_schema.setup_instruments SET ENABLED="NO";

Don't log updates to performance schema in replication log.
Ensure that we don't call ha_update after ha_index_or_rnd_end() is called on slave.


.bzrignore:
  Ignore some generated files
mysql-test/include/show_slave_status.inc:
  Ensure that ./ is removed from file names
mysql-test/suite/perfschema/r/binlog_mix.result:
  Updated results
mysql-test/suite/perfschema/r/binlog_row.result:
  Updated results
mysql-test/suite/perfschema/r/binlog_stmt.result:
  Updated results
mysql-test/suite/rpl/r/rpl_cant_read_event_incident.result:
  Updated results
mysql-test/suite/rpl/r/rpl_performance_schema.result:
  Ensure that we don't crash slave when we update performance schema
mysql-test/suite/rpl/t/rpl_performance_schema.test:
  Ensure that we don't crash slave when we update performance schema
sql/log_event.cc:
  Ensure that we don't call ha_update after ha_index_or_rnd_end() is called.
  Remove old code that is not needed anymore (like restarting read loop over all rows if no matcing row is found)
  Simplify code
sql/log_event_old.cc:
  Ensure that we don't call ha_update after ha_index_or_rnd_end() is called.
storage/myisam/ha_myisam.cc:
  More DBUG_PRINT
storage/perfschema/ha_perfschema.h:
  Don't log updates to performance schema in replication log.
This commit is contained in:
Michael Widenius 2012-01-24 18:07:35 +02:00
commit 59f5c05a38
12 changed files with 79 additions and 84 deletions

View file

@ -1672,18 +1672,26 @@ int ha_myisam::index_init(uint idx, bool sorted)
int ha_myisam::index_end()
{
DBUG_ENTER("ha_myisam::index_end");
active_index=MAX_KEY;
//pushed_idx_cond_keyno= MAX_KEY;
mi_set_index_cond_func(file, NULL, 0);
in_range_check_pushed_down= FALSE;
ds_mrr.dsmrr_close();
return 0;
#if !defined(DBUG_OFF) && defined(SQL_SELECT_FIXED_FOR_UPDATE)
file->update&= ~HA_STATE_AKTIV; // Forget active row
#endif
DBUG_RETURN(0);
}
int ha_myisam::rnd_end()
{
DBUG_ENTER("ha_myisam::rnd_end");
ds_mrr.dsmrr_close();
return 0;
#if !defined(DBUG_OFF) && defined(SQL_SELECT_FIXED_FOR_UPDATE)
file->update&= ~HA_STATE_AKTIV; // Forget active row
#endif
DBUG_RETURN(0);
}
int ha_myisam::index_read_map(uchar *buf, const uchar *key,
@ -1785,6 +1793,7 @@ void ha_myisam::position(const uchar *record)
{
my_off_t row_position= mi_position(file);
my_store_ptr(ref, ref_length, row_position);
file->update|= HA_STATE_AKTIV; // Row can be updated
}
int ha_myisam::info(uint flag)

View file

@ -70,9 +70,13 @@ public:
Without HA_FAST_KEY_READ, the optimizer reads all columns and never
calls ::rnd_pos(), so it is guaranteed to return only thread <n>
records.
We use HA_HAS_OWN_BINLOGGING to stop changes to this table to
be logged to slaves (as enabled performance tracking on all slaves
is probably not what anyone wants)
*/
return HA_NO_TRANSACTIONS | HA_REC_NOT_IN_SEQ | HA_NO_AUTO_INCREMENT |
HA_BINLOG_ROW_CAPABLE | HA_BINLOG_STMT_CAPABLE | HA_NO_BLOBS;
return (HA_NO_TRANSACTIONS | HA_REC_NOT_IN_SEQ | HA_NO_AUTO_INCREMENT |
HA_BINLOG_ROW_CAPABLE | HA_BINLOG_STMT_CAPABLE |
HA_HAS_OWN_BINLOGGING | HA_NO_BLOBS);
}
/**