From 0219f8b003f920b84e5ea89c83b712e39b1062b4 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 16 May 2006 12:58:41 +0200 Subject: [PATCH] ndb - bug#14509 [related] setAutoIncrement: add error handling ndb/include/ndbapi/Ndb.hpp: setAutoIncrement: add error handling ndb/src/ndbapi/Ndb.cpp: setAutoIncrement: add error handling ndb/src/ndbapi/NdbDictionaryImpl.cpp: setAutoIncrement: add error handling ndb/tools/restore/consumer_restore.cpp: setAutoIncrement: add error handling sql/ha_ndbcluster.cc: setAutoIncrement: add error handling --- ndb/include/ndbapi/Ndb.hpp | 12 ++++---- ndb/src/ndbapi/Ndb.cpp | 39 +++++++++++++------------- ndb/src/ndbapi/NdbDictionaryImpl.cpp | 13 ++++----- ndb/tools/restore/consumer_restore.cpp | 2 +- sql/ha_ndbcluster.cc | 10 +++---- 5 files changed, 36 insertions(+), 40 deletions(-) diff --git a/ndb/include/ndbapi/Ndb.hpp b/ndb/include/ndbapi/Ndb.hpp index b9f5aa123b8..f6610b29ad4 100644 --- a/ndb/include/ndbapi/Ndb.hpp +++ b/ndb/include/ndbapi/Ndb.hpp @@ -1432,7 +1432,7 @@ public: * * @param cacheSize number of values to cache in this Ndb object * - * @return tuple id or 0 on error + * @return tuple id or ~(Uint64)0 on error. */ Uint64 getAutoIncrementValue(const char* aTableName, Uint32 cacheSize = 1); @@ -1440,14 +1440,14 @@ public: Uint32 cacheSize = 1); Uint64 readAutoIncrementValue(const char* aTableName); Uint64 readAutoIncrementValue(const NdbDictionary::Table * aTable); - bool setAutoIncrementValue(const char* aTableName, Uint64 val, - bool increase = false); - bool setAutoIncrementValue(const NdbDictionary::Table * aTable, Uint64 val, - bool increase = false); + Uint64 setAutoIncrementValue(const char* aTableName, Uint64 val, + bool increase = false); + Uint64 setAutoIncrementValue(const NdbDictionary::Table * aTable, Uint64 val, + bool increase = false); private: Uint64 getTupleIdFromNdb(Ndb_local_table_info* info, Uint32 cacheSize); Uint64 readTupleIdFromNdb(Ndb_local_table_info* info); - bool setTupleIdInNdb(Ndb_local_table_info* info, Uint64 val, bool increase); + Uint64 setTupleIdInNdb(Ndb_local_table_info* info, Uint64 val, bool increase); Uint64 opTupleIdOnNdb(Ndb_local_table_info* info, Uint64 opValue, Uint32 op); public: diff --git a/ndb/src/ndbapi/Ndb.cpp b/ndb/src/ndbapi/Ndb.cpp index c6b9f308fe8..9c3ca5cd94a 100644 --- a/ndb/src/ndbapi/Ndb.cpp +++ b/ndb/src/ndbapi/Ndb.cpp @@ -781,8 +781,7 @@ Uint64 Ndb::getAutoIncrementValue(const NdbDictionary::Table * aTable, Uint32 cacheSize) { DBUG_ENTER("getAutoIncrementValue"); - if (aTable == 0) - DBUG_RETURN(~(Uint64)0); + assert(aTable != 0); const NdbTableImpl* table = & NdbTableImpl::getImpl(*aTable); const BaseString& internal_tabname = table->m_internalName; @@ -843,8 +842,7 @@ Uint64 Ndb::readAutoIncrementValue(const NdbDictionary::Table * aTable) { DBUG_ENTER("readAutoIncrementValue"); - if (aTable == 0) - DBUG_RETURN(~(Uint64)0); + assert(aTable != 0); const NdbTableImpl* table = & NdbTableImpl::getImpl(*aTable); const BaseString& internal_tabname = table->m_internalName; @@ -880,7 +878,7 @@ Ndb::readTupleIdFromNdb(Ndb_local_table_info* info) DBUG_RETURN(tupleId); } -bool +Uint64 Ndb::setAutoIncrementValue(const char* aTableName, Uint64 val, bool increase) { DBUG_ENTER("setAutoIncrementValue"); @@ -890,17 +888,16 @@ Ndb::setAutoIncrementValue(const char* aTableName, Uint64 val, bool increase) theDictionary->get_local_table_info(internal_tabname, false); if (info == 0) { theError.code = theDictionary->getNdbError().code; - DBUG_RETURN(false); + DBUG_RETURN(~(Uint64)0); } DBUG_RETURN(setTupleIdInNdb(info, val, increase)); } -bool +Uint64 Ndb::setAutoIncrementValue(const NdbDictionary::Table * aTable, Uint64 val, bool increase) { DBUG_ENTER("setAutoIncrementValue"); - if (aTable == 0) - DBUG_RETURN(false); + assert(aTable != 0); const NdbTableImpl* table = & NdbTableImpl::getImpl(*aTable); const BaseString& internal_tabname = table->m_internalName; @@ -908,12 +905,12 @@ Ndb::setAutoIncrementValue(const NdbDictionary::Table * aTable, Uint64 val, bool theDictionary->get_local_table_info(internal_tabname, false); if (info == 0) { theError.code = theDictionary->getNdbError().code; - DBUG_RETURN(false); + DBUG_RETURN(~(Uint64)0); } DBUG_RETURN(setTupleIdInNdb(info, val, increase)); } -bool +Uint64 Ndb::setTupleIdInNdb(Ndb_local_table_info* info, Uint64 val, bool increase) { DBUG_ENTER("setTupleIdInNdb"); @@ -923,11 +920,14 @@ Ndb::setTupleIdInNdb(Ndb_local_table_info* info, Uint64 val, bool increase) { assert(info->m_first_tuple_id < info->m_last_tuple_id); if (val <= info->m_first_tuple_id + 1) - DBUG_RETURN(false); + DBUG_RETURN(val); if (val <= info->m_last_tuple_id) { info->m_first_tuple_id = val - 1; - DBUG_RETURN(true); + DBUG_PRINT("info", + ("Setting next auto increment cached value to %llu", + (ulonglong)val)); + DBUG_RETURN(val); } } /* @@ -954,8 +954,7 @@ Ndb::opTupleIdOnNdb(Ndb_local_table_info* info, Uint64 opValue, Uint32 op) NdbOperation* tOperation= 0; // Compiler warning if not initialized Uint64 tValue; NdbRecAttr* tRecAttrResult; - int result; - Uint64 ret; + Uint64 ret = ~(Uint64)0; CHECK_STATUS_MACRO_ZERO; @@ -1017,17 +1016,17 @@ Ndb::opTupleIdOnNdb(Ndb_local_table_info* info, Uint64 opValue, Uint32 op) tOperation->def_label(0); tOperation->interpret_exit_nok(9999); - if ( (result = tConnection->execute( Commit )) == -1 ) + if (tConnection->execute( Commit ) == -1) { if (tConnection->theError.code != 9999) goto error_handler; - - // NEXTID >= opValue, return ~(Uint64)0 for now since - // there is no error check... - ret = ~(Uint64)0; + ret = opValue; } else { + DBUG_PRINT("info", + ("Setting next auto increment value (db) to %llu", + (ulonglong)opValue)); info->m_first_tuple_id = info->m_last_tuple_id = opValue - 1; ret = opValue; } diff --git a/ndb/src/ndbapi/NdbDictionaryImpl.cpp b/ndb/src/ndbapi/NdbDictionaryImpl.cpp index 26517948f2d..b3824df48f4 100644 --- a/ndb/src/ndbapi/NdbDictionaryImpl.cpp +++ b/ndb/src/ndbapi/NdbDictionaryImpl.cpp @@ -1742,14 +1742,11 @@ NdbDictInterface::createOrAlterTable(Ndb & ndb, DBUG_RETURN(ret); if (haveAutoIncrement) { - if (!ndb.setAutoIncrementValue(impl.m_externalName.c_str(), - autoIncrementValue)) { - if (ndb.theError.code == 0) { - m_error.code= 4336; - ndb.theError = m_error; - } else - m_error= ndb.theError; - ret = -1; // errorcode set in initialize_autoincrement + if (ndb.setAutoIncrementValue(impl.m_externalName.c_str(), + autoIncrementValue) == ~(Uint64)0) { + DBUG_ASSERT(ndb.theError.code != 0); + m_error= ndb.theError; + ret = -1; } } } diff --git a/ndb/tools/restore/consumer_restore.cpp b/ndb/tools/restore/consumer_restore.cpp index 038d57daf97..5563c51365b 100644 --- a/ndb/tools/restore/consumer_restore.cpp +++ b/ndb/tools/restore/consumer_restore.cpp @@ -150,7 +150,7 @@ BackupRestore::finalize_table(const TableS & table){ Uint64 max_val= table.get_max_auto_val(); Uint64 auto_val= m_ndb->readAutoIncrementValue(get_table(table.m_dictTable)); if (max_val+1 > auto_val || auto_val == ~(Uint64)0) - ret= m_ndb->setAutoIncrementValue(get_table(table.m_dictTable), max_val+1, false); + ret= m_ndb->setAutoIncrementValue(get_table(table.m_dictTable), max_val+1, false) != ~(Uint64)0; } return ret; } diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index 138e8c72e7a..a7f680ffc1c 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -2197,11 +2197,11 @@ int ha_ndbcluster::write_row(byte *record) Ndb *ndb= get_ndb(); Uint64 next_val= (Uint64) table->next_number_field->val_int() + 1; DBUG_PRINT("info", - ("Trying to set next auto increment value to %lu", - (ulong) next_val)); - if (ndb->setAutoIncrementValue((const NDBTAB *) m_table, next_val, TRUE)) - DBUG_PRINT("info", - ("Setting next auto increment value to %u", next_val)); + ("Trying to set next auto increment value to %llu", + (ulonglong) next_val)); + if (ndb->setAutoIncrementValue((const NDBTAB *) m_table, next_val, TRUE) + == ~(Uint64)0) + ERR_RETURN(ndb->getNdbError()); } m_skip_auto_increment= TRUE;