List:Internals« Previous MessageNext Message »
From:Mikael Ronström Date:August 21 2004 11:17am
Subject:bk commit into 4.1 tree (mikael:1.1973)
View as plain text  
# This is a BitKeeper generated patch for the following project:
# Project Name: MySQL - fast and reliable SQL database
# This patch format is intended for GNU patch command version 2.5 or  
higher.
# This patch includes the following deltas:
#                  ChangeSet    1.1972  -> 1.1973
#       ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp       1.2     -> 1.3
#       ndb/src/kernel/blocks/dbacc/DbaccMain.cpp       1.11    -> 1.12
#       ndb/include/mgmapi/mgmapi_config_parameters.h   1.7     -> 1.8
#       ndb/src/kernel/blocks/dblqh/DblqhInit.cpp       1.6     -> 1.7
#       ndb/src/kernel/blocks/dbacc/DbaccInit.cpp       1.3     -> 1.4
#       ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp      1.6     -> 1.7
#       ndb/src/kernel/blocks/dblqh/Dblqh.hpp   1.8     -> 1.9
#       ndb/src/kernel/blocks/dblqh/DblqhMain.cpp       1.20    -> 1.21
#       ndb/src/kernel/blocks/dbtup/DbtupGen.cpp        1.6     -> 1.7
#       ndb/src/kernel/blocks/dbtup/Dbtup.hpp   1.8     -> 1.9
#       ndb/src/kernel/blocks/dbacc/Dbacc.hpp   1.6     -> 1.7
#       ndb/include/kernel/signaldata/FsCloseReq.hpp    1.1     -> 1.2
#       ndb/src/kernel/vm/pc.hpp        1.4     -> 1.5
#       ndb/src/common/mgmcommon/ConfigInfo.cpp 1.20    -> 1.21
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 04/08/21      mronstrom@stripped     1.1973
# New config parameters for Log Page Buffers
# Fixing issue with NO_OF_FRAG_PER_NODE
# Also removed some OSE code no longer needed when configurable log  
pages
# --------------------------------------------
#
diff -Nru a/ndb/include/kernel/signaldata/FsCloseReq.hpp  
b/ndb/include/kernel/signaldata/FsCloseReq.hpp
--- a/ndb/include/kernel/signaldata/FsCloseReq.hpp      Sat Aug 21  
13:15:13 2004
+++ b/ndb/include/kernel/signaldata/FsCloseReq.hpp      Sat Aug 21  
13:15:13 2004
@@ -74,7 +74,7 @@
  inline
  void
  FsCloseReq::setRemoveFileFlag(UintR & fileflag, bool removefile){
-  ASSERT_BOOL(removefile, "FsCloseReq::setRemoveFileFlag");
+//  ASSERT_BOOL(removefile, "FsCloseReq::setRemoveFileFlag");
    if (removefile == true)
      fileflag = 1;
    else
diff -Nru a/ndb/include/mgmapi/mgmapi_config_parameters.h  
b/ndb/include/mgmapi/mgmapi_config_parameters.h
--- a/ndb/include/mgmapi/mgmapi_config_parameters.h     Sat Aug 21  
13:15:13 2004
+++ b/ndb/include/mgmapi/mgmapi_config_parameters.h     Sat Aug 21  
13:15:13 2004
@@ -83,6 +83,10 @@
  #define CFG_DB_NO_LOCAL_SCANS         152
  #define CFG_DB_BATCH_SIZE             153

+#define CFG_DB_UNDO_INDEX_BUFFER      154
+#define CFG_DB_UNDO_DATA_BUFFER       155
+#define CFG_DB_REDO_BUFFER            156
+
  #define CFG_NODE_ARBIT_RANK           200
  #define CFG_NODE_ARBIT_DELAY          201

diff -Nru a/ndb/src/common/mgmcommon/ConfigInfo.cpp  
b/ndb/src/common/mgmcommon/ConfigInfo.cpp
--- a/ndb/src/common/mgmcommon/ConfigInfo.cpp   Sat Aug 21 13:15:13 2004
+++ b/ndb/src/common/mgmcommon/ConfigInfo.cpp   Sat Aug 21 13:15:13 2004
@@ -643,7 +643,7 @@
      ConfigInfo::USED,
      false,
      ConfigInfo::INT64,
-    3 * 1024 * 8192,
+    24 * (1024 * 1024),
      128 * 8192,
      ((Uint64)MAX_INT_RNIL) * ((Uint64)8192) },

@@ -655,9 +655,45 @@
      ConfigInfo::USED,
      false,
      ConfigInfo::INT64,
-    10 * 1024 * 8192,
+    80 * (1024 * 1024),
      128 * 8192,
      ((Uint64)MAX_INT_RNIL) * ((Uint64)8192) },
+
+  {
+    CFG_DB_UNDO_INDEX_BUFFER,
+    "UndoIndexBuffer",
+    "DB",
+    "Number bytes on each DB node allocated for storing data",
+    ConfigInfo::USED,
+    false,
+    ConfigInfo::INT,
+    2 * (1024 * 1024),
+    1 * (1024 * 1024),
+    MAX_INT_RNIL},
+
+  {
+    CFG_DB_UNDO_DATA_BUFFER,
+    "UndoDataBuffer",
+    "DB",
+    "Number bytes on each DB node allocated for storing data",
+    ConfigInfo::USED,
+    false,
+    ConfigInfo::INT,
+    16 * (1024 * 1024),
+    1 * (1024 * 1024),
+    MAX_INT_RNIL},
+
+  {
+    CFG_DB_REDO_BUFFER,
+    "RedoBuffer",
+    "DB",
+    "Number bytes on each DB node allocated for storing data",
+    ConfigInfo::USED,
+    false,
+    ConfigInfo::INT,
+    8 * (1024 * 1024),
+    1 * (1024 * 1024),
+    MAX_INT_RNIL},

    {
      CFG_DB_START_PARTIAL_TIMEOUT,
diff -Nru a/ndb/src/kernel/blocks/dbacc/Dbacc.hpp  
b/ndb/src/kernel/blocks/dbacc/Dbacc.hpp
--- a/ndb/src/kernel/blocks/dbacc/Dbacc.hpp     Sat Aug 21 13:15:13 2004
+++ b/ndb/src/kernel/blocks/dbacc/Dbacc.hpp     Sat Aug 21 13:15:13 2004
@@ -194,7 +194,6 @@
  #define ZTABLESIZE 16
  #define ZTABMAXINDEX 3
  #define ZUNDEFINED_OP 6
-#define ZUNDOPAGESIZE 64
  #define ZUNDOHEADSIZE 7
  #define ZUNLOCKED 1
  #define ZUNDOPAGE_BASE_ADD 2
@@ -894,8 +893,8 @@
  /* TABREC                                                               
               */
  /*  
------------------------------------------------------------------------ 
--------- */
  struct Tabrec {
-  Uint32 fragholder[NO_OF_FRAG_PER_NODE];
-  Uint32 fragptrholder[NO_OF_FRAG_PER_NODE];
+  Uint32 fragholder[MAX_FRAG_PER_NODE];
+  Uint32 fragptrholder[MAX_FRAG_PER_NODE];
    Uint32 tabUserPtr;
    BlockReference tabUserRef;
  };
diff -Nru a/ndb/src/kernel/blocks/dbacc/DbaccInit.cpp  
b/ndb/src/kernel/blocks/dbacc/DbaccInit.cpp
--- a/ndb/src/kernel/blocks/dbacc/DbaccInit.cpp Sat Aug 21 13:15:13 2004
+++ b/ndb/src/kernel/blocks/dbacc/DbaccInit.cpp Sat Aug 21 13:15:13 2004
@@ -32,7 +32,6 @@
    crootfragmentsize = ZROOTFRAGMENTSIZE;
    cdirrangesize = ZDIRRANGESIZE;
    coverflowrecsize = ZOVERFLOWRECSIZE;
-  cundopagesize = ZUNDOPAGESIZE;
    cfsConnectsize = ZFS_CONNECTSIZE;
    cfsOpsize = ZFS_OPSIZE;
    cscanRecSize = ZSCAN_REC_SIZE;
@@ -136,7 +135,25 @@
  Dbacc::Dbacc(const class Configuration & conf):
    SimulatedBlock(DBACC, conf)
  {
+  Uint32 log_page_size= 0;
    BLOCK_CONSTRUCTOR(Dbacc);
+
+  const ndb_mgm_configuration_iterator * p =  
conf.getOwnConfigIterator();
+  ndbrequire(p != 0);
+
+  ndb_mgm_get_int_parameter(p, CFG_DB_UNDO_INDEX_BUFFER,
+                           &log_page_size);
+
+  /**
+   * Always set page size in half MBytes
+   */
+  cundopagesize= (log_page_size / sizeof(Undopage));
+  Uint32 mega_byte_part= cundopagesize & 15;
+  if (mega_byte_part != 0) {
+    jam();
+    cundopagesize+= (16 - mega_byte_part);
+  }
+  ndbout << "ACC: No of Undo Pages = " << cundopagesize << endl;

    // Transit signals
    addRecSignal(GSN_DUMP_STATE_ORD, &Dbacc::execDUMP_STATE_ORD);
diff -Nru a/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp  
b/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp
--- a/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp Sat Aug 21 13:15:12 2004
+++ b/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp Sat Aug 21 13:15:13 2004
@@ -1021,7 +1021,7 @@
    for (tabptr.i = 0; tabptr.i < ctablesize; tabptr.i++) {
      refresh_watch_dog();
      ptrAss(tabptr, tabrec);
-    for (Uint32 i = 0; i < NO_OF_FRAG_PER_NODE; i++) {
+    for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
        tabptr.p->fragholder[i] = RNIL;
        tabptr.p->fragptrholder[i] = RNIL;
      }//for
@@ -1187,7 +1187,7 @@
    TabrecPtr tabPtr;
    tabPtr.i = tableId;
    ptrCheckGuard(tabPtr, ctablesize, tabrec);
-  for (Uint32 i = 0; i < NO_OF_FRAG_PER_NODE; i++) {
+  for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
      jam();
      if (tabPtr.p->fragholder[i] != RNIL) {
        jam();
@@ -1419,7 +1419,7 @@
  /*  
------------------------------------------------------------------------ 
-- */
  bool Dbacc::addfragtotab(Signal* signal, Uint32 rootIndex, Uint32 fid)
  {
-  for (Uint32 i = 0; i < NO_OF_FRAG_PER_NODE; i++) {
+  for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
      jam();
      if (tabptr.p->fragholder[i] == RNIL) {
        jam();
@@ -2435,7 +2435,7 @@
      ptrCheckGuard(tabptr, ctablesize, tabrec);
      // find fragment (TUX will know it)
      if (req->fragPtrI == RNIL) {
-      for (Uint32 i = 0; i < NO_OF_FRAG_PER_NODE; i++) {
+      for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
          jam();
          if (tabptr.p->fragptrholder[i] != RNIL) {
            rootfragrecptr.i = tabptr.p->fragptrholder[i];
@@ -12184,7 +12184,7 @@

  bool Dbacc::getrootfragmentrec(Signal* signal, RootfragmentrecPtr&  
rootPtr, Uint32 fid)
  {
-  for (Uint32 i = 0; i < NO_OF_FRAG_PER_NODE; i++) {
+  for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
      jam();
      if (tabptr.p->fragholder[i] == fid) {
        jam();
diff -Nru a/ndb/src/kernel/blocks/dblqh/Dblqh.hpp  
b/ndb/src/kernel/blocks/dblqh/Dblqh.hpp
--- a/ndb/src/kernel/blocks/dblqh/Dblqh.hpp     Sat Aug 21 13:15:13 2004
+++ b/ndb/src/kernel/blocks/dblqh/Dblqh.hpp     Sat Aug 21 13:15:13 2004
@@ -64,25 +64,12 @@
  /*       CONSTANTS OF THE LOG PAGES                                     
       */
  /*  
------------------------------------------------------------------------ 
- */
  #define ZPAGE_HEADER_SIZE 32
-#if defined NDB_OSE
-/**
- * Set the fragment log file size to 2Mb in OSE
- * This is done in order to speed up the initial start
- */
-#define ZNO_MBYTES_IN_FILE 2
-#define ZPAGE_SIZE 2048
-#define ZPAGES_IN_MBYTE 128
-#define ZTWOLOG_NO_PAGES_IN_MBYTE 7
-#define ZTWOLOG_PAGE_SIZE 11
-#define ZMAX_MM_BUFFER_SIZE 32     // Main memory window during log  
execution
-#else
  #define ZNO_MBYTES_IN_FILE 16
  #define ZPAGE_SIZE 8192
  #define ZPAGES_IN_MBYTE 32
  #define ZTWOLOG_NO_PAGES_IN_MBYTE 5
  #define ZTWOLOG_PAGE_SIZE 13
  #define ZMAX_MM_BUFFER_SIZE 32     // Main memory window during log  
execution
-#endif

  #define ZMAX_PAGES_WRITTEN 8    // Max pages before writing to disk  
(=> config)
  #define ZMIN_READ_BUFFER_SIZE 2       // Minimum number of pages to  
execute log
@@ -1829,11 +1816,7 @@
       * - There is no more information needed.
       *   The next mbyte will always refer to the start of the next  
mbyte.
       */
-#ifdef NDB_OSE
-    UintR logPageWord[2048]; // Size 8 kbytes
-#else
      UintR logPageWord[8192]; // Size 32 kbytes
-#endif
    };
    typedef Ptr<LogPageRecord> LogPageRecordPtr;

@@ -1855,8 +1838,8 @@
        PREP_DROP_TABLE_DONE = 4
      };

-    UintR fragrec[NO_OF_FRAG_PER_NODE];
-    Uint16 fragid[NO_OF_FRAG_PER_NODE];
+    UintR fragrec[MAX_FRAG_PER_NODE];
+    Uint16 fragid[MAX_FRAG_PER_NODE];
      /**
       * Status of the table
       */
@@ -2643,7 +2626,6 @@
    UintR cfirstfreeLfo;
    UintR clfoFileSize;

-#define ZLOG_PAGE_FILE_SIZE 256   // 8 MByte
    LogPageRecord *logPageRecord;
    LogPageRecordPtr logPagePtr;
    UintR cfirstfreeLogPage;
diff -Nru a/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp  
b/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp
--- a/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp Sat Aug 21 13:15:13 2004
+++ b/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp Sat Aug 21 13:15:13 2004
@@ -33,7 +33,6 @@
    chostFileSize = MAX_NDB_NODES;
    clcpFileSize = ZNO_CONCURRENT_LCP;
    clcpLocrecFileSize = ZLCP_LOCREC_FILE_SIZE;
-  clogPageFileSize = ZLOG_PAGE_FILE_SIZE;
    clfoFileSize = ZLFO_FILE_SIZE;
    clogFileFileSize = 0;
    clogPartFileSize = ZLOG_PART_FILE_SIZE;
@@ -176,7 +175,25 @@
    m_commitAckMarkerHash(m_commitAckMarkerPool),
    c_scanTakeOverHash(c_scanRecordPool)
  {
+  Uint32 log_page_size= 0;
    BLOCK_CONSTRUCTOR(Dblqh);
+
+  const ndb_mgm_configuration_iterator * p =  
conf.getOwnConfigIterator();
+  ndbrequire(p != 0);
+
+  ndb_mgm_get_int_parameter(p, CFG_DB_REDO_BUFFER,
+                           &log_page_size);
+
+  /**
+   * Always set page size in half MBytes
+   */
+  clogPageFileSize= (log_page_size / sizeof(LogPageRecord));
+  Uint32 mega_byte_part= clogPageFileSize & 15;
+  if (mega_byte_part != 0) {
+    jam();
+    clogPageFileSize+= (16 - mega_byte_part);
+  }
+  ndbout << "LQH: No of REDO pages = " << clogPageFileSize << endl;

    addRecSignal(GSN_PACKED_SIGNAL, &Dblqh::execPACKED_SIGNAL);
    addRecSignal(GSN_DEBUG_SIG, &Dblqh::execDEBUG_SIG);
diff -Nru a/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp  
b/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
--- a/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp Sat Aug 21 13:15:13 2004
+++ b/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp Sat Aug 21 13:15:13 2004
@@ -991,7 +991,7 @@
      ptrCheckGuard(tTablePtr, ctabrecFileSize, tablerec);
      FragrecordPtr tFragPtr;
      tFragPtr.i = RNIL;
-    for (Uint32 i = 0; i < NO_OF_FRAG_PER_NODE; i++) {
+    for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
        if (tTablePtr.p->fragid[i] == fragptr.p->fragId) {
          jam();
          tFragPtr.i = tTablePtr.p->fragrec[i];
@@ -1916,7 +1916,7 @@
    tabptr.i = tableId;
    ptrCheckGuard(tabptr, ctabrecFileSize, tablerec);

-  for (Uint32 i = (NO_OF_FRAG_PER_NODE - 1); (Uint32)~i; i--) {
+  for (Uint32 i = (MAX_FRAG_PER_NODE - 1); (Uint32)~i; i--) {
      jam();
      if (tabptr.p->fragid[i] != ZNIL) {
        jam();
@@ -15864,7 +15864,7 @@
  {
    Uint32 indexFound= RNIL;
    fragptr.i = RNIL;
-  for (Uint32 i = (NO_OF_FRAG_PER_NODE - 1); (Uint32)~i; i--) {
+  for (Uint32 i = (MAX_FRAG_PER_NODE - 1); (Uint32)~i; i--) {
      jam();
      if (tabptr.p->fragid[i] == fragId) {
        fragptr.i = tabptr.p->fragrec[i];
@@ -15972,7 +15972,7 @@
  /* ---------------------------------------------------------------- */
  bool Dblqh::getFragmentrec(Signal* signal, Uint32 fragId)
  {
-  for (Uint32 i = (NO_OF_FRAG_PER_NODE - 1); (UintR)~i; i--) {
+  for (Uint32 i = (MAX_FRAG_PER_NODE - 1); (UintR)~i; i--) {
      jam();
      if (tabptr.p->fragid[i] == fragId) {
        fragptr.i = tabptr.p->fragrec[i];
@@ -16394,7 +16394,7 @@
        ptrAss(tabptr, tablerec);
        tabptr.p->tableStatus = Tablerec::NOT_DEFINED;
        tabptr.p->usageCount = 0;
-      for (Uint32 i = 0; i <= (NO_OF_FRAG_PER_NODE - 1); i++) {
+      for (Uint32 i = 0; i <= (MAX_FRAG_PER_NODE - 1); i++) {
          tabptr.p->fragid[i] = ZNIL;
          tabptr.p->fragrec[i] = RNIL;
        }//for
@@ -16716,7 +16716,7 @@
      return false;
    }//if
    seizeFragmentrec(signal);
-  for (Uint32 i = (NO_OF_FRAG_PER_NODE - 1); (Uint32)~i; i--) {
+  for (Uint32 i = (MAX_FRAG_PER_NODE - 1); (Uint32)~i; i--) {
      jam();
      if (tabptr.p->fragid[i] == ZNIL) {
        jam();
diff -Nru a/ndb/src/kernel/blocks/dbtup/Dbtup.hpp  
b/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
--- a/ndb/src/kernel/blocks/dbtup/Dbtup.hpp     Sat Aug 21 13:15:13 2004
+++ b/ndb/src/kernel/blocks/dbtup/Dbtup.hpp     Sat Aug 21 13:15:13 2004
@@ -85,21 +85,12 @@
  #define ZNO_OF_CONCURRENT_OPEN_OP 40        /* NUMBER OF CONCURRENT  
OPENS      */
  #define ZNO_OF_CONCURRENT_WRITE_OP 80       /* NUMBER OF CONCURRENT  
DISK WRITES*/
  #define ZNO_OF_FRAGOPREC 20                 /* NUMBER OF CONCURRENT  
ADD FRAG.  */
-#define ZNO_OF_FRAGREC 64                   /* SIZE   OF FRAGMENT  
FILE.        */
  #define ZNO_OF_LCP_REC 10                   /* NUMBER OF CONCURRENT  
CHECKPOINTS*/
-#define ZNO_OF_OPREC 116                    /* SIZE OF OPERATION  
RECORD FILE   */
  #define TOT_PAGE_RECORD_SPACE 262144        /* SIZE OF PAGE RECORD  
FILE.       */
  #define ZNO_OF_PAGE TOT_PAGE_RECORD_SPACE/ZWORDS_ON_PAGE
  #define ZNO_OF_PAGE_RANGE_REC 128           /* SIZE OF PAGE RANGE FILE  
         */
  #define ZNO_OF_PARALLELL_UNDO_FILES 16      /* NUMBER OF PARALLEL UNDO  
FILES   */
  #define ZNO_OF_RESTART_INFO_REC 10          /* MAXIMUM PARALLELL  
RESTART INFOS */
-#define ZNO_OF_TAB_DESCR_REC 484            /* SIZE OF TABLE  
DESCRIPTOR FILE   */
-#define ZNO_OF_TABLEREC 16                  /* SIZE OF TABLE RECORD  
FILE.      */
-#ifdef NDB_OSE
-#define ZNO_OF_UNDO_PAGE 80  // Must be multiple of 8
-#else
-#define ZNO_OF_UNDO_PAGE 500 // Must be multiple of 8
-#endif
                     /* 24 SEGMENTS WITH 8 PAGES IN EACH*/
                      /* PLUS ONE UNDO BUFFER CACHE      */
  // Undo record identifiers are 32-bits with page index 13-bits
@@ -823,8 +814,8 @@
    // List of ordered indexes
    ArrayList<TupTriggerData> tuxCustomTriggers;

-  Uint32 fragid[2 * NO_OF_FRAG_PER_NODE];
-  Uint32 fragrec[2 * NO_OF_FRAG_PER_NODE];
+  Uint32 fragid[2 * MAX_FRAG_PER_NODE];
+  Uint32 fragrec[2 * MAX_FRAG_PER_NODE];

    struct {
      Uint32 tabUserPtr;
diff -Nru a/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp  
b/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp
--- a/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp  Sat Aug 21 13:15:13 2004
+++ b/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp  Sat Aug 21 13:15:13 2004
@@ -44,16 +44,10 @@
    cnoOfLcpRec = ZNO_OF_LCP_REC;
    cnoOfConcurrentOpenOp = ZNO_OF_CONCURRENT_OPEN_OP;
    cnoOfConcurrentWriteOp = ZNO_OF_CONCURRENT_WRITE_OP;
-  cnoOfFragoprec = 2 * NO_OF_FRAG_PER_NODE;
-  cnoOfFragrec = ZNO_OF_FRAGREC;
-  cnoOfOprec = ZNO_OF_OPREC;
-  cnoOfPage = ZNO_OF_PAGE;
+  cnoOfFragoprec = 2 * MAX_FRAG_PER_NODE;
    cnoOfPageRangeRec = ZNO_OF_PAGE_RANGE_REC;
    cnoOfParallellUndoFiles = ZNO_OF_PARALLELL_UNDO_FILES;
    cnoOfRestartInfoRec = ZNO_OF_RESTART_INFO_REC;
-  cnoOfTablerec = ZNO_OF_TABLEREC;
-  cnoOfTabDescrRec = ZNO_OF_TAB_DESCR_REC;
-  cnoOfUndoPage = ZNO_OF_UNDO_PAGE;
    c_maxTriggersPerTable = ZDEFAULT_MAX_NO_TRIGGERS_PER_TABLE;
    c_noOfBuildIndexRec = 32;

@@ -83,9 +77,26 @@
    c_storedProcPool(),
    c_buildIndexList(c_buildIndexPool)
  {
-
+  Uint32 log_page_size= 0;
    BLOCK_CONSTRUCTOR(Dbtup);

+  const ndb_mgm_configuration_iterator * p =  
conf.getOwnConfigIterator();
+  ndbrequire(p != 0);
+
+  ndb_mgm_get_int_parameter(p, CFG_DB_UNDO_DATA_BUFFER,
+                           &log_page_size);
+
+  /**
+   * Always set page size in half MBytes
+   */
+  cnoOfUndoPage= (log_page_size / sizeof(UndoPage));
+  Uint32 mega_byte_part= cnoOfUndoPage & 15;
+  if (mega_byte_part != 0) {
+    jam();
+    cnoOfUndoPage+= (16 - mega_byte_part);
+  }
+  ndbout << "TUP: No of Undo Pages = " << cnoOfUndoPage << endl;
+
    addRecSignal(GSN_DEBUG_SIG, &Dbtup::execDEBUG_SIG);
    addRecSignal(GSN_CONTINUEB, &Dbtup::execCONTINUEB);

@@ -1049,7 +1060,7 @@
  void
  Dbtup::initTab(Tablerec* const regTabPtr)
  {
-  for (Uint32 i = 0; i < (2 * NO_OF_FRAG_PER_NODE); i++) {
+  for (Uint32 i = 0; i < (2 * MAX_FRAG_PER_NODE); i++) {
      regTabPtr->fragid[i] = RNIL;
      regTabPtr->fragrec[i] = RNIL;
    }//for
@@ -1160,7 +1171,7 @@
    return;
  }//Dbtup::execTUPSEIZEREQ()

-#define printFragment(t){ for(Uint32 i = 0; i < (2 *  
NO_OF_FRAG_PER_NODE);i++){\
+#define printFragment(t){ for(Uint32 i = 0; i < (2 *  
MAX_FRAG_PER_NODE);i++){\
    ndbout_c("table = %d fragid[%d] = %d fragrec[%d] = %d", \
             t.i, t.p->fragid[i], i, t.p->fragrec[i]); }}

diff -Nru a/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp  
b/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp
--- a/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp        Sat Aug 21  
13:15:13 2004
+++ b/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp        Sat Aug 21  
13:15:13 2004
@@ -349,14 +349,14 @@
    do {
      // get fragment
      FragrecordPtr fragPtr;
-    if (buildPtr.p->m_fragNo == 2 * NO_OF_FRAG_PER_NODE) {
+    if (buildPtr.p->m_fragNo == 2 * MAX_FRAG_PER_NODE) {
        ljam();
        // build ready
        buildIndexReply(signal, buildPtr.p);
        c_buildIndexList.release(buildPtr);
        return;
      }
-    ndbrequire(buildPtr.p->m_fragNo < 2 * NO_OF_FRAG_PER_NODE);
+    ndbrequire(buildPtr.p->m_fragNo < 2 * MAX_FRAG_PER_NODE);
      fragPtr.i = tablePtr.p->fragrec[buildPtr.p->m_fragNo];
      if (fragPtr.i == RNIL) {
        ljam();
diff -Nru a/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp  
b/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp
--- a/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp Sat Aug 21 13:15:12 2004
+++ b/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp Sat Aug 21 13:15:12 2004
@@ -188,7 +188,7 @@
  /*  
-------------------------------------------------------------------- */
  bool Dbtup::addfragtotab(Tablerec* const regTabPtr, Uint32 fragId,  
Uint32 fragIndex)
  {
-  for (Uint32 i = 0; i < (2 * NO_OF_FRAG_PER_NODE); i++) {
+  for (Uint32 i = 0; i < (2 * MAX_FRAG_PER_NODE); i++) {
      ljam();
      if (regTabPtr->fragid[i] == RNIL) {
        ljam();
@@ -202,7 +202,7 @@

  void Dbtup::getFragmentrec(FragrecordPtr& regFragPtr, Uint32 fragId,  
Tablerec* const regTabPtr)
  {
-  for (Uint32 i = 0; i < (2 * NO_OF_FRAG_PER_NODE); i++) {
+  for (Uint32 i = 0; i < (2 * MAX_FRAG_PER_NODE); i++) {
      ljam();
      if (regTabPtr->fragid[i] == fragId) {
        ljam();
@@ -456,7 +456,7 @@

  void Dbtup::deleteFragTab(Tablerec* const regTabPtr, Uint32 fragId)
  {
-  for (Uint32 i = 0; i < (2 * NO_OF_FRAG_PER_NODE); i++) {
+  for (Uint32 i = 0; i < (2 * MAX_FRAG_PER_NODE); i++) {
      ljam();
      if (regTabPtr->fragid[i] == fragId) {
        ljam();
@@ -515,7 +515,7 @@
    Uint32 fragIndex = RNIL;
    Uint32 fragId = RNIL;
    Uint32 i = 0;
-  for (i = 0; i < (2 * NO_OF_FRAG_PER_NODE); i++) {
+  for (i = 0; i < (2 * MAX_FRAG_PER_NODE); i++) {
      ljam();
      if (tabPtr.p->fragid[i] != RNIL) {
        ljam();
diff -Nru a/ndb/src/kernel/vm/pc.hpp b/ndb/src/kernel/vm/pc.hpp
--- a/ndb/src/kernel/vm/pc.hpp  Sat Aug 21 13:15:13 2004
+++ b/ndb/src/kernel/vm/pc.hpp  Sat Aug 21 13:15:13 2004
@@ -148,6 +148,7 @@
  // need large value.
  /*  
------------------------------------------------------------------------ 
- */
  #define NO_OF_FRAG_PER_NODE 1
+#define MAX_FRAG_PER_NODE (NO_OF_FRAG_PER_NODE * MAX_REPLICAS)

  /* ---------------------------------------------------------------- */
  // To avoid synching too big chunks at a time we synch after writing

Mikael Ronström, Senior Software Architect
MySQL AB, www.mysql.com

Clustering:
http://www.infoworld.com/article/04/04/14/HNmysqlcluster_1.html

http://www.eweek.com/article2/0,1759,1567546,00.asp

Thread
bk commit into 4.1 tree (mikael:1.1973)Mikael Ronström21 Aug