diff options
Diffstat (limited to 'storage/ndb/tools/delete_all.cpp')
-rw-r--r-- | storage/ndb/tools/delete_all.cpp | 228 |
1 files changed, 0 insertions, 228 deletions
diff --git a/storage/ndb/tools/delete_all.cpp b/storage/ndb/tools/delete_all.cpp deleted file mode 100644 index 0721c699fb8..00000000000 --- a/storage/ndb/tools/delete_all.cpp +++ /dev/null @@ -1,228 +0,0 @@ -/* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ - -#include <ndb_global.h> -#include <ndb_opts.h> - -#include <NdbOut.hpp> -#include <NdbApi.hpp> -#include <NdbSleep.h> -#include <NDBT.hpp> - -static int clear_table(Ndb* pNdb, const NdbDictionary::Table* pTab, - bool fetch_across_commit, int parallelism=240); - -NDB_STD_OPTS_VARS; - -const char *load_default_groups[]= { "mysql_cluster",0 }; - -static const char* _dbname = "TEST_DB"; -static my_bool _transactional = false; -static my_bool _tupscan = 0; -static my_bool _diskscan = 0; -static struct my_option my_long_options[] = -{ - NDB_STD_OPTS("ndb_desc"), - { "database", 'd', "Name of database table is in", - &_dbname, &_dbname, 0, - GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }, - { "transactional", 't', "Single transaction (may run out of operations)", - &_transactional, &_transactional, 0, - GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, - { "tupscan", 999, "Run tupscan", - &_tupscan, &_tupscan, 0, - GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, - { "diskscan", 999, "Run diskcan", - &_diskscan, &_diskscan, 0, - GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, - { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} -}; -static void usage() -{ -#ifdef NOT_USED - char desc[] = - "tabname\n"\ - "This program will delete all records in the specified table using scan delete.\n"; -#endif - ndb_std_print_version(); - print_defaults(MYSQL_CONFIG_NAME,load_default_groups); - puts(""); - my_print_help(my_long_options); - my_print_variables(my_long_options); -} - -int main(int argc, char** argv){ - NDB_INIT(argv[0]); - load_defaults("my",load_default_groups,&argc,&argv); - int ho_error; -#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_cluster_connection con(opt_connect_str); - con.set_name("ndb_delete_all"); - 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); - } - - // Check if table exists in db - int res = NDBT_OK; - for(int i = 0; i<argc; i++){ - const NdbDictionary::Table * pTab = NDBT_Table::discoverTableFromDb(&MyNdb, argv[i]); - if(pTab == NULL){ - ndbout << " Table " << argv[i] << " does not exist!" << endl; - return NDBT_ProgramExit(NDBT_WRONGARGS); - } - ndbout << "Deleting all from " << argv[i]; - if (! _transactional) - ndbout << " (non-transactional)"; - ndbout << " ..."; - if(clear_table(&MyNdb, pTab, ! _transactional) == NDBT_FAILED){ - res = NDBT_FAILED; - ndbout << "FAILED" << endl; - } - } - return NDBT_ProgramExit(res); -} - - -int clear_table(Ndb* pNdb, const NdbDictionary::Table* pTab, - bool fetch_across_commit, int parallelism) -{ - // Scan all records exclusive and delete - // them one by one - int retryAttempt = 0; - const int retryMax = 10; - int deletedRows = 0; - int check; - NdbTransaction *pTrans; - NdbScanOperation *pOp; - NdbError err; - - int par = parallelism; - while (true){ - restart: - if (retryAttempt++ >= retryMax){ - g_info << "ERROR: has retried this operation " << retryAttempt - << " times, failing!" << endl; - return NDBT_FAILED; - } - - pTrans = pNdb->startTransaction(); - if (pTrans == NULL) { - err = pNdb->getNdbError(); - if (err.status == NdbError::TemporaryError){ - ERR(err); - NdbSleep_MilliSleep(50); - continue; - } - goto failed; - } - - pOp = pTrans->getNdbScanOperation(pTab->getName()); - if (pOp == NULL) { - goto failed; - } - - int flags = 0; - flags |= _tupscan ? NdbScanOperation::SF_TupScan : 0; - flags |= _diskscan ? NdbScanOperation::SF_DiskScan : 0; - if( pOp->readTuples(NdbOperation::LM_Exclusive, - flags, par) ) { - goto failed; - } - - if(pTrans->execute(NdbTransaction::NoCommit) != 0){ - err = pTrans->getNdbError(); - if(err.status == NdbError::TemporaryError){ - ERR(err); - pNdb->closeTransaction(pTrans); - NdbSleep_MilliSleep(50); - continue; - } - goto failed; - } - - while((check = pOp->nextResult(true)) == 0){ - do { - if (pOp->deleteCurrentTuple() != 0){ - goto failed; - } - deletedRows++; - } while((check = pOp->nextResult(false)) == 0); - - if(check != -1){ - if (fetch_across_commit) { - check = pTrans->execute(NdbTransaction::Commit); - pTrans->restart(); // new tx id - } else { - check = pTrans->execute(NdbTransaction::NoCommit); - } - } - - err = pTrans->getNdbError(); - if(check == -1){ - if(err.status == NdbError::TemporaryError){ - ERR(err); - pNdb->closeTransaction(pTrans); - NdbSleep_MilliSleep(50); - par = 1; - goto restart; - } - goto failed; - } - } - if(check == -1){ - err = pTrans->getNdbError(); - if(err.status == NdbError::TemporaryError){ - ERR(err); - pNdb->closeTransaction(pTrans); - NdbSleep_MilliSleep(50); - par = 1; - goto restart; - } - goto failed; - } - if (! fetch_across_commit && - pTrans->execute(NdbTransaction::Commit) != 0) { - err = pTrans->getNdbError(); - goto failed; - } - pNdb->closeTransaction(pTrans); - return NDBT_OK; - } - return NDBT_FAILED; - - failed: - if(pTrans != 0) pNdb->closeTransaction(pTrans); - ERR(err); - return (err.code != 0 ? err.code : NDBT_FAILED); -} |