Skip to content

Commit c0b1f54

Browse files
author
Ole John Aske
committed
Bug#25777337 TC BLOCK DOES NOT HANDLE 'DROPPED' LONG 'TRANSID_AI SIGNALS
Handling of TRANSID_AI signals 'dropped' due to 'out of long signal message buffers' were not implemented in Dbtc::execSIGNAL_DROPPED_REP(). Such signals could (only) come from unique index operations. This patch introduce handling of such dropped TRANSID_AI signals by aborting the TcIndexOperation.
1 parent 80d233e commit c0b1f54

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

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

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
1+
/* Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
22

33
This program is free software; you can redistribute it and/or modify
44
it under the terms of the GNU General Public License as published by
@@ -4515,6 +4515,36 @@ void Dbtc::execSIGNAL_DROPPED_REP(Signal* signal)
45154515
signal, ScanTabRef::SignalLength, JBB);
45164516
break;
45174517
}
4518+
case GSN_TRANSID_AI: //TUP -> TC
4519+
{
4520+
jam();
4521+
/**
4522+
* TRANSID_AI is received as a result of performing a read on
4523+
* the index table as part of a (unique) index operation.
4524+
*/
4525+
const TransIdAI * const truncatedTransIdAI =
4526+
reinterpret_cast<const TransIdAI*>(&rep->originalData[0]);
4527+
4528+
TcIndexOperationPtr indexOpPtr;
4529+
indexOpPtr.i = truncatedTransIdAI->connectPtr;
4530+
TcIndexOperation* indexOp = c_theIndexOperationPool.getPtr(indexOpPtr.i);
4531+
indexOpPtr.p = indexOp;
4532+
if (indexOp == NULL) {
4533+
jam();
4534+
// Missing index operation - ignore
4535+
break;
4536+
}
4537+
4538+
/* No more TransIdAI will arrive, abort */
4539+
apiConnectptr.i = indexOp->connectionIndex;
4540+
ptrCheckGuard(apiConnectptr, capiConnectFilesize, apiConnectRecord);
4541+
4542+
terrorCode = ZGET_DATAREC_ERROR;
4543+
abortErrorLab(signal);
4544+
break;
4545+
}
4546+
case GSN_TRANSID_AI_R: //TODO
4547+
jam();
45184548
default:
45194549
jam();
45204550
/* Don't expect dropped signals for other GSNs,

0 commit comments

Comments
 (0)