mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 05:22:25 +01:00
ndb - post merge 4.1->5.0
This commit is contained in:
parent
850211eb73
commit
48d6d545c0
3 changed files with 38 additions and 78 deletions
|
@ -10,7 +10,7 @@ Next DBTC 8035
|
|||
Next CMVMI 9000
|
||||
Next BACKUP 10022
|
||||
Next DBUTIL 11002
|
||||
Next DBTUX 12007
|
||||
Next DBTUX 12008
|
||||
Next SUMA 13001
|
||||
|
||||
TESTING NODE FAILURE, ARBITRATION
|
||||
|
@ -443,6 +443,7 @@ Test routing of signals:
|
|||
|
||||
Ordered index:
|
||||
--------------
|
||||
12007: Make next alloc node fail with no memory error
|
||||
|
||||
Dbdict:
|
||||
-------
|
||||
|
|
|
@ -184,7 +184,6 @@ ErrorBundle ErrorCodes[] = {
|
|||
{ 826, IS, "Too many tables and attributes (increase MaxNoOfAttributes or MaxNoOfTables)" },
|
||||
{ 827, IS, "Out of memory in Ndb Kernel, table data (increase DataMemory)" },
|
||||
{ 902, IS, "Out of memory in Ndb Kernel, ordered index data (increase DataMemory)" },
|
||||
{ 902, IS, "Out of memory in Ndb Kernel, data part (increase DataMemory)" },
|
||||
{ 903, IS, "Too many ordered indexes (increase MaxNoOfOrderedIndexes)" },
|
||||
{ 904, IS, "Out of fragment records (increase MaxNoOfOrderedIndexes)" },
|
||||
{ 905, IS, "Out of attribute records (increase MaxNoOfAttributes)" },
|
||||
|
|
|
@ -164,6 +164,16 @@ irandom(unsigned n)
|
|||
return i;
|
||||
}
|
||||
|
||||
static bool
|
||||
randompct(unsigned pct)
|
||||
{
|
||||
if (pct == 0)
|
||||
return false;
|
||||
if (pct >= 100)
|
||||
return true;
|
||||
return urandom(100) < pct;
|
||||
}
|
||||
|
||||
// log and error macros
|
||||
|
||||
static NdbMutex *ndbout_mutex = NULL;
|
||||
|
@ -1653,36 +1663,6 @@ createindex(Par par)
|
|||
|
||||
// data sets
|
||||
|
||||
static unsigned
|
||||
urandom(unsigned n)
|
||||
{
|
||||
if (n == 0)
|
||||
return 0;
|
||||
unsigned i = random() % n;
|
||||
return i;
|
||||
}
|
||||
|
||||
static int
|
||||
irandom(unsigned n)
|
||||
{
|
||||
if (n == 0)
|
||||
return 0;
|
||||
int i = random() % n;
|
||||
if (random() & 0x1)
|
||||
i = -i;
|
||||
return i;
|
||||
}
|
||||
|
||||
static bool
|
||||
randompct(unsigned pct)
|
||||
{
|
||||
if (pct == 0)
|
||||
return false;
|
||||
if (pct >= 100)
|
||||
return true;
|
||||
return urandom(100) < pct;
|
||||
}
|
||||
|
||||
// Val - typed column value
|
||||
|
||||
struct Val {
|
||||
|
@ -2659,26 +2639,30 @@ Set::pending(unsigned i, unsigned mask) const
|
|||
}
|
||||
|
||||
void
|
||||
Set::notpending(unsigned i)
|
||||
Set::notpending(unsigned i, ExecType et)
|
||||
{
|
||||
assert(m_row[i] != 0);
|
||||
Row& row = *m_row[i];
|
||||
if (row.m_pending == Row::InsOp) {
|
||||
row.m_exist = true;
|
||||
} else if (row.m_pending == Row::UpdOp) {
|
||||
;
|
||||
} else if (row.m_pending == Row::DelOp) {
|
||||
row.m_exist = false;
|
||||
if (et == Commit) {
|
||||
if (row.m_pending == Row::InsOp)
|
||||
row.m_exist = true;
|
||||
if (row.m_pending == Row::DelOp)
|
||||
row.m_exist = false;
|
||||
} else {
|
||||
if (row.m_pending == Row::InsOp)
|
||||
row.m_exist = false;
|
||||
if (row.m_pending == Row::DelOp)
|
||||
row.m_exist = true;
|
||||
}
|
||||
row.m_pending = Row::NoOp;
|
||||
}
|
||||
|
||||
void
|
||||
Set::notpending(const Lst& lst)
|
||||
Set::notpending(const Lst& lst, ExecType et)
|
||||
{
|
||||
for (unsigned j = 0; j < lst.m_cnt; j++) {
|
||||
unsigned i = lst.m_arr[j];
|
||||
notpending(i);
|
||||
notpending(i, et);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2870,34 +2854,6 @@ Set::putval(unsigned i, bool force, unsigned n)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
Set::notpending(unsigned i, ExecType et)
|
||||
{
|
||||
assert(m_row[i] != 0);
|
||||
Row& row = *m_row[i];
|
||||
if (et == Commit) {
|
||||
if (row.m_pending == Row::InsOp)
|
||||
row.m_exist = true;
|
||||
if (row.m_pending == Row::DelOp)
|
||||
row.m_exist = false;
|
||||
} else {
|
||||
if (row.m_pending == Row::InsOp)
|
||||
row.m_exist = false;
|
||||
if (row.m_pending == Row::DelOp)
|
||||
row.m_exist = true;
|
||||
}
|
||||
row.m_pending = Row::NoOp;
|
||||
}
|
||||
|
||||
void
|
||||
Set::notpending(const Lst& lst, ExecType et)
|
||||
{
|
||||
for (unsigned j = 0; j < lst.m_cnt; j++) {
|
||||
unsigned i = lst.m_arr[j];
|
||||
notpending(i, et);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
Set::verify(Par par, const Set& set2) const
|
||||
{
|
||||
|
@ -3511,6 +3467,7 @@ hashindexupdate(Par par, const ITab& itab)
|
|||
CHK(con.startTransaction() == 0);
|
||||
Lst lst;
|
||||
bool deadlock = false;
|
||||
bool nospace = false;
|
||||
for (unsigned j = 0; j < par.m_rows; j++) {
|
||||
unsigned j2 = ! par.m_randomkey ? j : urandom(par.m_rows);
|
||||
unsigned i = thrrow(par, j2);
|
||||
|
@ -3528,7 +3485,7 @@ hashindexupdate(Par par, const ITab& itab)
|
|||
lst.push(i);
|
||||
if (lst.cnt() == par.m_batch) {
|
||||
deadlock = par.m_deadlock;
|
||||
CHK(con.execute(Commit, deadlock) == 0);
|
||||
CHK(con.execute(Commit, deadlock, nospace) == 0);
|
||||
if (deadlock) {
|
||||
LL1("hashindexupdate: stop on deadlock [at 1]");
|
||||
break;
|
||||
|
@ -3544,9 +3501,9 @@ hashindexupdate(Par par, const ITab& itab)
|
|||
}
|
||||
if (! deadlock && lst.cnt() != 0) {
|
||||
deadlock = par.m_deadlock;
|
||||
CHK(con.execute(Commit, deadlock) == 0);
|
||||
CHK(con.execute(Commit, deadlock, nospace) == 0);
|
||||
if (deadlock) {
|
||||
LL1("hashindexupdate: stop on deadlock [at 1]");
|
||||
LL1("hashindexupdate: stop on deadlock [at 2]");
|
||||
} else {
|
||||
set.lock();
|
||||
set.notpending(lst);
|
||||
|
@ -3567,6 +3524,7 @@ hashindexdelete(Par par, const ITab& itab)
|
|||
CHK(con.startTransaction() == 0);
|
||||
Lst lst;
|
||||
bool deadlock = false;
|
||||
bool nospace = false;
|
||||
for (unsigned j = 0; j < par.m_rows; j++) {
|
||||
unsigned j2 = ! par.m_randomkey ? j : urandom(par.m_rows);
|
||||
unsigned i = thrrow(par, j2);
|
||||
|
@ -3581,7 +3539,7 @@ hashindexdelete(Par par, const ITab& itab)
|
|||
lst.push(i);
|
||||
if (lst.cnt() == par.m_batch) {
|
||||
deadlock = par.m_deadlock;
|
||||
CHK(con.execute(Commit, deadlock) == 0);
|
||||
CHK(con.execute(Commit, deadlock, nospace) == 0);
|
||||
if (deadlock) {
|
||||
LL1("hashindexdelete: stop on deadlock [at 1]");
|
||||
break;
|
||||
|
@ -3596,7 +3554,7 @@ hashindexdelete(Par par, const ITab& itab)
|
|||
}
|
||||
if (! deadlock && lst.cnt() != 0) {
|
||||
deadlock = par.m_deadlock;
|
||||
CHK(con.execute(Commit, deadlock) == 0);
|
||||
CHK(con.execute(Commit, deadlock, nospace) == 0);
|
||||
if (deadlock) {
|
||||
LL1("hashindexdelete: stop on deadlock [at 2]");
|
||||
} else {
|
||||
|
@ -3968,6 +3926,7 @@ scanupdatetable(Par par)
|
|||
CHK(con2.startTransaction() == 0);
|
||||
Lst lst;
|
||||
bool deadlock = false;
|
||||
bool nospace = false;
|
||||
while (1) {
|
||||
int ret;
|
||||
deadlock = par.m_deadlock;
|
||||
|
@ -4003,7 +3962,7 @@ scanupdatetable(Par par)
|
|||
set.unlock();
|
||||
if (lst.cnt() == par.m_batch) {
|
||||
deadlock = par.m_deadlock;
|
||||
CHK(con2.execute(Commit, deadlock) == 0);
|
||||
CHK(con2.execute(Commit, deadlock, nospace) == 0);
|
||||
if (deadlock) {
|
||||
LL1("scanupdatetable: stop on deadlock [at 2]");
|
||||
goto out;
|
||||
|
@ -4020,7 +3979,7 @@ scanupdatetable(Par par)
|
|||
CHK((ret = con.nextScanResult(false)) == 0 || ret == 1 || ret == 2);
|
||||
if (ret == 2 && lst.cnt() != 0) {
|
||||
deadlock = par.m_deadlock;
|
||||
CHK(con2.execute(Commit, deadlock) == 0);
|
||||
CHK(con2.execute(Commit, deadlock, nospace) == 0);
|
||||
if (deadlock) {
|
||||
LL1("scanupdatetable: stop on deadlock [at 3]");
|
||||
goto out;
|
||||
|
@ -4067,6 +4026,7 @@ scanupdateindex(Par par, const ITab& itab, const BSet& bset)
|
|||
CHK(con2.startTransaction() == 0);
|
||||
Lst lst;
|
||||
bool deadlock = false;
|
||||
bool nospace = false;
|
||||
while (1) {
|
||||
int ret;
|
||||
deadlock = par.m_deadlock;
|
||||
|
@ -4102,7 +4062,7 @@ scanupdateindex(Par par, const ITab& itab, const BSet& bset)
|
|||
set.unlock();
|
||||
if (lst.cnt() == par.m_batch) {
|
||||
deadlock = par.m_deadlock;
|
||||
CHK(con2.execute(Commit, deadlock) == 0);
|
||||
CHK(con2.execute(Commit, deadlock, nospace) == 0);
|
||||
if (deadlock) {
|
||||
LL1("scanupdateindex: stop on deadlock [at 2]");
|
||||
goto out;
|
||||
|
@ -4119,7 +4079,7 @@ scanupdateindex(Par par, const ITab& itab, const BSet& bset)
|
|||
CHK((ret = con.nextScanResult(false)) == 0 || ret == 1 || ret == 2);
|
||||
if (ret == 2 && lst.cnt() != 0) {
|
||||
deadlock = par.m_deadlock;
|
||||
CHK(con2.execute(Commit, deadlock) == 0);
|
||||
CHK(con2.execute(Commit, deadlock, nospace) == 0);
|
||||
if (deadlock) {
|
||||
LL1("scanupdateindex: stop on deadlock [at 3]");
|
||||
goto out;
|
||||
|
|
Loading…
Reference in a new issue