summaryrefslogtreecommitdiff
path: root/storage/ndb/tools/delete_all.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'storage/ndb/tools/delete_all.cpp')
-rw-r--r--storage/ndb/tools/delete_all.cpp228
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);
-}