Commit 0335013f authored by unknown's avatar unknown
Browse files

Bug #19852 Restoring backup made from cluster with full data memory fails

- make sure to allocate just enough pages in the fragments by using the actual
  row count from the backup, to avoid over allocation of pages to fragments, and
  thus avoid the bug


ndb/include/kernel/GlobalSignalNumbers.h:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - distribute fragment complete to all participants to update row count
ndb/include/kernel/signaldata/BackupContinueB.hpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - time slica writing of fragment info to ctl file
ndb/include/kernel/signaldata/BackupImpl.hpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - 32 -> 64 bit on bytes and records
  - new signal fragment complete to all participants
ndb/include/kernel/signaldata/BackupSignalData.hpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - 32 -> 64 bit on bytes and records
ndb/include/kernel/signaldata/DictTabInfo.hpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - add min and max rows to dict tab info
ndb/include/kernel/signaldata/LqhFrag.hpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - added min and max rows to add frag req
ndb/include/kernel/signaldata/TupFrag.hpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - added min and max rows to add frag req
ndb/include/ndbapi/NdbDictionary.hpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - added get/set of min max rows
ndb/src/common/debugger/signaldata/BackupImpl.cpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - 32 -> 64 bit on bytes and records
ndb/src/common/debugger/signaldata/BackupSignalData.cpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - 32 -> 64 bit on bytes and records
ndb/src/common/debugger/signaldata/DictTabInfo.cpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - added min and max rows to dict tab info
ndb/src/common/debugger/signaldata/LqhFrag.cpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - added min and max rows to frag req
ndb/src/kernel/blocks/backup/Backup.cpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - new section in backup with per fragment info in ctl file
  - 32 -> 64 bit on bytes and records
ndb/src/kernel/blocks/backup/Backup.hpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - new section in backup with per fragment info in ctl file
  - 32 -> 64 bit on bytes and records
ndb/src/kernel/blocks/backup/BackupFormat.hpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - new section in backup with per fragment info in ctl file
  - 32 -> 64 bit on bytes and records
ndb/src/kernel/blocks/backup/BackupInit.cpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - new signal fragment complete to all participants
ndb/src/kernel/blocks/dbdict/Dbdict.cpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - added max and min rows to dict table object
ndb/src/kernel/blocks/dbdict/Dbdict.hpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - added max and min rows to dict table object
ndb/src/kernel/blocks/dblqh/Dblqh.hpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - added min and max rows to frag req
ndb/src/kernel/blocks/dblqh/DblqhMain.cpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - added min and max rows to frag req
ndb/src/kernel/blocks/dbtup/Dbtup.hpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - added min and max rows to frag req
ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - added min and max rows to frag req
  - move memory allocation to fragment to after adding of attributes to get correct headsize
  - allocate pages to fragments according to min rows setting
ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - grow page allocation starting from 2 irrespective of first page allocation
ndb/src/mgmsrv/MgmtSrvr.cpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - 32 -> 64 bits on bytes and records
ndb/src/mgmsrv/MgmtSrvr.hpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - 32 -> 64 bits on bytes and records
ndb/src/ndbapi/NdbDictionary.cpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - min and max rows in dict
ndb/src/ndbapi/NdbDictionaryImpl.cpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - min and max rows in dict
ndb/src/ndbapi/NdbDictionaryImpl.hpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - min and max rows in dict
ndb/tools/restore/Restore.cpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - add retrieval of fragment info
ndb/tools/restore/Restore.hpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - add retrieval of fragment info
ndb/tools/restore/consumer_restore.cpp:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - set min in restore to the actual row count (this is the actual bug fix)
sql/ha_ndbcluster.cc:
  Bug #19852  	Restoring backup made from cluster with full data memory fails
  - set min and max rows according to sql definition
parent 86a29d57
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -611,8 +611,6 @@ extern const GlobalSignalNumber NO_OF_SIGNAL_NAMES;
#define GSN_WAIT_GCP_REF                500
#define GSN_WAIT_GCP_CONF               501

/* 502 not used */

/**
 * Trigger and index signals
 */
@@ -682,6 +680,8 @@ extern const GlobalSignalNumber NO_OF_SIGNAL_NAMES;
#define GSN_BACKUP_FRAGMENT_REF         546
#define GSN_BACKUP_FRAGMENT_CONF        547

#define GSN_BACKUP_FRAGMENT_COMPLETE_REP 502

#define GSN_STOP_BACKUP_REQ             548
#define GSN_STOP_BACKUP_REF             549
#define GSN_STOP_BACKUP_CONF            550
+2 −1
Original line number Diff line number Diff line
@@ -31,7 +31,8 @@ private:
    BUFFER_UNDERFLOW  = 1,
    BUFFER_FULL_SCAN  = 2,
    BUFFER_FULL_FRAG_COMPLETE = 3,
    BUFFER_FULL_META  = 4
    BUFFER_FULL_META  = 4,
    BACKUP_FRAGMENT_INFO = 5
  };
};

+19 −3
Original line number Diff line number Diff line
@@ -258,15 +258,31 @@ class BackupFragmentConf {

  friend bool printBACKUP_FRAGMENT_CONF(FILE *, const Uint32 *, Uint32, Uint16);
public:
  STATIC_CONST( SignalLength = 6 );
  STATIC_CONST( SignalLength = 8 );

private:
  Uint32 backupId;
  Uint32 backupPtr;
  Uint32 tableId;
  Uint32 fragmentNo;
  Uint32 noOfRecords;
  Uint32 noOfBytes;
  Uint32 noOfRecordsLow;
  Uint32 noOfBytesLow;
  Uint32 noOfRecordsHigh;
  Uint32 noOfBytesHigh;
};

class BackupFragmentCompleteRep {
public:
  STATIC_CONST( SignalLength = 8 );

  Uint32 backupId;
  Uint32 backupPtr;
  Uint32 tableId;
  Uint32 fragmentNo;
  Uint32 noOfTableRowsLow;
  Uint32 noOfFragmentRowsLow;
  Uint32 noOfTableRowsHigh;
  Uint32 noOfFragmentRowsHigh;
};

class StopBackupReq {
+5 −3
Original line number Diff line number Diff line
@@ -201,17 +201,19 @@ class BackupCompleteRep {

  friend bool printBACKUP_COMPLETE_REP(FILE *, const Uint32 *, Uint32, Uint16);
public:
  STATIC_CONST( SignalLength = 8 + NdbNodeBitmask::Size );
  STATIC_CONST( SignalLength = 10 + NdbNodeBitmask::Size );
private:
  Uint32 senderData;
  Uint32 backupId;
  Uint32 startGCP;
  Uint32 stopGCP;
  Uint32 noOfBytes;
  Uint32 noOfRecords;
  Uint32 noOfBytesLow;
  Uint32 noOfRecordsLow;
  Uint32 noOfLogBytes;
  Uint32 noOfLogRecords;
  NdbNodeBitmask nodes;
  Uint32 noOfBytesHigh;
  Uint32 noOfRecordsHigh;
};

/**
+11 −0
Original line number Diff line number Diff line
@@ -117,9 +117,16 @@ public:
    CustomTriggerId    = 25,
    FrmLen             = 26,
    FrmData            = 27,

    FragmentCount      = 128, // No of fragments in table (!fragment replicas)
    FragmentDataLen    = 129,
    FragmentData       = 130, // CREATE_FRAGMENTATION reply

    MaxRowsLow         = 139,
    MaxRowsHigh        = 140,
    MinRowsLow         = 133,
    MinRowsHigh        = 144,

    TableEnd           = 999,
    
    AttributeName          = 1000, // String, Mandatory
@@ -263,6 +270,10 @@ public:
    Uint32 FragmentCount;
    Uint32 FragmentDataLen;
    Uint16 FragmentData[(MAX_FRAGMENT_DATA_BYTES+1)/2];
    Uint32 MaxRowsLow;
    Uint32 MaxRowsHigh;
    Uint32 MinRowsLow;
    Uint32 MinRowsHigh;
    
    void init();
  };
Loading