diff options
Diffstat (limited to 'ndb/tools')
-rw-r--r-- | ndb/tools/Makefile.am | 4 | ||||
-rw-r--r-- | ndb/tools/delete_all.cpp | 47 | ||||
-rw-r--r-- | ndb/tools/desc.cpp | 42 | ||||
-rw-r--r-- | ndb/tools/drop_index.cpp | 31 | ||||
-rw-r--r-- | ndb/tools/drop_tab.cpp | 31 | ||||
-rw-r--r-- | ndb/tools/listTables.cpp | 24 | ||||
-rw-r--r-- | ndb/tools/ndb_test_platform.cpp | 6 | ||||
-rw-r--r-- | ndb/tools/restore/Restore.cpp | 15 | ||||
-rw-r--r-- | ndb/tools/restore/consumer.cpp | 2 | ||||
-rw-r--r-- | ndb/tools/restore/consumer_printer.hpp | 2 | ||||
-rw-r--r-- | ndb/tools/restore/consumer_restore.cpp | 34 | ||||
-rw-r--r-- | ndb/tools/restore/consumer_restore.hpp | 4 | ||||
-rw-r--r-- | ndb/tools/restore/consumer_restorem.cpp | 17 | ||||
-rw-r--r-- | ndb/tools/restore/restore_main.cpp | 18 | ||||
-rw-r--r-- | ndb/tools/select_all.cpp | 68 | ||||
-rw-r--r-- | ndb/tools/select_count.cpp | 50 | ||||
-rw-r--r-- | ndb/tools/waiter.cpp | 15 |
17 files changed, 227 insertions, 183 deletions
diff --git a/ndb/tools/Makefile.am b/ndb/tools/Makefile.am index 795441380a8..17b71f7e33c 100644 --- a/ndb/tools/Makefile.am +++ b/ndb/tools/Makefile.am @@ -30,12 +30,14 @@ ndb_restore_SOURCES = restore/restore_main.cpp \ restore/consumer.cpp \ restore/consumer_restore.cpp \ restore/consumer_printer.cpp \ - restore/Restore.cpp $(tools_common_sources) + restore/Restore.cpp \ + ../test/src/NDBT_ResultRow.cpp $(tools_common_sources) ndb_config_SOURCES = ndb_config.cpp \ ../src/mgmsrv/Config.cpp \ ../src/mgmsrv/ConfigInfo.cpp \ ../src/mgmsrv/InitConfigFileParser.cpp + ndb_config_CXXFLAGS = -I$(top_srcdir)/ndb/src/mgmapi \ -I$(top_srcdir)/ndb/src/mgmsrv \ -I$(top_srcdir)/ndb/include/mgmcommon \ diff --git a/ndb/tools/delete_all.cpp b/ndb/tools/delete_all.cpp index 21e0c2ac089..2c395a67900 100644 --- a/ndb/tools/delete_all.cpp +++ b/ndb/tools/delete_all.cpp @@ -44,35 +44,37 @@ static void usage() my_print_help(my_long_options); my_print_variables(my_long_options); } -static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument) -{ - return ndb_std_get_one_option(optid, opt, argument ? argument : - "d:t:O,/tmp/ndb_delete_all.trace"); -} int main(int argc, char** argv){ NDB_INIT(argv[0]); const char *load_default_groups[]= { "mysql_cluster",0 }; load_defaults("my",load_default_groups,&argc,&argv); int ho_error; - if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option))) +#ifndef DBUG_OFF + opt_debug= "d:t:O,/tmp/ndb_delete_all.trace"; +#endif + if ((ho_error=handle_options(&argc, &argv, my_long_options, + ndb_std_get_one_option))) return NDBT_ProgramExit(NDBT_WRONGARGS); - Ndb::setConnectString(opt_connect_str); - // Connect to Ndb - Ndb MyNdb(_dbname); + Ndb_cluster_connection con(opt_connect_str); + if(con.connect(12, 5, 1) != 0) + { + ndbout << "Unable to connect to management server." << endl; + return NDBT_ProgramExit(NDBT_FAILED); + } + if (con.wait_until_ready(30,0) < 0) + { + ndbout << "Cluster nodes not ready in 30 seconds." << endl; + return NDBT_ProgramExit(NDBT_FAILED); + } + Ndb MyNdb(&con, _dbname ); if(MyNdb.init() != 0){ ERR(MyNdb.getNdbError()); return NDBT_ProgramExit(NDBT_FAILED); } - // Connect to Ndb and wait for it to become ready - while(MyNdb.waitUntilReady() != 0) - ndbout << "Waiting for ndb to become ready..." << endl; - // Check if table exists in db int res = NDBT_OK; for(int i = 0; i<argc; i++){ @@ -99,7 +101,7 @@ int clear_table(Ndb* pNdb, const NdbDictionary::Table* pTab, int parallelism) const int retryMax = 10; int deletedRows = 0; int check; - NdbConnection *pTrans; + NdbTransaction *pTrans; NdbScanOperation *pOp; NdbError err; @@ -128,12 +130,11 @@ int clear_table(Ndb* pNdb, const NdbDictionary::Table* pTab, int parallelism) goto failed; } - NdbResultSet * rs = pOp->readTuplesExclusive(par); - if( rs == 0 ) { + if( pOp->readTuples(NdbOperation::LM_Exclusive,par) ) { goto failed; } - if(pTrans->execute(NoCommit) != 0){ + if(pTrans->execute(NdbTransaction::NoCommit) != 0){ err = pTrans->getNdbError(); if(err.status == NdbError::TemporaryError){ ERR(err); @@ -144,16 +145,16 @@ int clear_table(Ndb* pNdb, const NdbDictionary::Table* pTab, int parallelism) goto failed; } - while((check = rs->nextResult(true)) == 0){ + while((check = pOp->nextResult(true)) == 0){ do { - if (rs->deleteTuple() != 0){ + if (pOp->deleteCurrentTuple() != 0){ goto failed; } deletedRows++; - } while((check = rs->nextResult(false)) == 0); + } while((check = pOp->nextResult(false)) == 0); if(check != -1){ - check = pTrans->execute(Commit); + check = pTrans->execute(NdbTransaction::Commit); pTrans->restart(); } diff --git a/ndb/tools/desc.cpp b/ndb/tools/desc.cpp index aac47c9042c..be0f6942db5 100644 --- a/ndb/tools/desc.cpp +++ b/ndb/tools/desc.cpp @@ -44,35 +44,38 @@ static void usage() my_print_help(my_long_options); my_print_variables(my_long_options); } -static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument) -{ - return ndb_std_get_one_option(optid, opt, argument ? argument : - "d:t:O,/tmp/ndb_desc.trace"); -} int main(int argc, char** argv){ NDB_INIT(argv[0]); const char *load_default_groups[]= { "mysql_cluster",0 }; load_defaults("my",load_default_groups,&argc,&argv); int ho_error; - if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option))) +#ifndef DBUG_OFF + opt_debug= "d:t:O,/tmp/ndb_desc.trace"; +#endif + if ((ho_error=handle_options(&argc, &argv, my_long_options, + ndb_std_get_one_option))) return NDBT_ProgramExit(NDBT_WRONGARGS); - Ndb::setConnectString(opt_connect_str); - - Ndb* pMyNdb; - pMyNdb = new Ndb(_dbname); - pMyNdb->init(); - - ndbout << "Waiting..."; - while (pMyNdb->waitUntilReady() != 0) { - ndbout << "..."; + Ndb_cluster_connection con(opt_connect_str); + if(con.connect(12, 5, 1) != 0) + { + ndbout << "Unable to connect to management server." << endl; + return NDBT_ProgramExit(NDBT_FAILED); + } + if (con.wait_until_ready(30,0) < 0) + { + ndbout << "Cluster nodes not ready in 30 seconds." << endl; + return NDBT_ProgramExit(NDBT_FAILED); } - ndbout << endl; - NdbDictionary::Dictionary * dict = pMyNdb->getDictionary(); + Ndb MyNdb(&con, _dbname); + if(MyNdb.init() != 0){ + ERR(MyNdb.getNdbError()); + return NDBT_ProgramExit(NDBT_FAILED); + } + + const NdbDictionary::Dictionary * dict= MyNdb.getDictionary(); for (int i = 0; i < argc; i++) { NDBT_Table* pTab = (NDBT_Table*)dict->getTable(argv[i]); if (pTab != 0){ @@ -112,6 +115,5 @@ int main(int argc, char** argv){ ndbout << argv[i] << ": " << dict->getNdbError() << endl; } - delete pMyNdb; return NDBT_ProgramExit(NDBT_OK); } diff --git a/ndb/tools/drop_index.cpp b/ndb/tools/drop_index.cpp index 69c8345fdb6..24116f22784 100644 --- a/ndb/tools/drop_index.cpp +++ b/ndb/tools/drop_index.cpp @@ -41,37 +41,40 @@ static void usage() my_print_help(my_long_options); my_print_variables(my_long_options); } -static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument) -{ - return ndb_std_get_one_option(optid, opt, argument ? argument : - "d:t:O,/tmp/ndb_drop_index.trace"); -} int main(int argc, char** argv){ NDB_INIT(argv[0]); const char *load_default_groups[]= { "mysql_cluster",0 }; load_defaults("my",load_default_groups,&argc,&argv); int ho_error; - if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option))) +#ifndef DBUG_OFF + "d:t:O,/tmp/ndb_drop_index.trace"; +#endif + if ((ho_error=handle_options(&argc, &argv, my_long_options, + ndb_std_get_one_option))) return NDBT_ProgramExit(NDBT_WRONGARGS); if (argc < 1) { usage(); return NDBT_ProgramExit(NDBT_WRONGARGS); } - Ndb::setConnectString(opt_connect_str); - // Connect to Ndb - Ndb MyNdb(_dbname); + Ndb_cluster_connection con(opt_connect_str); + if(con.connect(12, 5, 1) != 0) + { + return NDBT_ProgramExit(NDBT_FAILED); + } + if (con.wait_until_ready(30,3) < 0) + { + ndbout << "Cluster nodes not ready in 30 seconds." << endl; + return NDBT_ProgramExit(NDBT_FAILED); + } + + Ndb MyNdb(&con, _dbname ); if(MyNdb.init() != 0){ ERR(MyNdb.getNdbError()); return NDBT_ProgramExit(NDBT_FAILED); } - while(MyNdb.waitUntilReady() != 0) - ndbout << "Waiting for ndb to become ready..." << endl; - int res = 0; for(int i = 0; i+1<argc; i += 2){ ndbout << "Dropping index " << argv[i] << "/" << argv[i+1] << "..."; diff --git a/ndb/tools/drop_tab.cpp b/ndb/tools/drop_tab.cpp index 091db5cc4b7..991e1505486 100644 --- a/ndb/tools/drop_tab.cpp +++ b/ndb/tools/drop_tab.cpp @@ -41,36 +41,41 @@ static void usage() my_print_help(my_long_options); my_print_variables(my_long_options); } -static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument) -{ - return ndb_std_get_one_option(optid, opt, argument ? argument : - "d:t:O,/tmp/ndb_drop_table.trace"); -} int main(int argc, char** argv){ NDB_INIT(argv[0]); const char *load_default_groups[]= { "mysql_cluster",0 }; load_defaults("my",load_default_groups,&argc,&argv); int ho_error; - if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option))) +#ifndef DBUG_OFF + "d:t:O,/tmp/ndb_drop_table.trace"; +#endif + if ((ho_error=handle_options(&argc, &argv, my_long_options, + ndb_std_get_one_option))) return NDBT_ProgramExit(NDBT_WRONGARGS); if (argc < 1) { usage(); return NDBT_ProgramExit(NDBT_WRONGARGS); } - Ndb::setConnectString(opt_connect_str); - Ndb MyNdb(_dbname); + Ndb_cluster_connection con(opt_connect_str); + if(con.connect(12, 5, 1) != 0) + { + ndbout << "Unable to connect to management server." << endl; + return NDBT_ProgramExit(NDBT_FAILED); + } + if (con.wait_until_ready(30,3) < 0) + { + ndbout << "Cluster nodes not ready in 30 seconds." << endl; + return NDBT_ProgramExit(NDBT_FAILED); + } + + Ndb MyNdb(&con, _dbname ); if(MyNdb.init() != 0){ ERR(MyNdb.getNdbError()); return NDBT_ProgramExit(NDBT_FAILED); } - while(MyNdb.waitUntilReady() != 0) - ndbout << "Waiting for ndb to become ready..." << endl; - int res = 0; for(int i = 0; i<argc; i++){ ndbout << "Dropping table " << argv[i] << "..."; diff --git a/ndb/tools/listTables.cpp b/ndb/tools/listTables.cpp index eb0c1c53c2d..fa078f7d351 100644 --- a/ndb/tools/listTables.cpp +++ b/ndb/tools/listTables.cpp @@ -29,7 +29,7 @@ static Ndb_cluster_connection *ndb_cluster_connection= 0; static Ndb* ndb = 0; -static NdbDictionary::Dictionary* dic = 0; +static const NdbDictionary::Dictionary * dic = 0; static int _unqualified = 0; static void @@ -199,13 +199,6 @@ static void usage() my_print_help(my_long_options); my_print_variables(my_long_options); } -static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument) -{ - return ndb_std_get_one_option(optid, opt, argument ? argument : - "d:t:O,/tmp/ndb_show_tables.trace"); -} int main(int argc, char** argv){ NDB_INIT(argv[0]); @@ -213,22 +206,29 @@ int main(int argc, char** argv){ const char *load_default_groups[]= { "mysql_cluster",0 }; load_defaults("my",load_default_groups,&argc,&argv); int ho_error; - if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option))) +#ifndef DBUG_OFF + opt_debug= "d:t:O,/tmp/ndb_show_tables.trace"; +#endif + if ((ho_error=handle_options(&argc, &argv, my_long_options, + ndb_std_get_one_option))) return NDBT_ProgramExit(NDBT_WRONGARGS); _tabname = argv[0]; ndb_cluster_connection = new Ndb_cluster_connection(opt_connect_str); if (ndb_cluster_connection->connect(12,5,1)) - fatal("unable to connect"); + fatal("Unable to connect to management server."); + if (ndb_cluster_connection->wait_until_ready(30,0) < 0) + fatal("Cluster nodes not ready in 30 seconds."); + ndb = new Ndb(ndb_cluster_connection, _dbname); if (ndb->init() != 0) fatal("init"); - if (ndb->waitUntilReady(30) < 0) - fatal("waitUntilReady"); dic = ndb->getDictionary(); for (int i = 0; _loops == 0 || i < _loops; i++) { list(_tabname, (NdbDictionary::Object::Type)_type); } + delete ndb; + delete ndb_cluster_connection; return NDBT_ProgramExit(NDBT_OK); } diff --git a/ndb/tools/ndb_test_platform.cpp b/ndb/tools/ndb_test_platform.cpp index 72dd146dacd..88f21b31d58 100644 --- a/ndb/tools/ndb_test_platform.cpp +++ b/ndb/tools/ndb_test_platform.cpp @@ -33,14 +33,14 @@ int test_snprintf(const char * fmt, int buf_sz, int result) if(ret < 0) { printf("BaseString::snprint returns %d with size=%d and strlen(fmt)=%d\n", - ret, buf_sz, strlen(fmt)); + ret, buf_sz, (int) strlen(fmt)); return -1; } if(ret+1 == buf_sz) { printf("BaseString::snprint truncates returns %d with size=%d and strlen(fmt)=%d\n", - ret, buf_sz, strlen(fmt)); + ret, buf_sz, (int) strlen(fmt)); return -1; } @@ -87,7 +87,7 @@ main(void) if (sizeof(UintPtr) != sizeof(Uint32*)) { printf("sizeof(UintPtr)=%d != sizeof(Uint32*)=%d\n", - sizeof(UintPtr), sizeof(Uint32*)); + (int) sizeof(UintPtr), (int) sizeof(Uint32*)); return -1; } diff --git a/ndb/tools/restore/Restore.cpp b/ndb/tools/restore/Restore.cpp index 79df49c6f26..6ac06f8a6f8 100644 --- a/ndb/tools/restore/Restore.cpp +++ b/ndb/tools/restore/Restore.cpp @@ -646,7 +646,7 @@ bool RestoreDataIterator::readFragmentHeader(int & ret) } info << "_____________________________________________________" << endl - << "Restoring data in table: " << m_currentTable->getTableName() + << "Processing data in table: " << m_currentTable->getTableName() << "(" << Header.TableId << ") fragment " << Header.FragmentNo << endl; @@ -925,19 +925,12 @@ operator<<(NdbOut& ndbout, const LogEntry& logE) return ndbout; } +#include <NDBT.hpp> NdbOut & operator<<(NdbOut& ndbout, const TableS & table){ - ndbout << endl << "Table: " << table.getTableName() << endl; - for (int j = 0; j < table.getNoOfAttributes(); j++) - { - const AttributeDesc * desc = table[j]; - ndbout << desc->m_column->getName() << ": " - << (Uint32) desc->m_column->getType(); - ndbout << " key: " << (Uint32) desc->m_column->getPrimaryKey(); - ndbout << " array: " << desc->arraySize; - ndbout << " size: " << desc->size << endl; - } // for + + ndbout << (* (NDBT_Table*)table.m_dictTable) << endl; return ndbout; } diff --git a/ndb/tools/restore/consumer.cpp b/ndb/tools/restore/consumer.cpp index ecbdbbf8f4e..b130c4998d5 100644 --- a/ndb/tools/restore/consumer.cpp +++ b/ndb/tools/restore/consumer.cpp @@ -45,9 +45,11 @@ BackupConsumer::create_table_string(const TableS & table, pos += sprintf(buf+pos, "%s", "float"); break; case NdbDictionary::Column::Olddecimal: + case NdbDictionary::Column::Decimal: pos += sprintf(buf+pos, "%s", "decimal"); break; case NdbDictionary::Column::Olddecimalunsigned: + case NdbDictionary::Column::Decimalunsigned: pos += sprintf(buf+pos, "%s", "decimal unsigned"); break; case NdbDictionary::Column::Char: diff --git a/ndb/tools/restore/consumer_printer.hpp b/ndb/tools/restore/consumer_printer.hpp index 7cbc924e364..e47bc56f874 100644 --- a/ndb/tools/restore/consumer_printer.hpp +++ b/ndb/tools/restore/consumer_printer.hpp @@ -29,6 +29,8 @@ public: m_print_log = false; m_print_data = false; m_print_meta = false; + m_logCount = 0; + m_dataCount = 0; } virtual bool table(const TableS &); diff --git a/ndb/tools/restore/consumer_restore.cpp b/ndb/tools/restore/consumer_restore.cpp index 70ea7460d78..5786bdac697 100644 --- a/ndb/tools/restore/consumer_restore.cpp +++ b/ndb/tools/restore/consumer_restore.cpp @@ -24,8 +24,9 @@ extern FilteredNdbOut err; extern FilteredNdbOut info; extern FilteredNdbOut debug; -static void callback(int, NdbConnection*, void*); +static void callback(int, NdbTransaction*, void*); +extern const char * g_connect_string; bool BackupRestore::init() { @@ -34,7 +35,13 @@ BackupRestore::init() if (!m_restore && !m_restore_meta) return true; - m_ndb = new Ndb(); + m_cluster_connection = new Ndb_cluster_connection(g_connect_string); + if(m_cluster_connection->connect(12, 5, 1) != 0) + { + return -1; + } + + m_ndb = new Ndb(m_cluster_connection); if (m_ndb == NULL) return false; @@ -80,6 +87,12 @@ void BackupRestore::release() delete [] m_callback; m_callback= 0; } + + if (m_cluster_connection) + { + delete m_cluster_connection; + m_cluster_connection= 0; + } } BackupRestore::~BackupRestore() @@ -204,7 +217,7 @@ BackupRestore::endOfTables(){ NdbDictionary::Dictionary* dict = m_ndb->getDictionary(); for(size_t i = 0; i<m_indexes.size(); i++){ - const NdbTableImpl & indtab = NdbTableImpl::getImpl(* m_indexes[i]); + NdbTableImpl & indtab = NdbTableImpl::getImpl(* m_indexes[i]); BaseString tmp(indtab.m_primaryTable.c_str()); Vector<BaseString> split; @@ -364,7 +377,8 @@ void BackupRestore::tuple_a(restore_callback_t *cb) } // Prepare transaction (the transaction is NOT yet sent to NDB) - cb->connection->executeAsynchPrepare(Commit, &callback, cb); + cb->connection->executeAsynchPrepare(NdbTransaction::Commit, + &callback, cb); m_transactions++; return; } @@ -494,7 +508,7 @@ BackupRestore::logEntry(const LogEntry & tup) if (!m_restore) return; - NdbConnection * trans = m_ndb->startTransaction(); + NdbTransaction * trans = m_ndb->startTransaction(); if (trans == NULL) { // Deep shit, TODO: handle the error @@ -564,7 +578,7 @@ BackupRestore::logEntry(const LogEntry & tup) } // if } - const int ret = trans->execute(Commit); + const int ret = trans->execute(NdbTransaction::Commit); if (ret != 0) { // Both insert update and delete can fail during log running @@ -612,12 +626,12 @@ BackupRestore::endOfLogEntrys() * * (This function must have three arguments: * - The result of the transaction, - * - The NdbConnection object, and + * - The NdbTransaction object, and * - A pointer to an arbitrary object.) */ static void -callback(int result, NdbConnection* trans, void* aObject) +callback(int result, NdbTransaction* trans, void* aObject) { restore_callback_t *cb = (restore_callback_t *)aObject; (cb->restore)->cback(result, cb); @@ -631,7 +645,7 @@ BackupRestore::tuple(const TupleS & tup) return; while (1) { - NdbConnection * trans = m_ndb->startTransaction(); + NdbTransaction * trans = m_ndb->startTransaction(); if (trans == NULL) { // Deep shit, TODO: handle the error @@ -682,7 +696,7 @@ BackupRestore::tuple(const TupleS & tup) else op->setValue(i, dataPtr, length); } - int ret = trans->execute(Commit); + int ret = trans->execute(NdbTransaction::Commit); if (ret != 0) { ndbout << "execute failed: "; diff --git a/ndb/tools/restore/consumer_restore.hpp b/ndb/tools/restore/consumer_restore.hpp index df219cd4412..1bf6d89a912 100644 --- a/ndb/tools/restore/consumer_restore.hpp +++ b/ndb/tools/restore/consumer_restore.hpp @@ -22,7 +22,7 @@ struct restore_callback_t { class BackupRestore *restore; class TupleS tup; - class NdbConnection *connection; + class NdbTransaction *connection; int retries; int error_code; restore_callback_t *next; @@ -35,6 +35,7 @@ public: BackupRestore(Uint32 parallelism=1) { m_ndb = 0; + m_cluster_connection = 0; m_logCount = m_dataCount = 0; m_restore = false; m_restore_meta = false; @@ -62,6 +63,7 @@ public: virtual bool finalize_table(const TableS &); void connectToMysql(); Ndb * m_ndb; + Ndb_cluster_connection * m_cluster_connection; bool m_restore; bool m_restore_meta; Uint32 m_logCount; diff --git a/ndb/tools/restore/consumer_restorem.cpp b/ndb/tools/restore/consumer_restorem.cpp index 6a9ec07148a..56179a60ab0 100644 --- a/ndb/tools/restore/consumer_restorem.cpp +++ b/ndb/tools/restore/consumer_restorem.cpp @@ -21,8 +21,8 @@ extern FilteredNdbOut err; extern FilteredNdbOut info; extern FilteredNdbOut debug; -static bool asynchErrorHandler(NdbConnection * trans, Ndb * ndb); -static void callback(int result, NdbConnection* trans, void* aObject); +static bool asynchErrorHandler(NdbTransaction * trans, Ndb * ndb); +static void callback(int result, NdbTransaction* trans, void* aObject); bool BackupRestore::init() @@ -80,6 +80,7 @@ BackupRestore::init() ndbout_c("Connect failed: %s", mysql_error(&mysql)); returnValue = false; } + mysql.reconnect= 1; ndbout << "Connected to MySQL!!!" <<endl; } @@ -370,7 +371,7 @@ BackupRestore::tuple(const TupleS & tup) return; while (1) { - NdbConnection * trans = m_ndb->startTransaction(); + NdbTransaction * trans = m_ndb->startTransaction(); if (trans == NULL) { // Deep shit, TODO: handle the error @@ -459,7 +460,7 @@ BackupRestore::logEntry(const LogEntry & tup) if (!m_restore) return; - NdbConnection * trans = m_ndb->startTransaction(); + NdbTransaction * trans = m_ndb->startTransaction(); if (trans == NULL) { // Deep shit, TODO: handle the error @@ -550,7 +551,7 @@ BackupRestore::endOfLogEntrys() * ******************************************/ static void restoreCallback(int result, // Result for transaction - NdbConnection *object, // Transaction object + NdbTransaction *object, // Transaction object void *anything) // Not used { static Uint32 counter = 0; @@ -592,12 +593,12 @@ static void restoreCallback(int result, // Result for transaction * * (This function must have three arguments: * - The result of the transaction, - * - The NdbConnection object, and + * - The NdbTransaction object, and * - A pointer to an arbitrary object.) */ static void -callback(int result, NdbConnection* trans, void* aObject) +callback(int result, NdbTransaction* trans, void* aObject) { restore_callback_t *cb = (restore_callback_t *)aObject; (cb->restore)->cback(result, cb); @@ -609,7 +610,7 @@ callback(int result, NdbConnection* trans, void* aObject) * false if it is an error that generates an abort. */ static -bool asynchErrorHandler(NdbConnection * trans, Ndb* ndb) +bool asynchErrorHandler(NdbTransaction * trans, Ndb* ndb) { NdbError error = trans->getNdbError(); ndb->closeTransaction(trans); diff --git a/ndb/tools/restore/restore_main.cpp b/ndb/tools/restore/restore_main.cpp index d786dffe89e..af7c751fb67 100644 --- a/ndb/tools/restore/restore_main.cpp +++ b/ndb/tools/restore/restore_main.cpp @@ -110,8 +110,10 @@ static my_bool get_one_option(int optid, const struct my_option *opt __attribute__((unused)), char *argument) { - ndb_std_get_one_option(optid, opt, argument ? argument : - "d:t:O,/tmp/ndb_restore.trace"); +#ifndef DBUG_OFF + opt_debug= "d:t:O,/tmp/ndb_restore.trace"; +#endif + ndb_std_get_one_option(optid, opt, argument); switch (optid) { case 'n': if (ga_nodeId == 0) @@ -227,6 +229,7 @@ free_data_callback() g_consumers[i]->tuple_free(); } +const char * g_connect_string = 0; static void exitHandler(int code) { NDBT_ProgramExit(code); @@ -246,7 +249,7 @@ main(int argc, char** argv) exitHandler(NDBT_FAILED); } - Ndb::setConnectString(opt_connect_str); + g_connect_string = opt_connect_str; /** * we must always load meta data, even if we will only print it to stdout @@ -324,7 +327,7 @@ main(int argc, char** argv) if (ga_restore || ga_print) { - if (ga_restore) + if(_restore_data || _print_data) { RestoreDataIterator dataIter(metaData, &free_data_callback); @@ -371,7 +374,10 @@ main(int argc, char** argv) for (i= 0; i < g_consumers.size(); i++) g_consumers[i]->endOfTuples(); + } + if(_restore_data || _print_log) + { RestoreLogIterator logIter(metaData); if (!logIter.readHeader()) { @@ -395,6 +401,10 @@ main(int argc, char** argv) logIter.validateFooter(); //not implemented for (i= 0; i < g_consumers.size(); i++) g_consumers[i]->endOfLogEntrys(); + } + + if(_restore_data) + { for(i = 0; i<metaData.getNoOfTables(); i++) { if (checkSysTable(metaData[i]->getTableName())) diff --git a/ndb/tools/select_all.cpp b/ndb/tools/select_all.cpp index 23fd2290349..baa18db1ebd 100644 --- a/ndb/tools/select_all.cpp +++ b/ndb/tools/select_all.cpp @@ -24,7 +24,6 @@ #include <NdbMain.h> #include <NDBT.hpp> #include <NdbSleep.h> -#include <NdbScanFilter.hpp> int scanReadRecords(Ndb*, const NdbDictionary::Table*, @@ -34,14 +33,15 @@ int scanReadRecords(Ndb*, bool headers, bool useHexFormat, char delim, - bool orderby); + bool orderby, + bool descending); NDB_STD_OPTS_VARS; static const char* _dbname = "TEST_DB"; static const char* _delimiter = "\t"; static int _unqualified, _header, _parallelism, _useHexFormat, _lock, - _order; + _order, _descending; static struct my_option my_long_options[] = { @@ -58,6 +58,9 @@ static struct my_option my_long_options[] = { "order", 'o', "Sort resultset according to index", (gptr*) &_order, (gptr*) &_order, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, + { "descending", 'z', "Sort descending (requires order flag)", + (gptr*) &_descending, (gptr*) &_descending, 0, + GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, { "header", 'h', "Print header", (gptr*) &_header, (gptr*) &_header, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0 }, @@ -82,13 +85,6 @@ static void usage() my_print_help(my_long_options); my_print_variables(my_long_options); } -static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument) -{ - return ndb_std_get_one_option(optid, opt, argument ? argument : - "d:t:O,/tmp/ndb_select_all.trace"); -} int main(int argc, char** argv){ NDB_INIT(argv[0]); @@ -96,26 +92,35 @@ int main(int argc, char** argv){ load_defaults("my",load_default_groups,&argc,&argv); const char* _tabname; int ho_error; - if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option))) +#ifndef DBUG_OFF + opt_debug= "d:t:O,/tmp/ndb_select_all.trace"; +#endif + if ((ho_error=handle_options(&argc, &argv, my_long_options, + ndb_std_get_one_option))) return NDBT_ProgramExit(NDBT_WRONGARGS); if ((_tabname = argv[0]) == 0) { usage(); return NDBT_ProgramExit(NDBT_WRONGARGS); } - Ndb::setConnectString(opt_connect_str); - // Connect to Ndb - Ndb MyNdb(_dbname); + Ndb_cluster_connection con(opt_connect_str); + if(con.connect(12, 5, 1) != 0) + { + ndbout << "Unable to connect to management server." << endl; + return NDBT_ProgramExit(NDBT_FAILED); + } + if (con.wait_until_ready(30,0) < 0) + { + ndbout << "Cluster nodes not ready in 30 seconds." << endl; + return NDBT_ProgramExit(NDBT_FAILED); + } + Ndb MyNdb(&con, _dbname ); if(MyNdb.init() != 0){ ERR(MyNdb.getNdbError()); return NDBT_ProgramExit(NDBT_FAILED); } - // Connect to Ndb and wait for it to become ready - while(MyNdb.waitUntilReady() != 0) - ndbout << "Waiting for ndb to become ready..." << endl; - // Check if table exists in db const NdbDictionary::Table* pTab = NDBT_Table::discoverTableFromDb(&MyNdb, _tabname); const NdbDictionary::Index * pIdx = 0; @@ -138,6 +143,11 @@ int main(int argc, char** argv){ return NDBT_ProgramExit(NDBT_WRONGARGS); } + if (_descending && ! _order) { + ndbout << " Descending flag given without order flag" << endl; + return NDBT_ProgramExit(NDBT_WRONGARGS); + } + if (scanReadRecords(&MyNdb, pTab, pIdx, @@ -145,7 +155,7 @@ int main(int argc, char** argv){ _lock, _header, _useHexFormat, - (char)*_delimiter, _order) != 0){ + (char)*_delimiter, _order, _descending) != 0){ return NDBT_ProgramExit(NDBT_FAILED); } @@ -160,12 +170,12 @@ int scanReadRecords(Ndb* pNdb, int _lock, bool headers, bool useHexFormat, - char delimiter, bool order){ + char delimiter, bool order, bool descending){ int retryAttempt = 0; const int retryMax = 100; int check; - NdbConnection *pTrans; + NdbTransaction *pTrans; NdbScanOperation *pOp; NdbIndexScanOperation * pIOp= 0; @@ -202,7 +212,7 @@ int scanReadRecords(Ndb* pNdb, return -1; } - NdbResultSet * rs; + int rs; switch(_lock + (3 * order)){ case 1: rs = pOp->readTuples(NdbScanOperation::LM_Read, 0, parallel); @@ -212,20 +222,20 @@ int scanReadRecords(Ndb* pNdb, break; case 3: rs = pIOp->readTuples(NdbScanOperation::LM_CommittedRead, 0, parallel, - true); + true, descending); break; case 4: - rs = pIOp->readTuples(NdbScanOperation::LM_Read, 0, parallel, true); + rs = pIOp->readTuples(NdbScanOperation::LM_Read, 0, parallel, true, descending); break; case 5: - rs = pIOp->readTuples(NdbScanOperation::LM_Exclusive, 0, parallel, true); + rs = pIOp->readTuples(NdbScanOperation::LM_Exclusive, 0, parallel, true, descending); break; case 0: default: rs = pOp->readTuples(NdbScanOperation::LM_CommittedRead, 0, parallel); break; } - if( rs == 0 ){ + if( rs != 0 ){ ERR(pTrans->getNdbError()); pNdb->closeTransaction(pTrans); return -1; @@ -291,7 +301,7 @@ int scanReadRecords(Ndb* pNdb, } } - check = pTrans->execute(NoCommit); + check = pTrans->execute(NdbTransaction::NoCommit); if( check == -1 ) { const NdbError err = pTrans->getNdbError(); @@ -311,7 +321,7 @@ int scanReadRecords(Ndb* pNdb, int eof; int rows = 0; - eof = rs->nextResult(); + eof = pOp->nextResult(); while(eof == 0){ rows++; @@ -322,7 +332,7 @@ int scanReadRecords(Ndb* pNdb, ndbout << (*row) << endl; } - eof = rs->nextResult(); + eof = pOp->nextResult(); } if (eof == -1) { const NdbError err = pTrans->getNdbError(); diff --git a/ndb/tools/select_count.cpp b/ndb/tools/select_count.cpp index a9a3e71da67..6fa3c77f15a 100644 --- a/ndb/tools/select_count.cpp +++ b/ndb/tools/select_count.cpp @@ -30,7 +30,7 @@ static int select_count(Ndb* pNdb, const NdbDictionary::Table* pTab, int parallelism, int* count_rows, - UtilTransactions::ScanLock lock); + NdbOperation::LockMode lock); NDB_STD_OPTS_VARS; @@ -60,39 +60,41 @@ static void usage() my_print_help(my_long_options); my_print_variables(my_long_options); } -static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument) -{ - return ndb_std_get_one_option(optid, opt, argument ? argument : - "d:t:O,/tmp/ndb_select_count.trace"); -} int main(int argc, char** argv){ NDB_INIT(argv[0]); const char *load_default_groups[]= { "mysql_cluster",0 }; load_defaults("my",load_default_groups,&argc,&argv); int ho_error; - if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option))) +#ifndef DBUG_OFF + opt_debug= "d:t:O,/tmp/ndb_select_count.trace"; +#endif + if ((ho_error=handle_options(&argc, &argv, my_long_options, + ndb_std_get_one_option))) return NDBT_ProgramExit(NDBT_WRONGARGS); if (argc < 1) { usage(); return NDBT_ProgramExit(NDBT_WRONGARGS); } - Ndb::setConnectString(opt_connect_str); - // Connect to Ndb - Ndb MyNdb(_dbname); + Ndb_cluster_connection con(opt_connect_str); + if(con.connect(12, 5, 1) != 0) + { + ndbout << "Unable to connect to management server." << endl; + return NDBT_ProgramExit(NDBT_FAILED); + } + if (con.wait_until_ready(30,0) < 0) + { + ndbout << "Cluster nodes not ready in 30 seconds." << endl; + return NDBT_ProgramExit(NDBT_FAILED); + } + Ndb MyNdb(&con, _dbname ); if(MyNdb.init() != 0){ ERR(MyNdb.getNdbError()); return NDBT_ProgramExit(NDBT_FAILED); } - // Connect to Ndb and wait for it to become ready - while(MyNdb.waitUntilReady() != 0) - ndbout << "Waiting for ndb to become ready..." << endl; - for(int i = 0; i<argc; i++){ // Check if table exists in db const NdbDictionary::Table * pTab = NDBT_Table::discoverTableFromDb(&MyNdb, argv[i]); @@ -103,7 +105,7 @@ int main(int argc, char** argv){ int rows = 0; if (select_count(&MyNdb, pTab, _parallelism, &rows, - (UtilTransactions::ScanLock)_lock) != 0){ + (NdbOperation::LockMode)_lock) != 0){ return NDBT_ProgramExit(NDBT_FAILED); } @@ -116,12 +118,12 @@ int select_count(Ndb* pNdb, const NdbDictionary::Table* pTab, int parallelism, int* count_rows, - UtilTransactions::ScanLock lock){ + NdbOperation::LockMode lock){ int retryAttempt = 0; const int retryMax = 100; int check; - NdbConnection *pTrans; + NdbTransaction *pTrans; NdbScanOperation *pOp; while (true){ @@ -151,8 +153,7 @@ select_count(Ndb* pNdb, const NdbDictionary::Table* pTab, return NDBT_FAILED; } - NdbResultSet * rs = pOp->readTuples(NdbScanOperation::LM_Dirty); - if( rs == 0 ) { + if( pOp->readTuples(NdbScanOperation::LM_Dirty) ) { ERR(pTrans->getNdbError()); pNdb->closeTransaction(pTrans); return NDBT_FAILED; @@ -167,9 +168,10 @@ select_count(Ndb* pNdb, const NdbDictionary::Table* pTab, } Uint64 tmp; + Uint32 row_size; pOp->getValue(NdbDictionary::Column::ROW_COUNT, (char*)&tmp); - - check = pTrans->execute(NoCommit); + pOp->getValue(NdbDictionary::Column::ROW_SIZE, (char*)&row_size); + check = pTrans->execute(NdbTransaction::NoCommit); if( check == -1 ) { ERR(pTrans->getNdbError()); pNdb->closeTransaction(pTrans); @@ -178,7 +180,7 @@ select_count(Ndb* pNdb, const NdbDictionary::Table* pTab, Uint64 row_count = 0; int eof; - while((eof = rs->nextResult(true)) == 0){ + while((eof = pOp->nextResult(true)) == 0){ row_count += tmp; } diff --git a/ndb/tools/waiter.cpp b/ndb/tools/waiter.cpp index cc6a21428c8..db90bd8bd90 100644 --- a/ndb/tools/waiter.cpp +++ b/ndb/tools/waiter.cpp @@ -60,24 +60,19 @@ static void usage() my_print_variables(my_long_options); } -static my_bool -get_one_option(int optid, const struct my_option *opt __attribute__((unused)), - char *argument) -{ - return ndb_std_get_one_option(optid, opt, argument ? argument : - "d:t:O,/tmp/ndb_drop_table.trace"); -} - int main(int argc, char** argv){ NDB_INIT(argv[0]); const char *load_default_groups[]= { "mysql_cluster",0 }; load_defaults("my",load_default_groups,&argc,&argv); const char* _hostName = NULL; int ho_error; - if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option))) +#ifndef DBUG_OFF + opt_debug= "d:t:O,/tmp/ndb_waiter.trace"; +#endif + if ((ho_error=handle_options(&argc, &argv, my_long_options, + ndb_std_get_one_option))) return NDBT_ProgramExit(NDBT_WRONGARGS); - char buf[255]; _hostName = argv[0]; if (_hostName == 0) |