Commit 9e692d86 authored by unknown's avatar unknown

ndb - bug#28724 for blobs, op flag to not set error on trans (fix, recommit)


storage/ndb/include/ndbapi/NdbOperation.hpp:
  add NdbOperation option m_noErrorPropagation.
  If AO_IgnoreError and it are set then operation error does not set error code on transaction.
  Private, and used by NdbBlob.cpp only.
storage/ndb/src/ndbapi/NdbBlob.cpp:
  add NdbOperation option m_noErrorPropagation.
  If AO_IgnoreError and it are set then operation error does not set error code on transaction.
  Private, and used by NdbBlob.cpp only.
storage/ndb/src/ndbapi/NdbOperation.cpp:
  add NdbOperation option m_noErrorPropagation.
  If AO_IgnoreError and it are set then operation error does not set error code on transaction.
  Private, and used by NdbBlob.cpp only.
parent ab4c64b4
......@@ -1042,6 +1042,13 @@ protected:
*/
Int8 m_abortOption;
/*
* For blob impl, option to not propagate error to trans level.
* Could be AO_IgnoreError variant if we want it public.
* Ignored unless AO_IgnoreError is also set.
*/
Int8 m_noErrorPropagation;
friend struct Ndb_free_list_t<NdbOperation>;
};
......
......@@ -1261,6 +1261,7 @@ NdbBlob::deletePartsUnknown(Uint32 part)
DBUG_RETURN(-1);
}
tOp->m_abortOption= NdbOperation::AO_IgnoreError;
tOp->m_noErrorPropagation = true;
n++;
}
DBUG_PRINT("info", ("bat=%u", bat));
......@@ -1597,6 +1598,7 @@ NdbBlob::preExecute(NdbTransaction::ExecType anExecType, bool& batch)
}
if (isWriteOp()) {
tOp->m_abortOption = NdbOperation::AO_IgnoreError;
tOp->m_noErrorPropagation = true;
}
theHeadInlineReadOp = tOp;
// execute immediately
......@@ -1643,6 +1645,7 @@ NdbBlob::preExecute(NdbTransaction::ExecType anExecType, bool& batch)
}
if (isWriteOp()) {
tOp->m_abortOption = NdbOperation::AO_IgnoreError;
tOp->m_noErrorPropagation = true;
}
theHeadInlineReadOp = tOp;
// execute immediately
......
......@@ -76,7 +76,8 @@ NdbOperation::NdbOperation(Ndb* aNdb, NdbOperation::Type aType) :
m_keyInfoGSN(GSN_KEYINFO),
m_attrInfoGSN(GSN_ATTRINFO),
theBlobList(NULL),
m_abortOption(-1)
m_abortOption(-1),
m_noErrorPropagation(false)
{
theReceiver.init(NdbReceiver::NDB_OPERATION, this);
theError.code = 0;
......@@ -101,7 +102,8 @@ NdbOperation::setErrorCode(int anErrorCode)
theError.code = anErrorCode;
theNdbCon->theErrorLine = theErrorLine;
theNdbCon->theErrorOperation = this;
theNdbCon->setOperationErrorCode(anErrorCode);
if (!(m_abortOption == AO_IgnoreError && m_noErrorPropagation))
theNdbCon->setOperationErrorCode(anErrorCode);
}
/******************************************************************************
......@@ -116,6 +118,7 @@ NdbOperation::setErrorCodeAbort(int anErrorCode)
theError.code = anErrorCode;
theNdbCon->theErrorLine = theErrorLine;
theNdbCon->theErrorOperation = this;
// ignore m_noErrorPropagation
theNdbCon->setOperationErrorCodeAbort(anErrorCode);
}
......@@ -161,6 +164,7 @@ NdbOperation::init(const NdbTableImpl* tab, NdbTransaction* myConnection){
theMagicNumber = 0xABCDEF01;
theBlobList = NULL;
m_abortOption = -1;
m_noErrorPropagation = false;
m_no_disk_flag = 1;
tSignal = theNdb->getSignal();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment