mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 13:02:28 +01:00
Merge pnousiainen@bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/space/pekka/ndb/version/my50
This commit is contained in:
commit
9ccda327a3
2 changed files with 89 additions and 24 deletions
|
@ -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);
|
||||
|
@ -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);
|
||||
CHK(g_con->execute(Commit) == 0);
|
||||
g_ndb->closeTransaction(g_con);
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
CHK(g_con->execute(Commit) == 0);
|
||||
g_ndb->closeTransaction(g_con);
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
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;
|
||||
rows++;
|
||||
while (1) {
|
||||
DBG("deleteScan" << (idx ? "Idx" : "") << " pk1=" << hex << tup.m_pk1);
|
||||
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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -154,8 +166,12 @@ int clear_table(Ndb* pNdb, const NdbDictionary::Table* pTab, int parallelism)
|
|||
} while((check = pOp->nextResult(false)) == 0);
|
||||
|
||||
if(check != -1){
|
||||
check = pTrans->execute(NdbTransaction::Commit);
|
||||
pTrans->restart();
|
||||
if (commit_across_open_cursor) {
|
||||
check = pTrans->execute(NdbTransaction::Commit);
|
||||
pTrans->restart(); // new tx id
|
||||
} else {
|
||||
check = pTrans->execute(NdbTransaction::NoCommit);
|
||||
}
|
||||
}
|
||||
|
||||
err = pTrans->getNdbError();
|
||||
|
@ -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…
Reference in a new issue