Skip to content

Commit 6eb78dd

Browse files
RONDB-956: Extended Rate limits and Quota test cases, more debugging
1 parent c2c5fb4 commit 6eb78dd

File tree

5 files changed

+150
-33
lines changed

5 files changed

+150
-33
lines changed

mysql-test/suite/ndb_quota/ndb_quota_commands.result

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ InMemorySize = 2 MByte
1313
DiskSpaceSize = 0 GByte
1414
RatePerSec = 500
1515
MaxTransactionSize = 4
16-
MaxParallelTransactions = 4
16+
MaxParallelTransactions = 3
1717
MaxParallelComplexQueries = 0
1818
Database Quotas for test2
1919
databaseId = 14
@@ -50,7 +50,7 @@ Database Quotas for test
5050
DiskSpaceSize = 0 GByte
5151
RatePerSec = 500
5252
MaxTransactionSize = 4
53-
MaxParallelTransactions = 4
53+
MaxParallelTransactions = 3
5454
MaxParallelComplexQueries = 0
5555

5656
Database Quotas for test2
@@ -108,10 +108,10 @@ b26 CHAR(255) NULL,
108108
b27 CHAR(255) NULL,
109109
b28 VARCHAR(20000) NULL
110110
) engine ndb character set latin1;
111-
CREATE TABLE t2 (a int not null primary key) engine ndb;
112-
INSERT INTO t2 VALUES (1),(2),(3),(4),(5);
111+
CREATE TABLE t2 (a int not null primary key, b int) engine ndb;
112+
INSERT INTO t2 VALUES (1,0),(2,0),(3,0),(4,0),(5,0);
113113
ERROR HY000: Got temporary error 247 'Too many operations in a transaction in database' from NDBCLUSTER
114-
INSERT INTO t2 VALUES (1),(2),(3);
114+
INSERT INTO t2 VALUES (1,0),(2,0),(3,0);
115115
INSERT INTO t1 (pk1,b1,b2,b3,b4,b28) VALUES (0, '0', '0', '0', '0',REPEAT('a', 19000)),(30,'30', '0', '0', '0',REPEAT('a', 19000));
116116
INSERT INTO t1 (pk1,b1,b2,b3,b4,b28) VALUES (1, '0', '0', '0', '0',REPEAT('a', 19000)),(31,'30', '0', '0', '0',REPEAT('a', 19000));
117117
INSERT INTO t1 (pk1,b1,b2,b3,b4,b28) VALUES (2, '0', '0', '0', '0',REPEAT('a', 19000)),(32,'30', '0', '0', '0',REPEAT('a', 19000));
@@ -178,7 +178,7 @@ DROP TABLE t2;
178178
Database Quota Backup command completed
179179
DATABASE QUOTA DROP successfully executed
180180
DATABASE QUOTA DROP successfully executed
181-
Execute DATABASE QUOTA SET test --in-memory-size = 2 --on-disk-size = 0 --rate-per-sec = 500 --max-transaction-size = 4 --max-parallel-transactions = 4 --max-parallel-complex-queries = 0
181+
Execute DATABASE QUOTA SET test --in-memory-size = 2 --on-disk-size = 0 --rate-per-sec = 5 --max-transaction-size = 100 --max-parallel-transactions = 10 --max-parallel-complex-queries = 0
182182
DATABASE QUOTA SET successfully executed
183183
DATABASE QUOTA SET command succeeded for RESTORE
184184
Execute DATABASE QUOTA SET test2 --in-memory-size = 11 --on-disk-size = 0 --rate-per-sec = 1500 --max-transaction-size = 0 --max-parallel-transactions = 0 --max-parallel-complex-queries = 0

mysql-test/suite/ndb_quota/ndb_quota_commands.test

Lines changed: 59 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,10 @@ CREATE TABLE t1 (
6060
b28 VARCHAR(20000) NULL
6161
) engine ndb character set latin1;
6262

63-
CREATE TABLE t2 (a int not null primary key) engine ndb;
63+
CREATE TABLE t2 (a int not null primary key, b int) engine ndb;
6464
--error 1297
65-
INSERT INTO t2 VALUES (1),(2),(3),(4),(5);
66-
INSERT INTO t2 VALUES (1),(2),(3);
65+
INSERT INTO t2 VALUES (1,0),(2,0),(3,0),(4,0),(5,0);
66+
INSERT INTO t2 VALUES (1,0),(2,0),(3,0);
6767

6868
INSERT INTO t1 (pk1,b1,b2,b3,b4,b28) VALUES (0, '0', '0', '0', '0',REPEAT('a', 19000)),(30,'30', '0', '0', '0',REPEAT('a', 19000));
6969
INSERT INTO t1 (pk1,b1,b2,b3,b4,b28) VALUES (1, '0', '0', '0', '0',REPEAT('a', 19000)),(31,'30', '0', '0', '0',REPEAT('a', 19000));
@@ -155,8 +155,6 @@ while ($c)
155155
SELECT * from t2;
156156
dec $c;
157157
}
158-
--enable_result_log
159-
--enable_query_log
160158

161159
connect(mysqld2,127.0.0.1,root,,test,$MASTER_MYPORT1);
162160
connect(mysqld3,127.0.0.1,root,,test,$MASTER_MYPORT1);
@@ -166,30 +164,30 @@ connect(mysqld6,127.0.0.1,root,,test,$MASTER_MYPORT1);
166164

167165
connection default;
168166
BEGIN;
169-
INSERT INTO t2 VALUES (4);
167+
INSERT INTO t2 VALUES (4,0);
170168

171169
connection mysqld2;
172170
BEGIN;
173-
INSERT INTO t2 VALUES (5);
171+
INSERT INTO t2 VALUES (5,0);
174172

175173
connection mysqld3;
176174
BEGIN;
177-
INSERT INTO t2 VALUES (6);
175+
INSERT INTO t2 VALUES (6,0);
178176

179177
connection mysqld4;
180178
BEGIN;
181179
--error 1297
182-
INSERT INTO t2 VALUES (7);
180+
INSERT INTO t2 VALUES (7,0);
183181

184182
connection mysqld5;
185183
BEGIN;
186184
--error 1297
187-
INSERT INTO t2 VALUES (8);
185+
INSERT INTO t2 VALUES (8,0);
188186

189187
connection mysqld6;
190188
BEGIN;
191189
--error 1297
192-
INSERT INTO t2 VALUES (9);
190+
INSERT INTO t2 VALUES (9,0);
193191

194192
connection default;
195193
COMMIT;
@@ -203,6 +201,56 @@ COMMIT;
203201
connection default;
204202
SELECT * FROM t2;
205203

204+
--exec $NDB_MGM -e "DATABASE QUOTA ALTER test --rate-per-sec = 5 --in-memory-size=2 --max-transaction-size=100 --max-parallel-transactions=10"
205+
206+
--error 0,1297
207+
SELECT * from t2;
208+
--error 0,1297
209+
SELECT * from t2;
210+
--error 0,1297
211+
UPDATE t2 SET b = 0 where a = 4;
212+
COMMIT;
213+
214+
connection mysqld2;
215+
--error 0,1297
216+
SELECT * from t2;
217+
--error 0,1297
218+
UPDATE t2 SET b = 0 where a = 5;
219+
COMMIT;
220+
221+
connection mysqld3;
222+
--error 0,1297
223+
SELECT * from t2;
224+
--error 0,1297
225+
UPDATE t2 SET b = 0 where a = 6;
226+
COMMIT;
227+
228+
connection mysqld4;
229+
--error 0,1297
230+
SELECT * from t2;
231+
--error 0,1297
232+
UPDATE t2 SET b = 0 where a = 0;
233+
COMMIT;
234+
235+
connection mysqld5;
236+
--error 0,1297
237+
SELECT * from t2;
238+
--error 0,1297
239+
UPDATE t2 SET b = 0 where a = 1;
240+
COMMIT;
241+
242+
connection mysqld6;
243+
--error 0,1297
244+
SELECT * from t2;
245+
--error 0,1297
246+
UPDATE t2 SET b = 0 where a = 2;
247+
COMMIT;
248+
249+
--enable_result_log
250+
--enable_query_log
251+
252+
connection default;
253+
206254
DROP TABLE t1;
207255
DROP TABLE t2;
208256

storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3795,7 +3795,7 @@ void Dblqh::execTAB_COMMITREQ(Signal *signal) {
37953795
NdbMutex_Unlock(&tabptr.p->m_usage_count);
37963796
#endif
37973797
tabptr.p->usageCountR = 0;
3798-
D(tabptr.i << "Init2 usageCountR = 0");
3798+
D(tabptr.i << "Init2 usageCountR and W = 0");
37993799
tabptr.p->usageCountW = 0;
38003800
tabptr.p->tableStatus = Tablerec::TABLE_DEFINED;
38013801
DEB_SCHEMA_VERSION(
@@ -4118,7 +4118,8 @@ void Dblqh::dropTab_wait_usage(Signal *signal) {
41184118

41194119
if (tabPtr.p->usageCountR > 0 || tabPtr.p->usageCountW > 0) {
41204120
jam();
4121-
D(tabPtr.i << "usageCountR = " << tabPtr.p->usageCountR);
4121+
D(tabPtr.i << "usageCountR = " << tabPtr.p->usageCountR
4122+
<< "usageCountW = " << tabPtr.p->usageCountW);
41224123
#ifdef DEBUG_USAGE_COUNT
41234124
NdbMutex_Lock(&tabPtr.p->m_usage_count);
41244125
TcConnectionrecPtr tcPtr;
@@ -9384,6 +9385,9 @@ void Dblqh::execLQHKEYREQ(Signal *signal) {
93849385
else
93859386
{
93869387
tabptr.p->usageCountW++;
9388+
D("++usageCountW[" << tabptr.i << "] = " << tabptr.p->usageCountW
9389+
<< " transid[0x" << hex << tcConnectptr.p->transid[0]
9390+
<< ",0x" << hex << tcConnectptr.p->transid[1] << "]");
93879391
}
93889392

93899393
if (LqhKeyReq::getNrCopyFlag(Treqinfo) &&
@@ -14099,6 +14103,9 @@ void Dblqh::releaseTcrec(Signal *signal, TcConnectionrecPtr locTcConnectptr) {
1409914103
{
1410014104
Uint32 pre_usageCountW = tabPtr.p->usageCountW--;
1410114105
ndbrequire(pre_usageCountW > 0);
14106+
D("--usageCountW[" << tabPtr.i << "] = " << tabPtr.p->usageCountW
14107+
<< " transid: 0x" << hex << locTcConnectptr.p->transid[0]
14108+
<< ", 0x" << hex << locTcConnectptr.p->transid[1]);
1410214109
}
1410314110
}
1410414111
locTcConnectptr.p->original_operation = 0xFF;
@@ -33049,7 +33056,7 @@ Dblqh::initTable(Tablerec *tabPtrP)
3304933056
tabPtrP->tableStatus = Tablerec::NOT_DEFINED;
3305033057
tabPtrP->usageCountR = 0;
3305133058
tabPtrP->usageCountW = 0;
33052-
D(tabptr.i << "Init usageCountR = 0");
33059+
D(tabptr.i << "Init usageCountR and W = 0");
3305333060
tabPtrP->m_addfragptr_i = RNIL;
3305433061
tabPtrP->num_fragments_in_array = 0;
3305533062
tabPtrP->num_fragments = 0;

storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp

Lines changed: 67 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@
145145
//#define DEBUG_QUOTA_ABORT 1
146146
//#define DEBUG_TRACK_EXEC_FLAG 1
147147
//#define DEBUG_SCAN_MANY 1
148+
//#define DEBUG_RATE_OVERFLOW 1
148149
#endif
149150

150151
#define MAX_QUEUE_TIME_MS 60
@@ -162,6 +163,12 @@
162163
#define DEBUG(x)
163164
#endif
164165

166+
#ifdef DEBUG_RATE_OVERFLOW
167+
#define DEB_RATE_OVERFLOW(arglist) do { g_eventLogger->info arglist ; } while (0)
168+
#else
169+
#define DEB_RATE_OVERFLOW(arglist) do { } while (0)
170+
#endif
171+
165172
#ifdef DEBUG_TRACK_EXEC_FLAG
166173
#define DEB_TRACK_EXEC_FLAG(arglist) do { g_eventLogger->info arglist ; } while (0)
167174
#else
@@ -6159,11 +6166,6 @@ Dbtc::CommitAckMarker::insert_in_commit_ack_marker_all(Dbtc *tc,
61596166
void Dbtc::execLQHKEYCONF(Signal *signal) {
61606167
const LqhKeyConf *lqhKeyConf =
61616168
CAST_CONSTPTR(LqhKeyConf, signal->getDataPtr());
6162-
#ifdef UNUSED
6163-
ndbout << "TC: Received LQHKEYCONF"
6164-
<< " transId1=" << lqhKeyConf->transId1
6165-
<< " transId2=" << lqhKeyConf->transId2 << endl;
6166-
#endif /*UNUSED*/
61676169
UintR compare_transid1, compare_transid2;
61686170
BlockReference tlastLqhBlockref;
61696171
UintR tlastLqhConnect;
@@ -6214,6 +6216,14 @@ void Dbtc::execLQHKEYCONF(Signal *signal) {
62146216
apiConnectptr.i = regTcPtr->apiConnect;
62156217
commitAckMarker.i = regTcPtr->commitAckMarker;
62166218

6219+
DEB_RATE_QUEUE(("(%u) LQHKEYCONF: tcPtrI: %u, apiPtrI: %u,"
6220+
" transid[0x%x,0x%x]",
6221+
instance(),
6222+
tcConnectptr.i,
6223+
regTcPtr->apiConnect,
6224+
lqhKeyConf->transId1,
6225+
lqhKeyConf->transId2));
6226+
62176227
OperationState TtcConnectstate = regTcPtr->tcConnectstate;
62186228
if (unlikely(TtcConnectstate != OS_OPERATING))
62196229
{
@@ -6594,6 +6604,14 @@ void Dbtc::lqhKeyConf_checkTransactionState(Signal *signal,
65946604
UintR Tlqhkeyreqrec = apiConnectptr.p->lqhkeyreqrec;
65956605
int TnoOfOutStanding = Tlqhkeyreqrec - Tlqhkeyconfrec;
65966606

6607+
DEB_RATE_QUEUE(("(%u) LQHKEYCONF(2): apiPtrI: %u, state: %u,"
6608+
" transid[0x%x,0x%x]",
6609+
instance(),
6610+
apiConnectptr.i,
6611+
TapiConnectstate,
6612+
apiConnectptr.p->transid[0],
6613+
apiConnectptr.p->transid[1]));
6614+
65976615
switch (TapiConnectstate) {
65986616
case CS_START_COMMITTING:
65996617
if (TnoOfOutStanding == 0) {
@@ -7567,6 +7585,13 @@ void Dbtc::execCOMMITTED(Signal *signal) {
75677585
*/
75687586
return;
75697587
}
7588+
DEB_RATE_QUEUE(("(%u) COMMITTED: tcPtrI: %u, apiPtrI: %u,"
7589+
" transid[0x%x,0x%x]",
7590+
instance(),
7591+
localTcConnectptr.i,
7592+
localTcConnectptr.p->apiConnect,
7593+
conf->transid1,
7594+
conf->transid2));
75707595
UintR Tcounter = localApiConnectptr.p->counter - 1;
75717596
ConnectionState TapiConnectstate = localApiConnectptr.p->apiConnectstate;
75727597
UintR Tdata1 = localApiConnectptr.p->transid[0] - conf->transid1;
@@ -8532,6 +8557,13 @@ void Dbtc::execCOMPLETED(Signal *signal) {
85328557
warningReport(signal, 6, localTcConnectptr.i);
85338558
return;
85348559
}
8560+
DEB_RATE_QUEUE(("(%u) COMPLETED: tcPtrI: %u, apiPtrI: %u,"
8561+
" transid[0x%x,0x%x]",
8562+
instance(),
8563+
localTcConnectptr.i,
8564+
localTcConnectptr.p->apiConnect,
8565+
conf->transid1,
8566+
conf->transid2));
85358567
bool Tcond1 = (localTcConnectptr.p->tcConnectstate != OS_COMPLETING);
85368568
localApiConnectptr.i = localTcConnectptr.p->apiConnect;
85378569
if (Tcond1) {
@@ -8915,8 +8947,14 @@ void Dbtc::execLQHKEYREF(Signal *signal) {
89158947
warningReport(signal, 25, tcConnectptr.i);
89168948
return;
89178949
}
8918-
DEB_RATE_QUEUE(("(%u) LQHKEYREF: %u, errCode: %u",
8919-
instance(), tcConnectptr.i, errCode));
8950+
DEB_RATE_QUEUE(("(%u) LQHKEYREF: tcPtrI: %u, apiPtrI: %u, errCode: %u,"
8951+
" transid[0x%x,0x%x]",
8952+
instance(),
8953+
tcConnectptr.i,
8954+
tcConnectptr.p->apiConnect,
8955+
errCode,
8956+
lqhKeyRef->transId1,
8957+
lqhKeyRef->transId2));
89208958
{
89218959
/*-----------------------------------------------------------------------
89228960
* WE HAVE TO CHECK THAT THE TRANSACTION IS STILL VALID. FIRST WE CHECK
@@ -9272,6 +9310,12 @@ void Dbtc::execTC_COMMITREQ(Signal *signal) {
92729310
const Uint32 transId2 = regApiPtr->transid[1];
92739311
Uint32 errorCode = 0;
92749312

9313+
DEB_RATE_QUEUE(("(%u) TC_COMMITREQ: apiPtrI: %u,"
9314+
" transid[0x%x,0x%x]",
9315+
instance(),
9316+
apiConnectptr.i,
9317+
regApiPtr->transid[0],
9318+
regApiPtr->transid[1]));
92759319
tc_clearbit(regApiPtr->m_flags, ApiConnectRecord::TF_NOT_OUTSTANDING_FLAG);
92769320
regApiPtr->m_flags |= ApiConnectRecord::TF_EXEC_FLAG;
92779321
DEB_TRACK_EXEC_FLAG(("(%u) Set TF_EXEC_FLAG, apiPtrI: %u, line: %u",
@@ -15621,6 +15665,8 @@ void Dbtc::execSCAN_TABREQ(Signal *signal) {
1562115665
ndbrequire(m_databaseRecordPool.getPtr(databaseRecordPtr));
1562215666
if (databaseRecordPtr.p->m_is_queueing_abort_read) {
1562315667
jam();
15668+
DEB_RATE_OVERFLOW(("(%u) db: %llu, apiPtrI: %u",
15669+
instance(), databaseRecordPtr.i, apiConnectptr.i));
1562415670
releaseSections(handle);
1562515671
errCode = ZRATE_OVERFLOW_ERROR;
1562615672
goto SCAN_TAB_error;
@@ -15655,6 +15701,8 @@ void Dbtc::execSCAN_TABREQ(Signal *signal) {
1565515701
if (databaseRecordPtr.p->m_is_queueing_abort_read) {
1565615702
jam();
1565715703
releaseSections(handle);
15704+
DEB_RATE_OVERFLOW(("(%u) db: %llu, transOwnerPtrI: %u",
15705+
instance(), databaseRecordPtr.i, transOwnerPtr.i));
1565815706
errCode = ZRATE_OVERFLOW_ERROR;
1565915707
goto SCAN_TAB_error;
1566015708
}
@@ -27237,9 +27285,11 @@ bool Dbtc::queue_tckeyreq(Signal *signal,
2723727285
char *ai_area = key_area + 4 * key_length;
2723827286
copy((Uint32*)ai_area, ai_ptr);
2723927287
}
27288+
#ifdef DEBUG_RATE_QUEUE
27289+
const TcKeyReq * const tcKeyReq = (TcKeyReq *)&signal->theData[0];
2724027290
DEB_RATE_QUEUE(("(%u) Queue TCKEYREQ, now: %llu, ptr: %p, apiPtr.i: %u"
2724127291
", sig_len: %u, sections: %u, key_len: %u, ai_len: %u"
27242-
", key[%u,%u,%u,%u,%u,%u]",
27292+
", key[%u,%u,%u,%u,%u,%u], transid[0x%x,0x%x)]",
2724327293
instance(),
2724427294
now.getUint64(),
2724527295
queue_record,
@@ -27253,7 +27303,10 @@ bool Dbtc::queue_tckeyreq(Signal *signal,
2725327303
key_length > 2 ? ((Uint32*)key_area)[2] : 0xFFFF,
2725427304
key_length > 3 ? ((Uint32*)key_area)[3] : 0xFFFF,
2725527305
key_length > 4 ? ((Uint32*)key_area)[4] : 0xFFFF,
27256-
key_length > 5 ? ((Uint32*)key_area)[5] : 0xFFFF ));
27306+
key_length > 5 ? ((Uint32*)key_area)[5] : 0xFFFF,
27307+
tcKeyReq->transId1,
27308+
tcKeyReq->transId2));
27309+
#endif
2725727310
}
2725827311

2725927312
insert_queue_record_tc(transPtr.p, queue_record);
@@ -27661,7 +27714,8 @@ void Dbtc::debug_db_no_queue(DatabaseRecordPtr databaseRecordPtr,
2766127714
DEB_RATE_QUEUE(("(%u):%u TCKEYREQ no queueing, passQueueFlag: %u,"
2766227715
" DB:first_queue: %p, start_queued: %u, all_queued: %u,"
2766327716
" tcPtrI: %u, Trans:first_queue: %p,"
27664-
" startTrans: %u, op_type: %s, tableId: %u",
27717+
" startTrans: %u, op_type: %s, tableId: %u"
27718+
", transid[0x%x,0x%x]",
2766527719
instance(),
2766627720
databaseRecordPtr.p->m_database_id,
2766727721
passQueueingFlag,
@@ -27679,6 +27733,8 @@ void Dbtc::debug_db_no_queue(DatabaseRecordPtr databaseRecordPtr,
2767927733
opType == ZREAD_EX ? "ReadEx" :
2768027734
opType == ZUNLOCK ? "Unlock" :
2768127735
opType == ZREFRESH ? "Refresh" : "Other",
27682-
tableId));
27736+
tableId,
27737+
regApiPtr->transid[0],
27738+
regApiPtr->transid[1]));
2768327739
}
2768427740
}

0 commit comments

Comments
 (0)