Loading ndb/test/ndbapi/testBlobs.cpp +63 −19 Original line number Diff line number Diff line Loading @@ -839,9 +839,6 @@ insertPk(int style) CHK(g_con->execute(NoCommit) == 0); CHK(writeBlobData(tup) == 0); } // just another trap if (urandom(10) == 0) CHK(g_con->execute(NoCommit) == 0); if (++n == g_opt.m_batch) { CHK(g_con->execute(Commit) == 0); g_ndb->closeTransaction(g_con); Loading Loading @@ -963,21 +960,31 @@ static int deletePk() { DBG("--- deletePk ---"); unsigned n = 0; CHK((g_con = g_ndb->startTransaction()) != 0); for (unsigned k = 0; k < g_opt.m_rows; k++) { Tup& tup = g_tups[k]; DBG("deletePk pk1=" << hex << tup.m_pk1); CHK((g_con = g_ndb->startTransaction()) != 0); CHK((g_opr = g_con->getNdbOperation(g_opt.m_tname)) != 0); CHK(g_opr->deleteTuple() == 0); CHK(g_opr->equal("PK1", tup.m_pk1) == 0); if (g_opt.m_pk2len != 0) CHK(g_opr->equal("PK2", tup.m_pk2) == 0); if (++n == g_opt.m_batch) { CHK(g_con->execute(Commit) == 0); g_ndb->closeTransaction(g_con); CHK((g_con = g_ndb->startTransaction()) != 0); n = 0; } g_opr = 0; g_con = 0; tup.m_exists = false; } if (n != 0) { CHK(g_con->execute(Commit) == 0); n = 0; } g_ndb->closeTransaction(g_con); g_con = 0; return 0; } Loading Loading @@ -1080,19 +1087,27 @@ static int deleteIdx() { DBG("--- deleteIdx ---"); unsigned n = 0; CHK((g_con = g_ndb->startTransaction()) != 0); for (unsigned k = 0; k < g_opt.m_rows; k++) { Tup& tup = g_tups[k]; DBG("deleteIdx pk1=" << hex << tup.m_pk1); CHK((g_con = g_ndb->startTransaction()) != 0); CHK((g_opx = g_con->getNdbIndexOperation(g_opt.m_x1name, g_opt.m_tname)) != 0); CHK(g_opx->deleteTuple() == 0); CHK(g_opx->equal("PK2", tup.m_pk2) == 0); if (++n == g_opt.m_batch) { CHK(g_con->execute(Commit) == 0); g_ndb->closeTransaction(g_con); CHK((g_con = g_ndb->startTransaction()) != 0); n = 0; } g_opx = 0; g_con = 0; tup.m_exists = false; } if (n != 0) { CHK(g_con->execute(Commit) == 0); n = 0; } return 0; } Loading Loading @@ -1220,20 +1235,49 @@ deleteScan(bool idx) CHK(g_ops->getValue("PK2", tup.m_pk2) != 0); CHK(g_con->execute(NoCommit) == 0); unsigned rows = 0; unsigned n = 0; while (1) { int ret; tup.m_pk1 = (Uint32)-1; memset(tup.m_pk2, 'x', g_opt.m_pk2len); CHK((ret = g_ops->nextResult()) == 0 || ret == 1); CHK((ret = g_ops->nextResult(true)) == 0 || ret == 1); if (ret == 1) break; while (1) { DBG("deleteScan" << (idx ? "Idx" : "") << " pk1=" << hex << tup.m_pk1); CHK(g_ops->deleteCurrentTuple() == 0); CHK(g_con->execute(NoCommit) == 0); Uint32 k = tup.m_pk1 - g_opt.m_pk1off; CHK(k < g_opt.m_rows && g_tups[k].m_exists); g_tups[k].m_exists = false; CHK(g_ops->deleteCurrentTuple() == 0); rows++; tup.m_pk1 = (Uint32)-1; memset(tup.m_pk2, 'x', g_opt.m_pk2len); CHK((ret = g_ops->nextResult(false)) == 0 || ret == 1 || ret == 2); if (++n == g_opt.m_batch || ret == 2) { DBG("execute batch: n=" << n << " ret=" << ret); switch (0) { case 0: // works normally CHK(g_con->execute(NoCommit) == 0); CHK(true || g_con->restart() == 0); break; case 1: // nonsense - g_con is invalid for 2nd batch CHK(g_con->execute(Commit) == 0); CHK(true || g_con->restart() == 0); break; case 2: // DBTC sendSignalErrorRefuseLab CHK(g_con->execute(NoCommit) == 0); CHK(g_con->restart() == 0); break; case 3: // 266 time-out CHK(g_con->execute(Commit) == 0); CHK(g_con->restart() == 0); break; } n = 0; } if (ret == 2) break; } } CHK(g_con->execute(Commit) == 0); g_ndb->closeTransaction(g_con); Loading ndb/tools/delete_all.cpp +26 −5 Original line number Diff line number Diff line Loading @@ -22,7 +22,8 @@ #include <NdbSleep.h> #include <NDBT.hpp> static int clear_table(Ndb* pNdb, const NdbDictionary::Table* pTab, int parallelism=240); static int clear_table(Ndb* pNdb, const NdbDictionary::Table* pTab, bool commit_across_open_cursor, int parallelism=240); NDB_STD_OPTS_VARS; Loading Loading @@ -83,8 +84,18 @@ int main(int argc, char** argv){ ndbout << " Table " << argv[i] << " does not exist!" << endl; return NDBT_ProgramExit(NDBT_WRONGARGS); } // Check if we have any blobs bool commit_across_open_cursor = true; for (int j = 0; j < pTab->getNoOfColumns(); j++) { NdbDictionary::Column::Type t = pTab->getColumn(j)->getType(); if (t == NdbDictionary::Column::Blob || t == NdbDictionary::Column::Text) { commit_across_open_cursor = false; break; } } ndbout << "Deleting all from " << argv[i] << "..."; if(clear_table(&MyNdb, pTab) == NDBT_FAILED){ if(clear_table(&MyNdb, pTab, commit_across_open_cursor) == NDBT_FAILED){ res = NDBT_FAILED; ndbout << "FAILED" << endl; } Loading @@ -93,7 +104,8 @@ int main(int argc, char** argv){ } int clear_table(Ndb* pNdb, const NdbDictionary::Table* pTab, int parallelism) int clear_table(Ndb* pNdb, const NdbDictionary::Table* pTab, bool commit_across_open_cursor, int parallelism) { // Scan all records exclusive and delete // them one by one Loading Loading @@ -154,8 +166,12 @@ int clear_table(Ndb* pNdb, const NdbDictionary::Table* pTab, int parallelism) } while((check = pOp->nextResult(false)) == 0); if(check != -1){ if (commit_across_open_cursor) { check = pTrans->execute(NdbTransaction::Commit); pTrans->restart(); pTrans->restart(); // new tx id } else { check = pTrans->execute(NdbTransaction::NoCommit); } } err = pTrans->getNdbError(); Loading @@ -181,6 +197,11 @@ int clear_table(Ndb* pNdb, const NdbDictionary::Table* pTab, int parallelism) } goto failed; } if (! commit_across_open_cursor && pTrans->execute(NdbTransaction::Commit) != 0) { err = pTrans->getNdbError(); goto failed; } pNdb->closeTransaction(pTrans); return NDBT_OK; } Loading Loading
ndb/test/ndbapi/testBlobs.cpp +63 −19 Original line number Diff line number Diff line Loading @@ -839,9 +839,6 @@ insertPk(int style) CHK(g_con->execute(NoCommit) == 0); CHK(writeBlobData(tup) == 0); } // just another trap if (urandom(10) == 0) CHK(g_con->execute(NoCommit) == 0); if (++n == g_opt.m_batch) { CHK(g_con->execute(Commit) == 0); g_ndb->closeTransaction(g_con); Loading Loading @@ -963,21 +960,31 @@ static int deletePk() { DBG("--- deletePk ---"); unsigned n = 0; CHK((g_con = g_ndb->startTransaction()) != 0); for (unsigned k = 0; k < g_opt.m_rows; k++) { Tup& tup = g_tups[k]; DBG("deletePk pk1=" << hex << tup.m_pk1); CHK((g_con = g_ndb->startTransaction()) != 0); CHK((g_opr = g_con->getNdbOperation(g_opt.m_tname)) != 0); CHK(g_opr->deleteTuple() == 0); CHK(g_opr->equal("PK1", tup.m_pk1) == 0); if (g_opt.m_pk2len != 0) CHK(g_opr->equal("PK2", tup.m_pk2) == 0); if (++n == g_opt.m_batch) { CHK(g_con->execute(Commit) == 0); g_ndb->closeTransaction(g_con); CHK((g_con = g_ndb->startTransaction()) != 0); n = 0; } g_opr = 0; g_con = 0; tup.m_exists = false; } if (n != 0) { CHK(g_con->execute(Commit) == 0); n = 0; } g_ndb->closeTransaction(g_con); g_con = 0; return 0; } Loading Loading @@ -1080,19 +1087,27 @@ static int deleteIdx() { DBG("--- deleteIdx ---"); unsigned n = 0; CHK((g_con = g_ndb->startTransaction()) != 0); for (unsigned k = 0; k < g_opt.m_rows; k++) { Tup& tup = g_tups[k]; DBG("deleteIdx pk1=" << hex << tup.m_pk1); CHK((g_con = g_ndb->startTransaction()) != 0); CHK((g_opx = g_con->getNdbIndexOperation(g_opt.m_x1name, g_opt.m_tname)) != 0); CHK(g_opx->deleteTuple() == 0); CHK(g_opx->equal("PK2", tup.m_pk2) == 0); if (++n == g_opt.m_batch) { CHK(g_con->execute(Commit) == 0); g_ndb->closeTransaction(g_con); CHK((g_con = g_ndb->startTransaction()) != 0); n = 0; } g_opx = 0; g_con = 0; tup.m_exists = false; } if (n != 0) { CHK(g_con->execute(Commit) == 0); n = 0; } return 0; } Loading Loading @@ -1220,20 +1235,49 @@ deleteScan(bool idx) CHK(g_ops->getValue("PK2", tup.m_pk2) != 0); CHK(g_con->execute(NoCommit) == 0); unsigned rows = 0; unsigned n = 0; while (1) { int ret; tup.m_pk1 = (Uint32)-1; memset(tup.m_pk2, 'x', g_opt.m_pk2len); CHK((ret = g_ops->nextResult()) == 0 || ret == 1); CHK((ret = g_ops->nextResult(true)) == 0 || ret == 1); if (ret == 1) break; while (1) { DBG("deleteScan" << (idx ? "Idx" : "") << " pk1=" << hex << tup.m_pk1); CHK(g_ops->deleteCurrentTuple() == 0); CHK(g_con->execute(NoCommit) == 0); Uint32 k = tup.m_pk1 - g_opt.m_pk1off; CHK(k < g_opt.m_rows && g_tups[k].m_exists); g_tups[k].m_exists = false; CHK(g_ops->deleteCurrentTuple() == 0); rows++; tup.m_pk1 = (Uint32)-1; memset(tup.m_pk2, 'x', g_opt.m_pk2len); CHK((ret = g_ops->nextResult(false)) == 0 || ret == 1 || ret == 2); if (++n == g_opt.m_batch || ret == 2) { DBG("execute batch: n=" << n << " ret=" << ret); switch (0) { case 0: // works normally CHK(g_con->execute(NoCommit) == 0); CHK(true || g_con->restart() == 0); break; case 1: // nonsense - g_con is invalid for 2nd batch CHK(g_con->execute(Commit) == 0); CHK(true || g_con->restart() == 0); break; case 2: // DBTC sendSignalErrorRefuseLab CHK(g_con->execute(NoCommit) == 0); CHK(g_con->restart() == 0); break; case 3: // 266 time-out CHK(g_con->execute(Commit) == 0); CHK(g_con->restart() == 0); break; } n = 0; } if (ret == 2) break; } } CHK(g_con->execute(Commit) == 0); g_ndb->closeTransaction(g_con); Loading
ndb/tools/delete_all.cpp +26 −5 Original line number Diff line number Diff line Loading @@ -22,7 +22,8 @@ #include <NdbSleep.h> #include <NDBT.hpp> static int clear_table(Ndb* pNdb, const NdbDictionary::Table* pTab, int parallelism=240); static int clear_table(Ndb* pNdb, const NdbDictionary::Table* pTab, bool commit_across_open_cursor, int parallelism=240); NDB_STD_OPTS_VARS; Loading Loading @@ -83,8 +84,18 @@ int main(int argc, char** argv){ ndbout << " Table " << argv[i] << " does not exist!" << endl; return NDBT_ProgramExit(NDBT_WRONGARGS); } // Check if we have any blobs bool commit_across_open_cursor = true; for (int j = 0; j < pTab->getNoOfColumns(); j++) { NdbDictionary::Column::Type t = pTab->getColumn(j)->getType(); if (t == NdbDictionary::Column::Blob || t == NdbDictionary::Column::Text) { commit_across_open_cursor = false; break; } } ndbout << "Deleting all from " << argv[i] << "..."; if(clear_table(&MyNdb, pTab) == NDBT_FAILED){ if(clear_table(&MyNdb, pTab, commit_across_open_cursor) == NDBT_FAILED){ res = NDBT_FAILED; ndbout << "FAILED" << endl; } Loading @@ -93,7 +104,8 @@ int main(int argc, char** argv){ } int clear_table(Ndb* pNdb, const NdbDictionary::Table* pTab, int parallelism) int clear_table(Ndb* pNdb, const NdbDictionary::Table* pTab, bool commit_across_open_cursor, int parallelism) { // Scan all records exclusive and delete // them one by one Loading Loading @@ -154,8 +166,12 @@ int clear_table(Ndb* pNdb, const NdbDictionary::Table* pTab, int parallelism) } while((check = pOp->nextResult(false)) == 0); if(check != -1){ if (commit_across_open_cursor) { check = pTrans->execute(NdbTransaction::Commit); pTrans->restart(); pTrans->restart(); // new tx id } else { check = pTrans->execute(NdbTransaction::NoCommit); } } err = pTrans->getNdbError(); Loading @@ -181,6 +197,11 @@ int clear_table(Ndb* pNdb, const NdbDictionary::Table* pTab, int parallelism) } goto failed; } if (! commit_across_open_cursor && pTrans->execute(NdbTransaction::Commit) != 0) { err = pTrans->getNdbError(); goto failed; } pNdb->closeTransaction(pTrans); return NDBT_OK; } Loading