diff options
author | tomas@poseidon.ndb.mysql.com <> | 2006-06-28 02:35:13 +0200 |
---|---|---|
committer | tomas@poseidon.ndb.mysql.com <> | 2006-06-28 02:35:13 +0200 |
commit | a23259c2efecd5be4ea96c865d0e1879c89bba93 (patch) | |
tree | 5bbce906a30a538615d80a1ae65b3c1b9fb54a1b /sql/ha_ndbcluster_binlog.cc | |
parent | 40267422ebeefe0631ce8ad06b83b97dfa035b78 (diff) | |
download | mariadb-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.cc | 25 |
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)) { |