mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
ndb - more test of partitioning wrt scans & lock modes
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp: Handle "fragment scan" (scan with distribution key) wrt committed read ndb/test/ndbapi/testPartitioning.cpp: Extend test prg to try differnt lock modes / parallelism parameters
This commit is contained in:
@@ -9818,7 +9818,7 @@ void Dbtc::sendScanTabConf(Signal* signal, ScanRecordPtr scanPtr) {
|
|||||||
ops += 21;
|
ops += 21;
|
||||||
}
|
}
|
||||||
|
|
||||||
Uint32 left = scanPtr.p->scanNoFrag - scanPtr.p->scanNextFragId;
|
int left = scanPtr.p->scanNoFrag - scanPtr.p->scanNextFragId;
|
||||||
Uint32 booked = scanPtr.p->m_booked_fragments_count;
|
Uint32 booked = scanPtr.p->m_booked_fragments_count;
|
||||||
|
|
||||||
ScanTabConf * conf = (ScanTabConf*)&signal->theData[0];
|
ScanTabConf * conf = (ScanTabConf*)&signal->theData[0];
|
||||||
@@ -9835,8 +9835,8 @@ void Dbtc::sendScanTabConf(Signal* signal, ScanRecordPtr scanPtr) {
|
|||||||
ScanFragRecPtr curr = ptr; // Remove while iterating...
|
ScanFragRecPtr curr = ptr; // Remove while iterating...
|
||||||
queued.next(ptr);
|
queued.next(ptr);
|
||||||
|
|
||||||
bool done = curr.p->m_scan_frag_conf_status && (left == booked);
|
bool done = curr.p->m_scan_frag_conf_status && (left <= (int)booked);
|
||||||
if(curr.p->m_scan_frag_conf_status && (booked < left))
|
if(curr.p->m_scan_frag_conf_status && ((int)booked < left))
|
||||||
booked++;
|
booked++;
|
||||||
|
|
||||||
* ops++ = curr.p->m_apiPtr;
|
* ops++ = curr.p->m_apiPtr;
|
||||||
|
@@ -22,17 +22,6 @@
|
|||||||
|
|
||||||
#define GETNDB(ps) ((NDBT_NdbApiStep*)ps)->getNdb()
|
#define GETNDB(ps) ((NDBT_NdbApiStep*)ps)->getNdb()
|
||||||
|
|
||||||
static
|
|
||||||
int runLoadTable(NDBT_Context* ctx, NDBT_Step* step)
|
|
||||||
{
|
|
||||||
int records = ctx->getNumRecords();
|
|
||||||
HugoTransactions hugoTrans(*ctx->getTab());
|
|
||||||
if (hugoTrans.loadTable(GETNDB(step), records) != 0){
|
|
||||||
return NDBT_FAILED;
|
|
||||||
}
|
|
||||||
return NDBT_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
static Uint32 max_dks = 0;
|
static Uint32 max_dks = 0;
|
||||||
|
|
||||||
static
|
static
|
||||||
@@ -238,10 +227,26 @@ run_tests(Ndb* p_ndb, HugoTransactions& hugoTrans, int records)
|
|||||||
return NDBT_FAILED;
|
return NDBT_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(hugoTrans.scanReadRecords(p_ndb, records) != 0)
|
Uint32 abort = 23;
|
||||||
|
for(Uint32 j = 0; j<5; j++){
|
||||||
|
Uint32 parallelism = (j == 1 ? 1 : j * 3);
|
||||||
|
ndbout_c("parallelism: %d", parallelism);
|
||||||
|
if (hugoTrans.scanReadRecords(p_ndb, records, abort, parallelism,
|
||||||
|
NdbOperation::LM_Read) != 0)
|
||||||
{
|
{
|
||||||
return NDBT_FAILED;
|
return NDBT_FAILED;
|
||||||
}
|
}
|
||||||
|
if (hugoTrans.scanReadRecords(p_ndb, records, abort, parallelism,
|
||||||
|
NdbOperation::LM_Exclusive) != 0)
|
||||||
|
{
|
||||||
|
return NDBT_FAILED;
|
||||||
|
}
|
||||||
|
if (hugoTrans.scanReadRecords(p_ndb, records, abort, parallelism,
|
||||||
|
NdbOperation::LM_CommittedRead) != 0)
|
||||||
|
{
|
||||||
|
return NDBT_FAILED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(hugoTrans.clearTable(p_ndb, records) != 0)
|
if(hugoTrans.clearTable(p_ndb, records) != 0)
|
||||||
{
|
{
|
||||||
@@ -297,6 +302,26 @@ run_index_dk(NDBT_Context* ctx, NDBT_Step* step)
|
|||||||
return run_tests(p_ndb, hugoTrans, records);
|
return run_tests(p_ndb, hugoTrans, records);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
run_startHint(NDBT_Context* ctx, NDBT_Step* step)
|
||||||
|
{
|
||||||
|
Ndb* p_ndb = GETNDB(step);
|
||||||
|
int records = ctx->getNumRecords();
|
||||||
|
const NdbDictionary::Table *tab =
|
||||||
|
p_ndb->getDictionary()->getTable(ctx->getTab()->getName());
|
||||||
|
|
||||||
|
if(!tab)
|
||||||
|
return NDBT_OK;
|
||||||
|
|
||||||
|
HugoTransactions hugoTrans(*tab);
|
||||||
|
if (hugoTrans.loadTable(p_ndb, records) != 0)
|
||||||
|
{
|
||||||
|
return NDBT_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NDBT_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
NDBT_TESTSUITE(testPartitioning);
|
NDBT_TESTSUITE(testPartitioning);
|
||||||
TESTCASE("pk_dk",
|
TESTCASE("pk_dk",
|
||||||
@@ -332,6 +357,15 @@ TESTCASE("ordered_index_dk",
|
|||||||
INITIALIZER(run_create_pk_index_drop);
|
INITIALIZER(run_create_pk_index_drop);
|
||||||
INITIALIZER(run_drop_table);
|
INITIALIZER(run_drop_table);
|
||||||
}
|
}
|
||||||
|
TESTCASE("startTransactionHint",
|
||||||
|
"Test startTransactionHint")
|
||||||
|
{
|
||||||
|
TC_PROPERTY("distributionkey", ~0);
|
||||||
|
INITIALIZER(run_drop_table);
|
||||||
|
INITIALIZER(run_create_table);
|
||||||
|
INITIALIZER(run_startHint);
|
||||||
|
INITIALIZER(run_drop_table);
|
||||||
|
}
|
||||||
NDBT_TESTSUITE_END(testPartitioning);
|
NDBT_TESTSUITE_END(testPartitioning);
|
||||||
|
|
||||||
int main(int argc, const char** argv){
|
int main(int argc, const char** argv){
|
||||||
|
Reference in New Issue
Block a user