diff options
author | tomas@poseidon.ndb.mysql.com <> | 2006-06-14 13:52:50 +0200 |
---|---|---|
committer | tomas@poseidon.ndb.mysql.com <> | 2006-06-14 13:52:50 +0200 |
commit | 6e2be26052f2cc1545f24f7d86f50fce3f098ec2 (patch) | |
tree | 3fe7a2754fd76e9d1ec1a5055594136482736b99 /sql | |
parent | 47bb56997910d9c580e5b49c8db92489380fd4bf (diff) | |
parent | 418a8e3a24d16397ec48ee6127f9043cac46dfcf (diff) | |
download | mariadb-git-6e2be26052f2cc1545f24f7d86f50fce3f098ec2.tar.gz |
Merge tulin@bk-internal.mysql.com:/home/bk/mysql-4.1
into poseidon.ndb.mysql.com:/home/tomas/mysql-4.1-main
Diffstat (limited to 'sql')
-rw-r--r-- | sql/ha_ndbcluster.cc | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index 1031c4f635c..f09b4bf42f7 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -4147,20 +4147,30 @@ int ha_ndbcluster::delete_table(const char *name) int ha_ndbcluster::drop_table() { + THD *thd= current_thd; Ndb *ndb= get_ndb(); NdbDictionary::Dictionary *dict= ndb->getDictionary(); DBUG_ENTER("drop_table"); DBUG_PRINT("enter", ("Deleting %s", m_tabname)); - if (dict->dropTable(m_tabname)) + while (dict->dropTable(m_tabname)) { const NdbError err= dict->getNdbError(); - if (err.code == 709) - ; // 709: No such table existed - else + switch (err.status) + { + case NdbError::TemporaryError: + if (!thd->killed) + continue; // retry indefinitly + break; + default: + break; + } + if (err.code != 709) // 709: No such table existed ERR_RETURN(dict->getNdbError()); - } + break; + } + release_metadata(); DBUG_RETURN(0); } @@ -4564,14 +4574,24 @@ int ndbcluster_drop_database(const char *path) List_iterator_fast<char> it(drop_list); while ((tabname=it++)) { - if (dict->dropTable(tabname)) + while (dict->dropTable(tabname)) { const NdbError err= dict->getNdbError(); - if (err.code != 709) + switch (err.status) + { + case NdbError::TemporaryError: + if (!thd->killed) + continue; // retry indefinitly + break; + default: + break; + } + if (err.code != 709) // 709: No such table existed { ERR_PRINT(err); ret= ndb_to_mysql_error(&err); } + break; } } DBUG_RETURN(ret); |