summaryrefslogtreecommitdiff
path: root/sql/ha_ndbcluster_binlog.cc
diff options
context:
space:
mode:
authortomas@poseidon.ndb.mysql.com <>2006-06-28 02:35:13 +0200
committertomas@poseidon.ndb.mysql.com <>2006-06-28 02:35:13 +0200
commita23259c2efecd5be4ea96c865d0e1879c89bba93 (patch)
tree5bbce906a30a538615d80a1ae65b3c1b9fb54a1b /sql/ha_ndbcluster_binlog.cc
parent40267422ebeefe0631ce8ad06b83b97dfa035b78 (diff)
downloadmariadb-git-a23259c2efecd5be4ea96c865d0e1879c89bba93.tar.gz
Bug #20705 table truncation from one mysqld causes ERROR 1412 on other mysqld servers
- make sure to invalidate even if table is not binlogged
Diffstat (limited to 'sql/ha_ndbcluster_binlog.cc')
-rw-r--r--sql/ha_ndbcluster_binlog.cc25
1 files changed, 24 insertions, 1 deletions
diff --git a/sql/ha_ndbcluster_binlog.cc b/sql/ha_ndbcluster_binlog.cc
index 40a98563613..b18fa8ec931 100644
--- a/sql/ha_ndbcluster_binlog.cc
+++ b/sql/ha_ndbcluster_binlog.cc
@@ -1770,8 +1770,31 @@ ndb_binlog_thread_handle_schema_event(THD *thd, Ndb *ndb,
/* acknowledge this query _after_ epoch completion */
post_epoch_unlock= 1;
break;
- case SOT_CREATE_TABLE:
case SOT_TRUNCATE_TABLE:
+ {
+ char key[FN_REFLEN];
+ build_table_filename(key, sizeof(key), schema->db, schema->name, "");
+ NDB_SHARE *share= get_share(key, 0, FALSE, FALSE);
+ // invalidation already handled by binlog thread
+ if (!share || !share->op)
+ {
+ {
+ injector_ndb->setDatabaseName(schema->db);
+ Ndb_table_guard ndbtab_g(injector_ndb->getDictionary(),
+ schema->name);
+ ndbtab_g.invalidate();
+ }
+ TABLE_LIST table_list;
+ bzero((char*) &table_list,sizeof(table_list));
+ table_list.db= schema->db;
+ table_list.alias= table_list.table_name= schema->name;
+ close_cached_tables(thd, 0, &table_list, FALSE);
+ }
+ if (share)
+ free_share(&share);
+ }
+ // fall through
+ case SOT_CREATE_TABLE:
pthread_mutex_lock(&LOCK_open);
if (ndb_create_table_from_engine(thd, schema->db, schema->name))
{