Commit 0f74244d authored by jonas@perch.ndb.mysql.com's avatar jonas@perch.ndb.mysql.com

Merge perch.ndb.mysql.com:/home/jonas/src/41-work

into  perch.ndb.mysql.com:/home/jonas/src/mysql-4.1-ndb
parents 3a4ca6d7 a03b282f
...@@ -62,6 +62,8 @@ ...@@ -62,6 +62,8 @@
#define MAX_KEY_SIZE_IN_WORDS 1023 #define MAX_KEY_SIZE_IN_WORDS 1023
#define MAX_FRM_DATA_SIZE 6000 #define MAX_FRM_DATA_SIZE 6000
#define MAX_WORDS_META_FILE 24576
#define MIN_ATTRBUF ((MAX_ATTRIBUTES_IN_TABLE/24) + 1) #define MIN_ATTRBUF ((MAX_ATTRIBUTES_IN_TABLE/24) + 1)
/* /*
* Max Number of Records to fetch per SCAN_NEXTREQ in a scan in LQH. The * Max Number of Records to fetch per SCAN_NEXTREQ in a scan in LQH. The
......
...@@ -5,7 +5,7 @@ Next DBACC 3002 ...@@ -5,7 +5,7 @@ Next DBACC 3002
Next DBTUP 4014 Next DBTUP 4014
Next DBLQH 5043 Next DBLQH 5043
Next DBDICT 6006 Next DBDICT 6006
Next DBDIH 7174 Next DBDIH 7178
Next DBTC 8038 Next DBTC 8038
Next CMVMI 9000 Next CMVMI 9000
Next BACKUP 10022 Next BACKUP 10022
...@@ -66,6 +66,8 @@ Delay GCP_SAVEREQ by 10 secs ...@@ -66,6 +66,8 @@ Delay GCP_SAVEREQ by 10 secs
7030: Delay in GCP_PREPARE until node has completed a node failure 7030: Delay in GCP_PREPARE until node has completed a node failure
7031: Delay in GCP_PREPARE and die 3s later 7031: Delay in GCP_PREPARE and die 3s later
7177: Delay copying of sysfileData in execCOPY_GCIREQ
ERROR CODES FOR TESTING NODE FAILURE, LOCAL CHECKPOINT HANDLING: ERROR CODES FOR TESTING NODE FAILURE, LOCAL CHECKPOINT HANDLING:
----------------------------------------------------------------- -----------------------------------------------------------------
......
...@@ -2323,9 +2323,8 @@ Backup::execDEFINE_BACKUP_REQ(Signal* signal) ...@@ -2323,9 +2323,8 @@ Backup::execDEFINE_BACKUP_REQ(Signal* signal)
0 // 3M 0 // 3M
}; };
const Uint32 maxInsert[] = { const Uint32 maxInsert[] = {
2048, // Temporarily to solve TR515 MAX_WORDS_META_FILE,
//25, // 100 bytes 4096, // 16k
4096, // 4k
16*3000, // Max 16 tuples 16*3000, // Max 16 tuples
}; };
Uint32 minWrite[] = { Uint32 minWrite[] = {
......
...@@ -513,8 +513,10 @@ public: ...@@ -513,8 +513,10 @@ public:
Config c_defaults; Config c_defaults;
Uint32 m_diskless; Uint32 m_diskless;
STATIC_CONST(NO_OF_PAGES_META_FILE = 2); STATIC_CONST(NO_OF_PAGES_META_FILE =
(MAX_WORDS_META_FILE + BACKUP_WORDS_PER_PAGE - 1) /
BACKUP_WORDS_PER_PAGE);
/** /**
* Pools * Pools
*/ */
......
...@@ -626,22 +626,48 @@ void Dbdih::execCOPY_GCIREQ(Signal* signal) ...@@ -626,22 +626,48 @@ void Dbdih::execCOPY_GCIREQ(Signal* signal)
ndbrequire(c_copyGCISlave.m_copyReason == CopyGCIReq::IDLE); ndbrequire(c_copyGCISlave.m_copyReason == CopyGCIReq::IDLE);
ndbrequire(c_copyGCISlave.m_expectedNextWord == tstart); ndbrequire(c_copyGCISlave.m_expectedNextWord == tstart);
ndbrequire(reason != CopyGCIReq::IDLE); ndbrequire(reason != CopyGCIReq::IDLE);
bool isdone = (tstart + CopyGCIReq::DATA_SIZE) >= Sysfile::SYSFILE_SIZE32;
if (ERROR_INSERTED(7177))
{
jam();
if (signal->getLength() == 3)
{
jam();
goto done;
}
}
arrGuard(tstart + CopyGCIReq::DATA_SIZE, sizeof(sysfileData)/4); arrGuard(tstart + CopyGCIReq::DATA_SIZE, sizeof(sysfileData)/4);
for(Uint32 i = 0; i<CopyGCIReq::DATA_SIZE; i++) for(Uint32 i = 0; i<CopyGCIReq::DATA_SIZE; i++)
cdata[tstart+i] = copyGCI->data[i]; cdata[tstart+i] = copyGCI->data[i];
if ((tstart + CopyGCIReq::DATA_SIZE) >= Sysfile::SYSFILE_SIZE32) { if (ERROR_INSERTED(7177) && isMaster() && isdone)
{
sendSignalWithDelay(reference(), GSN_COPY_GCIREQ, signal, 1000, 3);
return;
}
done:
if (isdone)
{
jam(); jam();
c_copyGCISlave.m_expectedNextWord = 0; c_copyGCISlave.m_expectedNextWord = 0;
} else { }
else
{
jam(); jam();
c_copyGCISlave.m_expectedNextWord += CopyGCIReq::DATA_SIZE; c_copyGCISlave.m_expectedNextWord += CopyGCIReq::DATA_SIZE;
return; return;
}//if }
memcpy(sysfileData, cdata, sizeof(sysfileData));
if (cmasterdihref != reference())
{
jam();
memcpy(sysfileData, cdata, sizeof(sysfileData));
}
c_copyGCISlave.m_copyReason = reason; c_copyGCISlave.m_copyReason = reason;
c_copyGCISlave.m_senderRef = signal->senderBlockRef(); c_copyGCISlave.m_senderRef = signal->senderBlockRef();
c_copyGCISlave.m_senderData = copyGCI->anyData; c_copyGCISlave.m_senderData = copyGCI->anyData;
...@@ -8352,14 +8378,17 @@ Dbdih::resetReplicaSr(TabRecordPtr tabPtr){ ...@@ -8352,14 +8378,17 @@ Dbdih::resetReplicaSr(TabRecordPtr tabPtr){
ConstPtr<ReplicaRecord> constReplicaPtr; ConstPtr<ReplicaRecord> constReplicaPtr;
constReplicaPtr.i = replicaPtr.i; constReplicaPtr.i = replicaPtr.i;
constReplicaPtr.p = replicaPtr.p; constReplicaPtr.p = replicaPtr.p;
if (setup_create_replica(fragPtr, if (tabPtr.p->storedTable == 0 ||
setup_create_replica(fragPtr,
&createReplica, constReplicaPtr)) &createReplica, constReplicaPtr))
{ {
jam();
removeOldStoredReplica(fragPtr, replicaPtr); removeOldStoredReplica(fragPtr, replicaPtr);
linkStoredReplica(fragPtr, replicaPtr); linkStoredReplica(fragPtr, replicaPtr);
} }
else else
{ {
jam();
infoEvent("Forcing take-over of node %d due to unsufficient REDO" infoEvent("Forcing take-over of node %d due to unsufficient REDO"
" for table %d fragment: %d", " for table %d fragment: %d",
nodePtr.i, tabPtr.i, i); nodePtr.i, tabPtr.i, i);
......
...@@ -373,8 +373,15 @@ NdbConnection::execute(ExecType aTypeOfExec, ...@@ -373,8 +373,15 @@ NdbConnection::execute(ExecType aTypeOfExec,
ret = -1; ret = -1;
if(savedError.code==0) if(savedError.code==0)
savedError= theError; savedError= theError;
/**
* If AO_IgnoreError, error codes arent always set on individual
* operations, making postExecute impossible
*/
if (abortOption == AO_IgnoreError)
DBUG_RETURN(-1);
} }
#ifdef ndb_api_crash_on_complex_blob_abort #ifdef ndb_api_crash_on_complex_blob_abort
assert(theFirstOpInList == NULL && theLastOpInList == NULL); assert(theFirstOpInList == NULL && theLastOpInList == NULL);
#else #else
......
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