diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index d424d5014ff..5410fe67658 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -8277,7 +8277,15 @@ NDB_SHARE *ndbcluster_get_share(const char *key, TABLE *table, share->table_name= share->db + strlen(share->db) + 1; ha_ndbcluster::set_tabname(key, share->table_name); #ifdef HAVE_NDB_BINLOG - ndbcluster_binlog_init_share(share, table); + if (ndbcluster_binlog_init_share(share, table)) + { + DBUG_PRINT("error", ("get_share: %s could not init share", key)); + ndbcluster_real_free_share(&share); + *root_ptr= old_root; + if (!have_lock) + pthread_mutex_unlock(&ndbcluster_mutex); + DBUG_RETURN(0); + } #endif *root_ptr= old_root; } diff --git a/sql/ha_ndbcluster_binlog.cc b/sql/ha_ndbcluster_binlog.cc index cad5de704a4..1cf51307173 100644 --- a/sql/ha_ndbcluster_binlog.cc +++ b/sql/ha_ndbcluster_binlog.cc @@ -265,7 +265,7 @@ static void run_query(THD *thd, char *buf, char *end, Thd_ndb *thd_ndb= get_thd_ndb(thd); for (i= 0; no_print_error[i]; i++) if ((thd_ndb->m_error_code == no_print_error[i]) || - (thd->net.last_errno == no_print_error[i])) + (thd->net.last_errno == (unsigned)no_print_error[i])) break; if (!no_print_error[i]) sql_print_error("NDB: %s: error %s %d(ndb: %d) %d %d", @@ -325,18 +325,14 @@ ndbcluster_binlog_open_table(THD *thd, NDB_SHARE *share, share->key); if ((error= open_table_def(thd, table_share, 0))) { - sql_print_error("Unable to get table share for %s, error=%d", - share->key, error); - DBUG_PRINT("error", ("open_table_def failed %d", error)); + DBUG_PRINT("error", ("open_table_def failed: %d my_errno: %d", error, my_errno)); free_table_share(table_share); DBUG_RETURN(error); } if ((error= open_table_from_share(thd, table_share, "", 0 /* fon't allocate buffers */, (uint) READ_ALL, 0, table, FALSE))) { - sql_print_error("Unable to open table for %s, error=%d(%d)", - share->key, error, my_errno); - DBUG_PRINT("error", ("open_table_from_share failed %d", error)); + DBUG_PRINT("error", ("open_table_from_share failed %d my_errno: %d", error, my_errno)); free_table_share(table_share); DBUG_RETURN(error); } @@ -382,11 +378,12 @@ ndbcluster_binlog_open_table(THD *thd, NDB_SHARE *share, /* Initialize the binlog part of the NDB_SHARE */ -void ndbcluster_binlog_init_share(NDB_SHARE *share, TABLE *_table) +int ndbcluster_binlog_init_share(NDB_SHARE *share, TABLE *_table) { THD *thd= current_thd; MEM_ROOT *mem_root= &share->mem_root; int do_event_op= ndb_binlog_running; + int error= 0; DBUG_ENTER("ndbcluster_binlog_init_share"); share->connect_count= g_ndb_cluster_connection->get_connect_count(); @@ -429,7 +426,7 @@ void ndbcluster_binlog_init_share(NDB_SHARE *share, TABLE *_table) { share->flags|= NSF_NO_BINLOG; } - DBUG_VOID_RETURN; + DBUG_RETURN(error); } while (1) { @@ -456,7 +453,7 @@ void ndbcluster_binlog_init_share(NDB_SHARE *share, TABLE *_table) share->flags|= NSF_BLOB_FLAG; break; } - DBUG_VOID_RETURN; + DBUG_RETURN(error); } /***************************************************************** diff --git a/sql/ha_ndbcluster_binlog.h b/sql/ha_ndbcluster_binlog.h index b5b8d0d9745..aab13c6e902 100644 --- a/sql/ha_ndbcluster_binlog.h +++ b/sql/ha_ndbcluster_binlog.h @@ -124,7 +124,7 @@ void ndbcluster_binlog_init_handlerton(); /* Initialize the binlog part of the NDB_SHARE */ -void ndbcluster_binlog_init_share(NDB_SHARE *share, TABLE *table); +int ndbcluster_binlog_init_share(NDB_SHARE *share, TABLE *table); bool ndbcluster_check_if_local_table(const char *dbname, const char *tabname); bool ndbcluster_check_if_local_tables_in_db(THD *thd, const char *dbname);