Below is the list of changes that have just been committed into a local
5.1 repository of tomas. When tomas does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2007-05-21 11:03:20+02:00, tomas@stripped +13 -0
WL#3861 periodic backup status reporting
storage/ndb/include/kernel/NodeBitmask.hpp@stripped, 2007-05-21 11:03:16+02:00, tomas@stripped +2 -2
status reporting of backup
storage/ndb/include/kernel/signaldata/DumpStateOrd.hpp@stripped, 2007-05-21 11:03:16+02:00, tomas@stripped +10 -0
status reporting of backup
- define dump command for status
storage/ndb/include/mgmapi/mgmapi_config_parameters.h@stripped, 2007-05-21 11:03:16+02:00, tomas@stripped +1 -0
status reporting of backup
- new config parameter for report frequency
storage/ndb/include/mgmapi/ndb_logevent.h@stripped, 2007-05-21 11:03:16+02:00, tomas@stripped +21 -2
status reporting of backup
- new structured event for listening for backup status event
storage/ndb/ndbapi-examples/mgmapi_logevent/mgmapi_logevent.cpp@stripped, 2007-05-21 11:03:16+02:00, tomas@stripped +29 -1
status reporting of backup
- update example program
storage/ndb/ndbapi-examples/mgmapi_logevent2/mgmapi_logevent2.cpp@stripped, 2007-05-21 11:03:16+02:00, tomas@stripped +1 -0
status reporting of backup
- update example program
storage/ndb/src/common/debugger/EventLogger.cpp@stripped, 2007-05-21 11:03:16+02:00, tomas@stripped +18 -0
status reporting of backup
- new structured event for listening for backup status event
- new print function for backup status event
storage/ndb/src/kernel/blocks/backup/Backup.cpp@stripped, 2007-05-21 11:03:16+02:00, tomas@stripped +145 -5
status reporting of backup
- new dump command for backup status
- code for periodic reporting of backup status
storage/ndb/src/kernel/blocks/backup/Backup.hpp@stripped, 2007-05-21 11:03:16+02:00, tomas@stripped +29 -0
status reporting of backup
storage/ndb/src/kernel/blocks/backup/BackupInit.cpp@stripped, 2007-05-21 11:03:16+02:00, tomas@stripped +3 -0
status reporting of backup
storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp@stripped, 2007-05-21 11:03:16+02:00, tomas@stripped +15 -0
status reporting of backup
- explict reporting of backup status
storage/ndb/src/mgmapi/ndb_logevent.cpp@stripped, 2007-05-21 11:03:16+02:00, tomas@stripped +16 -0
status reporting of backup
- add structured backup status event
storage/ndb/src/mgmsrv/ConfigInfo.cpp@stripped, 2007-05-21 11:03:16+02:00, tomas@stripped +12 -0
status reporting of backup
- config parameter to periodic backp status reporting
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: tomas
# Host: whalegate.ndb.mysql.com
# Root: /home/tomas/mysql-5.1-telco-merge
--- 1.33/storage/ndb/include/mgmapi/mgmapi_config_parameters.h 2007-03-07 17:50:22 +01:00
+++ 1.34/storage/ndb/include/mgmapi/mgmapi_config_parameters.h 2007-05-21 11:03:16 +02:00
@@ -112,6 +112,7 @@
#define CFG_DB_CHECKPOINT_SPEED_SR 165
#define CFG_DB_MEMREPORT_FREQUENCY 166
+#define CFG_DB_BACKUP_REPORT_FREQUENCY 167
#define CFG_DB_SGA 198 /* super pool mem */
#define CFG_DB_DATA_MEM_2 199 /* used in special build in 5.1 */
--- 1.4/storage/ndb/include/kernel/NodeBitmask.hpp 2007-01-06 01:21:20 +01:00
+++ 1.5/storage/ndb/include/kernel/NodeBitmask.hpp 2007-05-21 11:03:16 +02:00
@@ -16,8 +16,8 @@
#ifndef NODE_BITMASK_HPP
#define NODE_BITMASK_HPP
-#include <ndb_limits.h>
-#include <kernel_types.h>
+#include "ndb_limits.h"
+#include "kernel_types.h"
#include <Bitmask.hpp>
/**
--- 1.20/storage/ndb/include/kernel/signaldata/DumpStateOrd.hpp 2007-03-02 11:52:08 +01:00
+++ 1.21/storage/ndb/include/kernel/signaldata/DumpStateOrd.hpp 2007-05-21 11:03:16 +02:00
@@ -51,6 +51,16 @@
public:
enum DumpStateType {
+ /* any dumps above this value should go to one block only */
+ OneBlockOnly = 100000,
+
+ _BackupMin = 100000,
+ BackupStatus = 100000,
+ _BackupMax = 100999,
+
+ _TCMin = 101000,
+ _TCMax = 101999,
+
// 1 QMGR Dump information about phase 1 variables
// 13 CMVMI Dump signal counter
// 13 NDBCNTR Dump start phase information
--- 1.46/storage/ndb/src/common/debugger/EventLogger.cpp 2007-03-21 15:39:30 +01:00
+++ 1.47/storage/ndb/src/common/debugger/EventLogger.cpp 2007-05-21 11:03:16 +02:00
@@ -27,6 +27,8 @@
#include <ndbd_exit_codes.h>
+#define make_uint64(a,b) (((Uint64)(a)) + (((Uint64)(b)) << 32))
+
//
// PUBLIC
//
@@ -820,6 +822,21 @@
theData[3], theData[4], theData[6], theData[8],
theData[5], theData[7]);
}
+void getTextBackupStatus(QQQQ) {
+ if (theData[1])
+ BaseString::snprintf(m_text, m_text_len,
+ "Local backup status: backup %u started from node %u\n"
+ " #Records: %llu #LogRecords: %llu\n"
+ " Data: %llu bytes Log: %llu bytes",
+ theData[2], refToNode(theData[1]),
+ make_uint64(theData[5], theData[6]),
+ make_uint64(theData[9], theData[10]),
+ make_uint64(theData[3], theData[4]),
+ make_uint64(theData[7], theData[8]));
+ else
+ BaseString::snprintf(m_text, m_text_len,
+ "Backup not started");
+}
void getTextBackupAborted(QQQQ) {
BaseString::snprintf(m_text, m_text_len,
"Backup %d started from %d has been aborted. Error: %d",
@@ -1025,6 +1042,7 @@
// Backup
ROW(BackupStarted, LogLevel::llBackup, 7, Logger::LL_INFO ),
+ ROW(BackupStatus, LogLevel::llBackup, 7, Logger::LL_INFO ),
ROW(BackupCompleted, LogLevel::llBackup, 7, Logger::LL_INFO ),
ROW(BackupFailedToStart, LogLevel::llBackup, 7, Logger::LL_ALERT),
ROW(BackupAborted, LogLevel::llBackup, 7, Logger::LL_ALERT )
--- 1.111/storage/ndb/src/mgmsrv/ConfigInfo.cpp 2007-05-08 18:45:38 +02:00
+++ 1.112/storage/ndb/src/mgmsrv/ConfigInfo.cpp 2007-05-21 11:03:16 +02:00
@@ -1322,6 +1322,18 @@
"0",
STR_VALUE(MAX_INT_RNIL) },
+ {
+ CFG_DB_BACKUP_REPORT_FREQUENCY,
+ "BackupReportFrequency",
+ DB_TOKEN,
+ "Frequency of backup status reports during backup in seconds",
+ ConfigInfo::CI_USED,
+ false,
+ ConfigInfo::CI_INT,
+ "0",
+ "0",
+ STR_VALUE(MAX_INT_RNIL) },
+
/***************************************************************************
* API
***************************************************************************/
--- 1.65/storage/ndb/src/kernel/blocks/backup/Backup.cpp 2007-03-06 18:36:38 +01:00
+++ 1.66/storage/ndb/src/kernel/blocks/backup/Backup.cpp 2007-05-21 11:03:16 +02:00
@@ -55,6 +55,8 @@
#include <signaldata/WaitGCP.hpp>
#include <signaldata/LCP.hpp>
+#include <signaldata/DumpStateOrd.hpp>
+
#include <NdbTick.h>
static NDB_TICKS startTime;
@@ -384,6 +386,31 @@
{
jamEntry();
+ /* Dump commands used in public interfaces */
+ switch (signal->theData[0]) {
+ case DumpStateOrd::BackupStatus:
+ {
+ BackupRecordPtr ptr;
+ int reported = 0;
+ for(c_backups.first(ptr); ptr.i != RNIL; c_backups.next(ptr))
+ {
+ if (!ptr.p->is_lcp())
+ {
+ reportStatus(signal, ptr);
+ reported++;
+ }
+ }
+ if (!reported)
+ reportStatus(signal, ptr);
+ return;
+ }
+ default:
+ /* continue to debug section */
+ break;
+ }
+
+ /* Debugging or unclassified section */
+
if(signal->theData[0] == 20){
if(signal->length() > 1){
c_defaults.m_dataBufferSize = (signal->theData[1] * 1024 * 1024);
@@ -2274,12 +2301,14 @@
signal->theData[4] = ptr.p->stopGCP;
signal->theData[5] = (Uint32)(ptr.p->noOfBytes & 0xFFFFFFFF);
signal->theData[6] = (Uint32)(ptr.p->noOfRecords & 0xFFFFFFFF);
- signal->theData[7] = ptr.p->noOfLogBytes;
- signal->theData[8] = ptr.p->noOfLogRecords;
+ signal->theData[7] = (Uint32)(ptr.p->noOfLogBytes & 0xFFFFFFFF);
+ signal->theData[8] = (Uint32)(ptr.p->noOfLogRecords & 0xFFFFFFFF);
ptr.p->nodes.copyto(NdbNodeBitmask::Size, signal->theData+9);
signal->theData[9+NdbNodeBitmask::Size] = (Uint32)(ptr.p->noOfBytes >> 32);
signal->theData[10+NdbNodeBitmask::Size] = (Uint32)(ptr.p->noOfRecords >> 32);
- sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 11+NdbNodeBitmask::Size, JBB);
+ signal->theData[11+NdbNodeBitmask::Size] = (Uint32)(ptr.p->noOfLogBytes >> 32);
+ signal->theData[12+NdbNodeBitmask::Size] = (Uint32)(ptr.p->noOfLogRecords >> 32);
+ sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 13+NdbNodeBitmask::Size, JBB);
}
else
{
@@ -2287,6 +2316,77 @@
}
}
+void
+Backup::initReportStatus(Signal *signal, BackupRecordPtr ptr)
+{
+ struct timeval the_time;
+ gettimeofday(&the_time, 0);
+ ptr.p->m_next_report = the_time.tv_sec + m_backup_report_frequency;
+}
+
+void
+Backup::checkReportStatus(Signal *signal, BackupRecordPtr ptr)
+{
+ if (m_backup_report_frequency == 0)
+ return;
+
+ struct timeval the_time;
+ gettimeofday(&the_time, 0);
+ if (the_time.tv_sec > ptr.p->m_next_report)
+ {
+ reportStatus(signal, ptr);
+ ptr.p->m_next_report = the_time.tv_sec + m_backup_report_frequency;
+ }
+}
+
+void
+Backup::reportStatus(Signal* signal, BackupRecordPtr ptr)
+{
+ const int signal_length = 11;
+
+ signal->theData[0] = NDB_LE_BackupStatus;
+ for (int i= 1; i < signal_length; i++)
+ signal->theData[1] = 0;
+
+ if (ptr.i == RNIL ||
+ (ptr.p->m_gsn == 0 &&
+ ptr.p->masterData.gsn == 0))
+ {
+ sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, signal_length, JBB);
+ return;
+ }
+ signal->theData[1] = ptr.p->clientRef;
+ signal->theData[2] = ptr.p->backupId;
+
+ if (ptr.p->dataFilePtr == RNIL)
+ {
+ sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, signal_length, JBB);
+ return;
+ }
+
+ BackupFilePtr dataFilePtr LINT_SET_PTR;
+ ptr.p->files.getPtr(dataFilePtr, ptr.p->dataFilePtr);
+ signal->theData[3] = (Uint32)(dataFilePtr.p->operation.m_bytes_total & 0xFFFFFFFF);
+ signal->theData[4] = (Uint32)(dataFilePtr.p->operation.m_bytes_total >> 32);
+ signal->theData[5] = (Uint32)(dataFilePtr.p->operation.m_records_total & 0xFFFFFFFF);
+ signal->theData[6] = (Uint32)(dataFilePtr.p->operation.m_records_total >> 32);
+
+ if (ptr.p->logFilePtr == RNIL)
+ {
+ sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, signal_length, JBB);
+ return;
+ }
+
+ BackupFilePtr logFilePtr LINT_SET_PTR;
+ ptr.p->files.getPtr(logFilePtr, ptr.p->logFilePtr);
+ signal->theData[7] = (Uint32)(logFilePtr.p->operation.m_bytes_total & 0xFFFFFFFF);
+ signal->theData[8] = (Uint32)(logFilePtr.p->operation.m_bytes_total >> 32);
+ signal->theData[9] = (Uint32)(logFilePtr.p->operation.m_records_total & 0xFFFFFFFF);
+ signal->theData[10]= (Uint32)(logFilePtr.p->operation.m_records_total >> 32);
+
+ sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, signal_length, JBB);
+}
+
/*****************************************************************************
*
* Master functionallity - Abort backup
@@ -2619,8 +2719,12 @@
files[i].p->fileType = BackupFormat::DATA_FILE;
ptr.p->dataFilePtr = files[i].i;
}
+ files[i].p->operation.m_bytes_total = 0;
+ files[i].p->operation.m_records_total = 0;
}//for
+ initReportStatus(signal, ptr);
+
if (!verifyNodesAlive(ptr, ptr.p->nodes)) {
jam();
defineBackupRef(signal, ptr, DefineBackupRef::Undefined);
@@ -3804,6 +3908,7 @@
ndbrequire(len < dataBuffer.getMaxWrite());
dataBuffer.updateWritePtr(len);
noOfBytes += (len << 2);
+ m_bytes_total += (len << 2);
return true;
}
@@ -3989,8 +4094,18 @@
AbortBackupOrd::SignalLength, JBB);
}
else
+ {
sendSignal(DBLQH_REF, GSN_SCAN_NEXTREQ, signal,
ScanFragNextReq::SignalLength, JBB);
+
+ /*
+ check if it is time to report backup status
+ */
+ BackupRecordPtr ptr LINT_SET_PTR;
+ c_backupPool.getPtr(ptr, filePtr.p->backupPtr);
+ if (!ptr.p->is_lcp())
+ checkReportStatus(signal, ptr);
+ }
return;
}//if
@@ -4314,8 +4429,13 @@
trigPtr.p->operation->dataBuffer.updateWritePtr(len + 1);
trigPtr.p->logEntry = 0;
- trigPtr.p->operation->noOfBytes += (len + 1) << 2;
- trigPtr.p->operation->noOfRecords += 1;
+ {
+ const Uint32 tmp = (len + 1) << 2;
+ trigPtr.p->operation->noOfBytes += tmp;
+ trigPtr.p->operation->m_bytes_total += tmp;
+ trigPtr.p->operation->noOfRecords += 1;
+ trigPtr.p->operation->m_records_total += 1;
+ }
}
void
@@ -4749,10 +4869,24 @@
ptr.p->triggers.release();
ptr.p->backupId = ~0;
+ /*
+ report of backup status uses these variables to keep track
+ if files are used
+ */
+ ptr.p->ctlFilePtr = ptr.p->logFilePtr = ptr.p->dataFilePtr = RNIL;
+
if(ptr.p->checkError())
removeBackup(signal, ptr);
else
+ {
+ /*
+ report of backup status uses these variables to keep track
+ if backup ia running and current state
+ */
+ ptr.p->m_gsn = 0;
+ ptr.p->masterData.gsn = 0;
c_backups.release(ptr);
+ }
}
@@ -4798,6 +4932,12 @@
*/
BackupRecordPtr ptr LINT_SET_PTR;
c_backupPool.getPtr(ptr, ptrI);
+ /*
+ report of backup status uses these variables to keep track
+ if backup ia running and current state
+ */
+ ptr.p->m_gsn = 0;
+ ptr.p->masterData.gsn = 0;
c_backups.release(ptr);
}
--- 1.28/storage/ndb/src/kernel/blocks/backup/Backup.hpp 2007-01-06 01:21:21 +01:00
+++ 1.29/storage/ndb/src/kernel/blocks/backup/Backup.hpp 2007-05-21 11:03:16 +02:00
@@ -288,6 +288,13 @@
Uint64 noOfBytes;
Uint32 maxRecordSize;
+ /*
+ keeps track of total written into backup file to be able to show
+ backup status
+ */
+ Uint64 m_records_total;
+ Uint64 m_bytes_total;
+
private:
Uint32* scanStart;
Uint32* scanStop;
@@ -428,8 +435,17 @@
, masterData(b), backup(b)
, ctlFilePtr(RNIL), logFilePtr(RNIL), dataFilePtr(RNIL)
{
+ /*
+ report of backup status uses these variables to keep track
+ if backup ia running and current state
+ */
+ m_gsn = 0;
+ masterData.gsn = 0;
}
+ /* next time to report backup status */
+ Uint32 m_next_report;
+
Uint32 m_gsn;
CompoundState slaveState;
@@ -560,6 +576,8 @@
(MAX_WORDS_META_FILE + BACKUP_WORDS_PER_PAGE - 1) /
BACKUP_WORDS_PER_PAGE);
+ Uint32 m_backup_report_frequency;
+
/**
* Pools
*/
@@ -647,6 +665,16 @@
void abort_scan(Signal*, BackupRecordPtr ptr);
void removeBackup(Signal*, BackupRecordPtr ptr);
+ /*
+ For periodic backup status reporting and explicit backup status reporting
+ */
+ /* Init at start of backup, timers etc... */
+ void initReportStatus(Signal* signal, BackupRecordPtr ptr);
+ /* Sheck timers for reporting at certain points */
+ void checkReportStatus(Signal* signal, BackupRecordPtr ptr);
+ /* Send backup status, invoked either periodically, or explicitly */
+ void reportStatus(Signal* signal, BackupRecordPtr ptr);
+
void sendSTTORRY(Signal*);
void createSequence(Signal* signal);
void createSequenceReply(Signal*, class UtilSequenceConf *);
@@ -742,6 +770,7 @@
* dst_Length = htonl(len);
noOfRecords++;
+ m_records_total++;
return true;
}
--- 1.26/storage/ndb/src/kernel/blocks/backup/BackupInit.cpp 2006-12-23 20:20:15 +01:00
+++ 1.27/storage/ndb/src/kernel/blocks/backup/BackupInit.cpp 2007-05-21 11:03:16 +02:00
@@ -159,6 +159,9 @@
ndb_mgm_get_int_parameter(p, CFG_DB_DISK_SYNCH_SIZE,
&c_defaults.m_disk_synch_size);
+ m_backup_report_frequency = 0;
+ ndb_mgm_get_int_parameter(p, CFG_DB_BACKUP_REPORT_FREQUENCY,
+ &m_backup_report_frequency);
/*
We adjust the disk speed parameters from bytes per second to rather be
words per 100 milliseconds. We convert disk synch size from bytes per
--- 1.49/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp 2007-05-18 11:37:33 +02:00
+++ 1.50/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp 2007-05-21 11:03:16 +02:00
@@ -934,9 +934,24 @@
return tmp[arg/loops] + recurse(tmp, loops - 1, arg);
}
+#define check_block(block,val) \
+(((val) >= DumpStateOrd::_ ## block ## Min) && ((val) <= DumpStateOrd::_ ## block ## Max))
+
void
Cmvmi::execDUMP_STATE_ORD(Signal* signal)
{
+ Uint32 val = signal->theData[0];
+ if (val >= DumpStateOrd::OneBlockOnly)
+ {
+ if (check_block(Backup, val))
+ {
+ sendSignal(BACKUP_REF, GSN_DUMP_STATE_ORD, signal, signal->length(), JBB);
+ }
+ else if (check_block(TC, val))
+ {
+ }
+ return;
+ }
sendSignal(QMGR_REF, GSN_DUMP_STATE_ORD, signal, signal->length(), JBB);
sendSignal(NDBCNTR_REF, GSN_DUMP_STATE_ORD, signal, signal->length(), JBB);
--- 1.4/storage/ndb/ndbapi-examples/mgmapi_logevent2/mgmapi_logevent2.cpp 2007-01-06 01:21:21 +01:00
+++ 1.5/storage/ndb/ndbapi-examples/mgmapi_logevent2/mgmapi_logevent2.cpp 2007-05-21 11:03:16 +02:00
@@ -17,6 +17,7 @@
#include <ndbapi/NdbApi.hpp>
#include <mgmapi.h>
#include <stdio.h>
+#include <stdlib.h>
/*
* export LD_LIBRARY_PATH=../../../libmysql_r/.libs:../../../ndb/src/.libs
--- 1.9/storage/ndb/include/mgmapi/ndb_logevent.h 2006-12-23 20:20:07 +01:00
+++ 1.10/storage/ndb/include/mgmapi/ndb_logevent.h 2007-05-21 11:03:16 +02:00
@@ -163,6 +163,8 @@
/** NDB_MGM_EVENT_CATEGORY_BACKUP */
NDB_LE_BackupFailedToStart = 55,
/** NDB_MGM_EVENT_CATEGORY_BACKUP */
+ NDB_LE_BackupStatus = 62,
+ /** NDB_MGM_EVENT_CATEGORY_BACKUP */
NDB_LE_BackupCompleted = 56,
/** NDB_MGM_EVENT_CATEGORY_BACKUP */
NDB_LE_BackupAborted = 57,
@@ -175,9 +177,9 @@
/** NDB_MGM_EVENT_CATEGORY_STARTUP */
NDB_LE_StartReport = 60
- /* 60 unused */
/* 61 unused */
- /* 62 unused */
+ /* 62 used */
+ /* 63 unused */
};
@@ -628,7 +630,24 @@
unsigned n_log_records;
unsigned n_bytes;
unsigned n_log_bytes;
+ unsigned n_records_hi;
+ unsigned n_log_records_hi;
+ unsigned n_bytes_hi;
+ unsigned n_log_bytes_hi;
} BackupCompleted;
+ /** Log event data @ref NDB_LE_BackupStatus */
+ struct {
+ unsigned starting_node;
+ unsigned backup_id;
+ unsigned n_records_lo;
+ unsigned n_records_hi;
+ unsigned n_log_records_lo;
+ unsigned n_log_records_hi;
+ unsigned n_bytes_lo;
+ unsigned n_bytes_hi;
+ unsigned n_log_bytes_lo;
+ unsigned n_log_bytes_hi;
+ } BackupStatus;
/** Log event data @ref NDB_LE_BackupAborted */
struct {
unsigned starting_node;
--- 1.12/storage/ndb/src/mgmapi/ndb_logevent.cpp 2007-03-13 11:57:39 +01:00
+++ 1.13/storage/ndb/src/mgmapi/ndb_logevent.cpp 2007-05-21 11:03:16 +02:00
@@ -23,6 +23,7 @@
#include <InputStream.hpp>
#include <debugger/EventLogger.hpp>
+#include <kernel/NodeBitmask.hpp>
#include "ndb_logevent.hpp"
@@ -307,6 +308,21 @@
ROW( BackupCompleted, "n_records", 6, n_records),
ROW( BackupCompleted, "n_log_bytes", 7, n_log_bytes),
ROW( BackupCompleted, "n_log_records", 8, n_log_records),
+ ROW( BackupCompleted, "n_bytes_hi", 9+NdbNodeBitmask::Size, n_bytes_hi),
+ ROW( BackupCompleted, "n_records_hi", 10+NdbNodeBitmask::Size, n_records_hi),
+ ROW( BackupCompleted, "n_log_bytes_hi", 11+NdbNodeBitmask::Size, n_log_bytes_hi),
+ ROW( BackupCompleted, "n_log_records_hi", 12+NdbNodeBitmask::Size, n_log_records_hi),
+
+ ROW_FN( BackupStatus, "starting_node", 1, starting_node, ref_to_node),
+ ROW( BackupStatus, "backup_id", 2, backup_id),
+ ROW( BackupStatus, "n_bytes_lo", 3, n_bytes_lo),
+ ROW( BackupStatus, "n_bytes_hi", 4, n_bytes_hi),
+ ROW( BackupStatus, "n_records_lo", 5, n_records_lo),
+ ROW( BackupStatus, "n_records_hi", 6, n_records_hi),
+ ROW( BackupStatus, "n_log_bytes_lo", 7, n_log_bytes_lo),
+ ROW( BackupStatus, "n_log_bytes_hi", 8, n_log_bytes_hi),
+ ROW( BackupStatus, "n_log_records_lo", 9, n_log_records_lo),
+ ROW( BackupStatus, "n_log_records_hi",10, n_log_records_hi),
ROW_FN( BackupAborted, "starting_node", 1, starting_node, ref_to_node),
ROW( BackupAborted, "backup_id", 2, backup_id),
--- 1.3/storage/ndb/ndbapi-examples/mgmapi_logevent/mgmapi_logevent.cpp 2006-12-23 20:33:29 +01:00
+++ 1.4/storage/ndb/ndbapi-examples/mgmapi_logevent/mgmapi_logevent.cpp 2007-05-21 11:03:16 +02:00
@@ -17,9 +17,10 @@
#include <ndbapi/NdbApi.hpp>
#include <mgmapi.h>
#include <stdio.h>
+#include <stdlib.h>
/*
- * export LD_LIBRARY_PATH=../../../libmysql_r/.libs:../../../ndb/src/.libs
+ * export LD_LIBRARY_PATH=../../../../libmysql_r/.libs:../../src/.libs
*/
#define MGMERROR(h) \
@@ -38,6 +39,8 @@
exit(-1); \
}
+#define make_uint64(a,b) (((Uint64)(a)) + (((Uint64)(b)) << 32))
+
int main(int argc, char** argv)
{
NdbMgmHandle h;
@@ -93,9 +96,34 @@
printf(" Starting node ID: %d\n", event.BackupStarted.starting_node);
printf(" Backup ID: %d\n", event.BackupStarted.backup_id);
break;
+ case NDB_LE_BackupStatus:
+ printf("Node %d: BackupStatus\n", event.source_nodeid);
+ printf(" Starting node ID: %d\n", event.BackupStarted.starting_node);
+ printf(" Backup ID: %d\n", event.BackupStarted.backup_id);
+ printf(" Data written: %llu bytes (%llu records)\n",
+ make_uint64(event.BackupStatus.n_bytes_lo,
+ event.BackupStatus.n_bytes_hi),
+ make_uint64(event.BackupStatus.n_records_lo,
+ event.BackupStatus.n_records_hi));
+ printf(" Log written: %llu bytes (%llu records)\n",
+ make_uint64(event.BackupStatus.n_log_bytes_lo,
+ event.BackupStatus.n_log_bytes_hi),
+ make_uint64(event.BackupStatus.n_log_records_lo,
+ event.BackupStatus.n_log_records_hi));
+ break;
case NDB_LE_BackupCompleted:
printf("Node %d: BackupCompleted\n", event.source_nodeid);
printf(" Backup ID: %d\n", event.BackupStarted.backup_id);
+ printf(" Data written: %llu bytes (%llu records)\n",
+ make_uint64(event.BackupCompleted.n_bytes,
+ event.BackupCompleted.n_bytes_hi),
+ make_uint64(event.BackupCompleted.n_records,
+ event.BackupCompleted.n_records_hi));
+ printf(" Log written: %llu bytes (%llu records)\n",
+ make_uint64(event.BackupCompleted.n_log_bytes,
+ event.BackupCompleted.n_log_bytes_hi),
+ make_uint64(event.BackupCompleted.n_log_records,
+ event.BackupCompleted.n_log_records_hi));
break;
case NDB_LE_BackupAborted:
printf("Node %d: BackupAborted\n", event.source_nodeid);
| Thread |
|---|
| • bk commit into 5.1 tree (tomas:1.2545) | tomas | 21 May |