diff options
author | unknown <jonas@perch.ndb.mysql.com> | 2006-10-25 08:40:34 +0200 |
---|---|---|
committer | unknown <jonas@perch.ndb.mysql.com> | 2006-10-25 08:40:34 +0200 |
commit | 559951486a34f256ff01ea68f28233022c2ce65e (patch) | |
tree | 7f8fc82114dde845baedde420ea6360b1596743c /ndb | |
parent | f8b8f692331dff9ea04ec934d75b2408e56b8a22 (diff) | |
parent | 9070859eefce543381d63d7ebad4e6cc3ea7783c (diff) | |
download | mariadb-git-559951486a34f256ff01ea68f28233022c2ce65e.tar.gz |
Merge perch.ndb.mysql.com:/home/jonas/src/41-work
into perch.ndb.mysql.com:/home/jonas/src/mysql-4.1-ndb
Diffstat (limited to 'ndb')
-rw-r--r-- | ndb/include/kernel/ndb_limits.h | 2 | ||||
-rw-r--r-- | ndb/src/kernel/blocks/ERROR_codes.txt | 4 | ||||
-rw-r--r-- | ndb/src/kernel/blocks/backup/Backup.cpp | 5 | ||||
-rw-r--r-- | ndb/src/kernel/blocks/backup/Backup.hpp | 6 | ||||
-rw-r--r-- | ndb/src/kernel/blocks/dbdih/DbdihMain.cpp | 43 | ||||
-rw-r--r-- | ndb/src/ndbapi/NdbConnection.cpp | 9 |
6 files changed, 55 insertions, 14 deletions
diff --git a/ndb/include/kernel/ndb_limits.h b/ndb/include/kernel/ndb_limits.h index 48a56c019bb..b16c8250b0d 100644 --- a/ndb/include/kernel/ndb_limits.h +++ b/ndb/include/kernel/ndb_limits.h @@ -62,6 +62,8 @@ #define MAX_KEY_SIZE_IN_WORDS 1023 #define MAX_FRM_DATA_SIZE 6000 +#define MAX_WORDS_META_FILE 24576 + #define MIN_ATTRBUF ((MAX_ATTRIBUTES_IN_TABLE/24) + 1) /* * Max Number of Records to fetch per SCAN_NEXTREQ in a scan in LQH. The diff --git a/ndb/src/kernel/blocks/ERROR_codes.txt b/ndb/src/kernel/blocks/ERROR_codes.txt index d6dfcfe8587..874c128a56d 100644 --- a/ndb/src/kernel/blocks/ERROR_codes.txt +++ b/ndb/src/kernel/blocks/ERROR_codes.txt @@ -5,7 +5,7 @@ Next DBACC 3002 Next DBTUP 4014 Next DBLQH 5043 Next DBDICT 6006 -Next DBDIH 7174 +Next DBDIH 7178 Next DBTC 8038 Next CMVMI 9000 Next BACKUP 10022 @@ -66,6 +66,8 @@ Delay GCP_SAVEREQ by 10 secs 7030: Delay in GCP_PREPARE until node has completed a node failure 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: ----------------------------------------------------------------- diff --git a/ndb/src/kernel/blocks/backup/Backup.cpp b/ndb/src/kernel/blocks/backup/Backup.cpp index b23b434fcd9..41dcc79cd66 100644 --- a/ndb/src/kernel/blocks/backup/Backup.cpp +++ b/ndb/src/kernel/blocks/backup/Backup.cpp @@ -2323,9 +2323,8 @@ Backup::execDEFINE_BACKUP_REQ(Signal* signal) 0 // 3M }; const Uint32 maxInsert[] = { - 2048, // Temporarily to solve TR515 - //25, // 100 bytes - 4096, // 4k + MAX_WORDS_META_FILE, + 4096, // 16k 16*3000, // Max 16 tuples }; Uint32 minWrite[] = { diff --git a/ndb/src/kernel/blocks/backup/Backup.hpp b/ndb/src/kernel/blocks/backup/Backup.hpp index f3d180b9467..9535ff83964 100644 --- a/ndb/src/kernel/blocks/backup/Backup.hpp +++ b/ndb/src/kernel/blocks/backup/Backup.hpp @@ -513,8 +513,10 @@ public: Config c_defaults; 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 */ diff --git a/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp b/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp index 7ae7db967b2..0d8c91093d3 100644 --- a/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp +++ b/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp @@ -626,22 +626,48 @@ void Dbdih::execCOPY_GCIREQ(Signal* signal) ndbrequire(c_copyGCISlave.m_copyReason == CopyGCIReq::IDLE); ndbrequire(c_copyGCISlave.m_expectedNextWord == tstart); 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); for(Uint32 i = 0; i<CopyGCIReq::DATA_SIZE; 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(); c_copyGCISlave.m_expectedNextWord = 0; - } else { + } + else + { jam(); c_copyGCISlave.m_expectedNextWord += CopyGCIReq::DATA_SIZE; return; - }//if - - memcpy(sysfileData, cdata, sizeof(sysfileData)); + } + if (cmasterdihref != reference()) + { + jam(); + memcpy(sysfileData, cdata, sizeof(sysfileData)); + } + c_copyGCISlave.m_copyReason = reason; c_copyGCISlave.m_senderRef = signal->senderBlockRef(); c_copyGCISlave.m_senderData = copyGCI->anyData; @@ -8352,14 +8378,17 @@ Dbdih::resetReplicaSr(TabRecordPtr tabPtr){ ConstPtr<ReplicaRecord> constReplicaPtr; constReplicaPtr.i = replicaPtr.i; constReplicaPtr.p = replicaPtr.p; - if (setup_create_replica(fragPtr, + if (tabPtr.p->storedTable == 0 || + setup_create_replica(fragPtr, &createReplica, constReplicaPtr)) { + jam(); removeOldStoredReplica(fragPtr, replicaPtr); linkStoredReplica(fragPtr, replicaPtr); } else { + jam(); infoEvent("Forcing take-over of node %d due to unsufficient REDO" " for table %d fragment: %d", nodePtr.i, tabPtr.i, i); diff --git a/ndb/src/ndbapi/NdbConnection.cpp b/ndb/src/ndbapi/NdbConnection.cpp index 9cd7d6ed42e..e061740c9f6 100644 --- a/ndb/src/ndbapi/NdbConnection.cpp +++ b/ndb/src/ndbapi/NdbConnection.cpp @@ -373,8 +373,15 @@ NdbConnection::execute(ExecType aTypeOfExec, ret = -1; if(savedError.code==0) 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 assert(theFirstOpInList == NULL && theLastOpInList == NULL); #else |