Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
32a3dd85
Commit
32a3dd85
authored
Sep 05, 2005
by
tulin@dl145b.mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge tulin@bk-internal.mysql.com:/home/bk/mysql-4.1
into dl145b.mysql.com:/home/ndbdev/mysql-4.1
parents
7493f615
d5d360b1
Changes
14
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
181 additions
and
73 deletions
+181
-73
ndb/include/util/ndb_opts.h
ndb/include/util/ndb_opts.h
+11
-1
ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp
ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp
+8
-0
ndb/src/kernel/error/ErrorReporter.cpp
ndb/src/kernel/error/ErrorReporter.cpp
+12
-2
ndb/src/kernel/error/ErrorReporter.hpp
ndb/src/kernel/error/ErrorReporter.hpp
+2
-0
ndb/src/kernel/main.cpp
ndb/src/kernel/main.cpp
+37
-0
ndb/src/kernel/vm/Emulator.cpp
ndb/src/kernel/vm/Emulator.cpp
+29
-17
ndb/src/kernel/vm/Emulator.hpp
ndb/src/kernel/vm/Emulator.hpp
+2
-1
ndb/src/mgmsrv/ConfigInfo.cpp
ndb/src/mgmsrv/ConfigInfo.cpp
+8
-8
ndb/src/mgmsrv/MgmtSrvr.cpp
ndb/src/mgmsrv/MgmtSrvr.cpp
+23
-11
ndb/src/mgmsrv/Services.cpp
ndb/src/mgmsrv/Services.cpp
+0
-2
ndb/tools/Makefile.am
ndb/tools/Makefile.am
+1
-1
ndb/tools/ndb_config.cpp
ndb/tools/ndb_config.cpp
+1
-0
ndb/tools/restore/consumer_restore.cpp
ndb/tools/restore/consumer_restore.cpp
+18
-11
ndb/tools/restore/restore_main.cpp
ndb/tools/restore/restore_main.cpp
+29
-19
No files found.
ndb/include/util/ndb_opts.h
View file @
32a3dd85
...
@@ -30,8 +30,14 @@ my_bool opt_ndb_optimized_node_selection
...
@@ -30,8 +30,14 @@ my_bool opt_ndb_optimized_node_selection
bool
opt_endinfo
=
0
;
bool
opt_endinfo
=
0
;
my_bool
opt_ndb_shm
;
my_bool
opt_ndb_shm
;
my_bool
opt_core
;
#define OPT_NDB_CONNECTSTRING 'c'
#define OPT_NDB_CONNECTSTRING 'c'
#if defined VM_TRACE && ( ! ( defined NDB_OSE || defined NDB_SOFTOSE) )
#define OPT_WANT_CORE_DEFAULT 1
#else
#define OPT_WANT_CORE_DEFAULT 0
#endif
#define NDB_STD_OPTS_COMMON \
#define NDB_STD_OPTS_COMMON \
{ "usage", '?', "Display this help and exit.", \
{ "usage", '?', "Display this help and exit.", \
...
@@ -57,7 +63,10 @@ my_bool opt_ndb_shm;
...
@@ -57,7 +63,10 @@ my_bool opt_ndb_shm;
GET_BOOL, OPT_ARG, 1, 0, 0, 0, 0, 0},\
GET_BOOL, OPT_ARG, 1, 0, 0, 0, 0, 0},\
{ "connect-string", OPT_NDB_CONNECTSTRING, "same as --ndb-connectstring",\
{ "connect-string", OPT_NDB_CONNECTSTRING, "same as --ndb-connectstring",\
(gptr*) &opt_connect_str, (gptr*) &opt_connect_str, 0,\
(gptr*) &opt_connect_str, (gptr*) &opt_connect_str, 0,\
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 }
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },\
{ "core-file", OPT_WANT_CORE, "Write core on errors.",\
(gptr*) &opt_core, (gptr*) &opt_core, 0,\
GET_BOOL, NO_ARG, OPT_WANT_CORE_DEFAULT, 0, 0, 0, 0, 0}
#ifndef DBUG_OFF
#ifndef DBUG_OFF
#define NDB_STD_OPTS(prog_name) \
#define NDB_STD_OPTS(prog_name) \
...
@@ -80,6 +89,7 @@ enum ndb_std_options {
...
@@ -80,6 +89,7 @@ enum ndb_std_options {
OPT_NDB_SHM
=
256
,
OPT_NDB_SHM
=
256
,
OPT_NDB_SHM_SIGNUM
,
OPT_NDB_SHM_SIGNUM
,
OPT_NDB_OPTIMIZED_NODE_SELECTION
,
OPT_NDB_OPTIMIZED_NODE_SELECTION
,
OPT_WANT_CORE
,
NDB_STD_OPTIONS_LAST
/* should always be last in this enum */
NDB_STD_OPTIONS_LAST
/* should always be last in this enum */
};
};
...
...
ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp
View file @
32a3dd85
...
@@ -2493,6 +2493,14 @@ void Ndbcntr::Missra::sendNextSTTOR(Signal* signal){
...
@@ -2493,6 +2493,14 @@ void Ndbcntr::Missra::sendNextSTTOR(Signal* signal){
const
Uint32
start
=
currentBlockIndex
;
const
Uint32
start
=
currentBlockIndex
;
if
(
currentStartPhase
==
ZSTART_PHASE_6
)
{
// Ndbd has passed the critical startphases.
// Change error handler from "startup" state
// to normal state.
ErrorReporter
::
setErrorHandlerShutdownType
();
}
for
(;
currentBlockIndex
<
ALL_BLOCKS_SZ
;
currentBlockIndex
++
){
for
(;
currentBlockIndex
<
ALL_BLOCKS_SZ
;
currentBlockIndex
++
){
jam
();
jam
();
if
(
ALL_BLOCKS
[
currentBlockIndex
].
NextSP
==
currentStartPhase
){
if
(
ALL_BLOCKS
[
currentBlockIndex
].
NextSP
==
currentStartPhase
){
...
...
ndb/src/kernel/error/ErrorReporter.cpp
View file @
32a3dd85
...
@@ -152,6 +152,14 @@ ErrorReporter::formatMessage(ErrorCategory type,
...
@@ -152,6 +152,14 @@ ErrorReporter::formatMessage(ErrorCategory type,
return
;
return
;
}
}
NdbShutdownType
ErrorReporter
::
s_errorHandlerShutdownType
=
NST_ErrorHandler
;
void
ErrorReporter
::
setErrorHandlerShutdownType
(
NdbShutdownType
nst
)
{
s_errorHandlerShutdownType
=
nst
;
}
void
void
ErrorReporter
::
handleAssert
(
const
char
*
message
,
const
char
*
file
,
int
line
)
ErrorReporter
::
handleAssert
(
const
char
*
message
,
const
char
*
file
,
int
line
)
{
{
...
@@ -170,7 +178,7 @@ ErrorReporter::handleAssert(const char* message, const char* file, int line)
...
@@ -170,7 +178,7 @@ ErrorReporter::handleAssert(const char* message, const char* file, int line)
WriteMessage
(
assert
,
ERR_ERROR_PRGERR
,
message
,
refMessage
,
WriteMessage
(
assert
,
ERR_ERROR_PRGERR
,
message
,
refMessage
,
theEmulatedJamIndex
,
theEmulatedJam
);
theEmulatedJamIndex
,
theEmulatedJam
);
NdbShutdown
(
NST_ErrorHandler
);
NdbShutdown
(
s_errorHandlerShutdownType
);
}
}
void
void
...
@@ -182,7 +190,7 @@ ErrorReporter::handleThreadAssert(const char* message,
...
@@ -182,7 +190,7 @@ ErrorReporter::handleThreadAssert(const char* message,
BaseString
::
snprintf
(
refMessage
,
100
,
"file: %s lineNo: %d - %s"
,
BaseString
::
snprintf
(
refMessage
,
100
,
"file: %s lineNo: %d - %s"
,
file
,
line
,
message
);
file
,
line
,
message
);
NdbShutdown
(
NST_ErrorHandler
);
NdbShutdown
(
s_errorHandlerShutdownType
);
}
//ErrorReporter::handleThreadAssert()
}
//ErrorReporter::handleThreadAssert()
...
@@ -201,6 +209,8 @@ ErrorReporter::handleError(ErrorCategory type, int messageID,
...
@@ -201,6 +209,8 @@ ErrorReporter::handleError(ErrorCategory type, int messageID,
if
(
messageID
==
ERR_ERROR_INSERT
){
if
(
messageID
==
ERR_ERROR_INSERT
){
NdbShutdown
(
NST_ErrorInsert
);
NdbShutdown
(
NST_ErrorInsert
);
}
else
{
}
else
{
if
(
nst
==
NST_ErrorHandler
)
nst
=
s_errorHandlerShutdownType
;
NdbShutdown
(
nst
);
NdbShutdown
(
nst
);
}
}
}
}
...
...
ndb/src/kernel/error/ErrorReporter.hpp
View file @
32a3dd85
...
@@ -26,6 +26,7 @@
...
@@ -26,6 +26,7 @@
class
ErrorReporter
class
ErrorReporter
{
{
public:
public:
static
void
setErrorHandlerShutdownType
(
NdbShutdownType
nst
=
NST_ErrorHandler
);
static
void
handleAssert
(
const
char
*
message
,
static
void
handleAssert
(
const
char
*
message
,
const
char
*
file
,
const
char
*
file
,
int
line
);
int
line
);
...
@@ -57,6 +58,7 @@ public:
...
@@ -57,6 +58,7 @@ public:
static
const
char
*
formatTimeStampString
();
static
const
char
*
formatTimeStampString
();
private:
private:
static
enum
NdbShutdownType
s_errorHandlerShutdownType
;
};
};
#endif
#endif
ndb/src/kernel/main.cpp
View file @
32a3dd85
...
@@ -45,8 +45,14 @@ extern NdbMutex * theShutdownMutex;
...
@@ -45,8 +45,14 @@ extern NdbMutex * theShutdownMutex;
void
catchsigs
(
bool
ignore
);
// for process signal handling
void
catchsigs
(
bool
ignore
);
// for process signal handling
#define MAX_FAILED_STARTUPS 3
// Flag set by child through SIGUSR1 to signal a failed startup
static
bool
failed_startup_flag
=
false
;
// Counter for consecutive failed startups
static
Uint32
failed_startups
=
0
;
extern
"C"
void
handler_shutdown
(
int
signum
);
// for process signal handling
extern
"C"
void
handler_shutdown
(
int
signum
);
// for process signal handling
extern
"C"
void
handler_error
(
int
signum
);
// for process signal handling
extern
"C"
void
handler_error
(
int
signum
);
// for process signal handling
extern
"C"
void
handler_sigusr1
(
int
signum
);
// child signalling failed restart
// Shows system information
// Shows system information
void
systemInfo
(
const
Configuration
&
conf
,
void
systemInfo
(
const
Configuration
&
conf
,
...
@@ -92,6 +98,8 @@ int main(int argc, char** argv)
...
@@ -92,6 +98,8 @@ int main(int argc, char** argv)
}
}
#ifndef NDB_WIN32
#ifndef NDB_WIN32
signal
(
SIGUSR1
,
handler_sigusr1
);
for
(
pid_t
child
=
fork
();
child
!=
0
;
child
=
fork
()){
for
(
pid_t
child
=
fork
();
child
!=
0
;
child
=
fork
()){
/**
/**
* Parent
* Parent
...
@@ -137,6 +145,20 @@ int main(int argc, char** argv)
...
@@ -137,6 +145,20 @@ int main(int argc, char** argv)
*/
*/
exit
(
0
);
exit
(
0
);
}
}
if
(
!
failed_startup_flag
)
{
// Reset the counter for consecutive failed startups
failed_startups
=
0
;
}
else
if
(
failed_startups
>=
MAX_FAILED_STARTUPS
&&
!
theConfig
->
stopOnError
())
{
/**
* Error shutdown && stopOnError()
*/
g_eventLogger
.
alert
(
"Ndbd has failed %u consecutive startups. Not restarting"
,
failed_startups
);
exit
(
0
);
}
failed_startup_flag
=
false
;
g_eventLogger
.
info
(
"Ndb has terminated (pid %d) restarting"
,
child
);
g_eventLogger
.
info
(
"Ndb has terminated (pid %d) restarting"
,
child
);
theConfig
->
fetch_configuration
();
theConfig
->
fetch_configuration
();
}
}
...
@@ -170,6 +192,9 @@ int main(int argc, char** argv)
...
@@ -170,6 +192,9 @@ int main(int argc, char** argv)
/**
/**
* Do startup
* Do startup
*/
*/
ErrorReporter
::
setErrorHandlerShutdownType
(
NST_ErrorHandlerStartup
);
switch
(
globalData
.
theRestartFlag
){
switch
(
globalData
.
theRestartFlag
){
case
initial_state
:
case
initial_state
:
globalEmulatorData
.
theThreadConfig
->
doStart
(
NodeState
::
SL_CMVMI
);
globalEmulatorData
.
theThreadConfig
->
doStart
(
NodeState
::
SL_CMVMI
);
...
@@ -359,3 +384,15 @@ handler_error(int signum){
...
@@ -359,3 +384,15 @@ handler_error(int signum){
BaseString
::
snprintf
(
errorData
,
40
,
"Signal %d received"
,
signum
);
BaseString
::
snprintf
(
errorData
,
40
,
"Signal %d received"
,
signum
);
ERROR_SET_SIGNAL
(
fatal
,
0
,
errorData
,
__FILE__
);
ERROR_SET_SIGNAL
(
fatal
,
0
,
errorData
,
__FILE__
);
}
}
extern
"C"
void
handler_sigusr1
(
int
signum
)
{
if
(
!
failed_startup_flag
)
{
failed_startups
++
;
failed_startup_flag
=
true
;
}
g_eventLogger
.
info
(
"Received signal %d. Ndbd failed startup (%u)."
,
signum
,
failed_startups
);
}
ndb/src/kernel/vm/Emulator.cpp
View file @
32a3dd85
...
@@ -39,6 +39,7 @@ extern "C" {
...
@@ -39,6 +39,7 @@ extern "C" {
extern
void
(
*
ndb_new_handler
)();
extern
void
(
*
ndb_new_handler
)();
}
}
extern
EventLogger
g_eventLogger
;
extern
EventLogger
g_eventLogger
;
extern
my_bool
opt_core
;
/**
/**
* Declare the global variables
* Declare the global variables
...
@@ -154,6 +155,9 @@ NdbShutdown(NdbShutdownType type,
...
@@ -154,6 +155,9 @@ NdbShutdown(NdbShutdownType type,
case
NST_ErrorHandlerSignal
:
case
NST_ErrorHandlerSignal
:
g_eventLogger
.
info
(
"Error handler signal %s system"
,
shutting
);
g_eventLogger
.
info
(
"Error handler signal %s system"
,
shutting
);
break
;
break
;
case
NST_ErrorHandlerStartup
:
g_eventLogger
.
info
(
"Error handler startup %s system"
,
shutting
);
break
;
case
NST_Restart
:
case
NST_Restart
:
g_eventLogger
.
info
(
"Restarting system"
);
g_eventLogger
.
info
(
"Restarting system"
);
break
;
break
;
...
@@ -165,23 +169,25 @@ NdbShutdown(NdbShutdownType type,
...
@@ -165,23 +169,25 @@ NdbShutdown(NdbShutdownType type,
}
}
const
char
*
exitAbort
=
0
;
const
char
*
exitAbort
=
0
;
#if defined VM_TRACE && ( ! ( defined NDB_OSE || defined NDB_SOFTOSE) )
if
(
opt_core
)
exitAbort
=
"aborting"
;
exitAbort
=
"aborting"
;
#else
else
exitAbort
=
"exiting"
;
exitAbort
=
"exiting"
;
#endif
if
(
type
==
NST_Watchdog
){
if
(
type
==
NST_Watchdog
){
/**
/**
* Very serious, don't attempt to free, just die!!
* Very serious, don't attempt to free, just die!!
*/
*/
g_eventLogger
.
info
(
"Watchdog shutdown completed - %s"
,
exitAbort
);
g_eventLogger
.
info
(
"Watchdog shutdown completed - %s"
,
exitAbort
);
#if defined VM_TRACE && ( ! ( defined NDB_OSE || defined NDB_SOFTOSE) )
if
(
opt_core
)
signal
(
6
,
SIG_DFL
);
{
abort
();
signal
(
6
,
SIG_DFL
);
#else
abort
();
exit
(
-
1
);
}
#endif
else
{
exit
(
-
1
);
}
}
}
#ifndef NDB_WIN32
#ifndef NDB_WIN32
...
@@ -229,13 +235,19 @@ NdbShutdown(NdbShutdownType type,
...
@@ -229,13 +235,19 @@ NdbShutdown(NdbShutdownType type,
}
}
if
(
type
!=
NST_Normal
&&
type
!=
NST_Restart
){
if
(
type
!=
NST_Normal
&&
type
!=
NST_Restart
){
// Signal parent that error occured during startup
if
(
type
==
NST_ErrorHandlerStartup
)
kill
(
getppid
(),
SIGUSR1
);
g_eventLogger
.
info
(
"Error handler shutdown completed - %s"
,
exitAbort
);
g_eventLogger
.
info
(
"Error handler shutdown completed - %s"
,
exitAbort
);
#if ( defined VM_TRACE || defined ERROR_INSERT ) && ( ! ( defined NDB_OSE || defined NDB_SOFTOSE) )
if
(
opt_core
)
signal
(
6
,
SIG_DFL
);
{
abort
();
signal
(
6
,
SIG_DFL
);
#else
abort
();
exit
(
-
1
);
}
#endif
else
{
exit
(
-
1
);
}
}
}
/**
/**
...
...
ndb/src/kernel/vm/Emulator.hpp
View file @
32a3dd85
...
@@ -83,7 +83,8 @@ enum NdbShutdownType {
...
@@ -83,7 +83,8 @@ enum NdbShutdownType {
NST_ErrorHandler
,
NST_ErrorHandler
,
NST_ErrorHandlerSignal
,
NST_ErrorHandlerSignal
,
NST_Restart
,
NST_Restart
,
NST_ErrorInsert
NST_ErrorInsert
,
NST_ErrorHandlerStartup
};
};
enum
NdbRestartType
{
enum
NdbRestartType
{
...
...
ndb/src/mgmsrv/ConfigInfo.cpp
View file @
32a3dd85
...
@@ -25,6 +25,7 @@
...
@@ -25,6 +25,7 @@
#include <m_string.h>
#include <m_string.h>
extern
my_bool
opt_ndb_shm
;
extern
my_bool
opt_ndb_shm
;
extern
my_bool
opt_core
;
#define MAX_LINE_LENGTH 255
#define MAX_LINE_LENGTH 255
#define KEY_INTERNAL 0
#define KEY_INTERNAL 0
...
@@ -2140,11 +2141,10 @@ static void require(bool v)
...
@@ -2140,11 +2141,10 @@ static void require(bool v)
{
{
if
(
!
v
)
if
(
!
v
)
{
{
#ifndef DBUG_OFF
if
(
opt_core
)
abort
();
abort
();
#else
else
exit
(
-
1
);
exit
(
-
1
);
#endif
}
}
}
}
...
@@ -2214,7 +2214,7 @@ ConfigInfo::ConfigInfo()
...
@@ -2214,7 +2214,7 @@ ConfigInfo::ConfigInfo()
ndbout
<<
"Error: Parameter "
<<
param
.
_fname
ndbout
<<
"Error: Parameter "
<<
param
.
_fname
<<
" defined twice in section "
<<
param
.
_section
<<
" defined twice in section "
<<
param
.
_section
<<
"."
<<
endl
;
<<
"."
<<
endl
;
exit
(
-
1
);
require
(
false
);
}
}
// Add new pinfo to section
// Add new pinfo to section
...
@@ -2264,7 +2264,7 @@ ConfigInfo::ConfigInfo()
...
@@ -2264,7 +2264,7 @@ ConfigInfo::ConfigInfo()
ndbout
<<
"Check that each entry has a section failed."
<<
endl
;
ndbout
<<
"Check that each entry has a section failed."
<<
endl
;
ndbout
<<
"Parameter
\"
"
<<
m_ParamInfo
[
i
].
_fname
<<
endl
;
ndbout
<<
"Parameter
\"
"
<<
m_ParamInfo
[
i
].
_fname
<<
endl
;
ndbout
<<
"Edit file "
<<
__FILE__
<<
"."
<<
endl
;
ndbout
<<
"Edit file "
<<
__FILE__
<<
"."
<<
endl
;
exit
(
-
1
);
require
(
false
);
}
}
if
(
m_ParamInfo
[
i
].
_type
==
ConfigInfo
::
CI_SECTION
)
if
(
m_ParamInfo
[
i
].
_type
==
ConfigInfo
::
CI_SECTION
)
...
@@ -2277,7 +2277,7 @@ ConfigInfo::ConfigInfo()
...
@@ -2277,7 +2277,7 @@ ConfigInfo::ConfigInfo()
<<
"
\"
does not exist in section
\"
"
<<
"
\"
does not exist in section
\"
"
<<
m_ParamInfo
[
i
].
_section
<<
"
\"
."
<<
endl
;
<<
m_ParamInfo
[
i
].
_section
<<
"
\"
."
<<
endl
;
ndbout
<<
"Edit file "
<<
__FILE__
<<
"."
<<
endl
;
ndbout
<<
"Edit file "
<<
__FILE__
<<
"."
<<
endl
;
exit
(
-
1
);
require
(
false
);
}
}
}
}
}
}
...
...
ndb/src/mgmsrv/MgmtSrvr.cpp
View file @
32a3dd85
...
@@ -65,6 +65,18 @@
...
@@ -65,6 +65,18 @@
extern
int
global_flag_send_heartbeat_now
;
extern
int
global_flag_send_heartbeat_now
;
extern
int
g_no_nodeid_checks
;
extern
int
g_no_nodeid_checks
;
extern
my_bool
opt_core
;
static
void
require
(
bool
v
)
{
if
(
!
v
)
{
if
(
opt_core
)
abort
();
else
exit
(
-
1
);
}
}
void
*
void
*
MgmtSrvr
::
logLevelThread_C
(
void
*
m
)
MgmtSrvr
::
logLevelThread_C
(
void
*
m
)
...
@@ -436,14 +448,14 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server,
...
@@ -436,14 +448,14 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server,
if
(
tmp_nodeid
==
0
)
if
(
tmp_nodeid
==
0
)
{
{
ndbout_c
(
m_config_retriever
->
getErrorString
());
ndbout_c
(
m_config_retriever
->
getErrorString
());
exit
(
-
1
);
require
(
false
);
}
}
// read config from other managent server
// read config from other managent server
_config
=
fetchConfig
();
_config
=
fetchConfig
();
if
(
_config
==
0
)
if
(
_config
==
0
)
{
{
ndbout
<<
m_config_retriever
->
getErrorString
()
<<
endl
;
ndbout
<<
m_config_retriever
->
getErrorString
()
<<
endl
;
exit
(
-
1
);
require
(
false
);
}
}
_ownNodeId
=
tmp_nodeid
;
_ownNodeId
=
tmp_nodeid
;
}
}
...
@@ -454,7 +466,7 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server,
...
@@ -454,7 +466,7 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server,
_config
=
readConfig
();
_config
=
readConfig
();
if
(
_config
==
0
)
{
if
(
_config
==
0
)
{
ndbout
<<
"Unable to read config file"
<<
endl
;
ndbout
<<
"Unable to read config file"
<<
endl
;
exit
(
-
1
);
require
(
false
);
}
}
}
}
...
@@ -511,7 +523,7 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server,
...
@@ -511,7 +523,7 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server,
if
((
m_node_id_mutex
=
NdbMutex_Create
())
==
0
)
if
((
m_node_id_mutex
=
NdbMutex_Create
())
==
0
)
{
{
ndbout
<<
"mutex creation failed line = "
<<
__LINE__
<<
endl
;
ndbout
<<
"mutex creation failed line = "
<<
__LINE__
<<
endl
;
exit
(
-
1
);
require
(
false
);
}
}
if
(
_ownNodeId
==
0
)
// we did not get node id from other server
if
(
_ownNodeId
==
0
)
// we did not get node id from other server
...
@@ -522,7 +534,7 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server,
...
@@ -522,7 +534,7 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server,
0
,
0
,
error_string
)){
0
,
0
,
error_string
)){
ndbout
<<
"Unable to obtain requested nodeid: "
ndbout
<<
"Unable to obtain requested nodeid: "
<<
error_string
.
c_str
()
<<
endl
;
<<
error_string
.
c_str
()
<<
endl
;
exit
(
-
1
);
require
(
false
);
}
}
_ownNodeId
=
tmp
;
_ownNodeId
=
tmp
;
}
}
...
@@ -533,7 +545,7 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server,
...
@@ -533,7 +545,7 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server,
_ownNodeId
))
_ownNodeId
))
{
{
ndbout
<<
m_config_retriever
->
getErrorString
()
<<
endl
;
ndbout
<<
m_config_retriever
->
getErrorString
()
<<
endl
;
exit
(
-
1
);
require
(
false
);
}
}
}
}
...
@@ -2203,18 +2215,18 @@ MgmtSrvr::alloc_node_id(NodeId * nodeId,
...
@@ -2203,18 +2215,18 @@ MgmtSrvr::alloc_node_id(NodeId * nodeId,
iter
(
*
(
ndb_mgm_configuration
*
)
_config
->
m_configValues
,
CFG_SECTION_NODE
);
iter
(
*
(
ndb_mgm_configuration
*
)
_config
->
m_configValues
,
CFG_SECTION_NODE
);
for
(
iter
.
first
();
iter
.
valid
();
iter
.
next
())
{
for
(
iter
.
first
();
iter
.
valid
();
iter
.
next
())
{
unsigned
tmp
=
0
;
unsigned
tmp
=
0
;
if
(
iter
.
get
(
CFG_NODE_ID
,
&
tmp
))
abort
(
);
if
(
iter
.
get
(
CFG_NODE_ID
,
&
tmp
))
require
(
false
);
if
(
*
nodeId
&&
*
nodeId
!=
tmp
)
if
(
*
nodeId
&&
*
nodeId
!=
tmp
)
continue
;
continue
;
found_matching_id
=
true
;
found_matching_id
=
true
;
if
(
iter
.
get
(
CFG_TYPE_OF_SECTION
,
&
type_c
))
abort
(
);
if
(
iter
.
get
(
CFG_TYPE_OF_SECTION
,
&
type_c
))
require
(
false
);
if
(
type_c
!=
(
unsigned
)
type
)
if
(
type_c
!=
(
unsigned
)
type
)
continue
;
continue
;
found_matching_type
=
true
;
found_matching_type
=
true
;
if
(
connected_nodes
.
get
(
tmp
))
if
(
connected_nodes
.
get
(
tmp
))
continue
;
continue
;
found_free_node
=
true
;
found_free_node
=
true
;
if
(
iter
.
get
(
CFG_NODE_HOST
,
&
config_hostname
))
abort
(
);
if
(
iter
.
get
(
CFG_NODE_HOST
,
&
config_hostname
))
require
(
false
);
if
(
config_hostname
&&
config_hostname
[
0
]
==
0
)
if
(
config_hostname
&&
config_hostname
[
0
]
==
0
)
config_hostname
=
0
;
config_hostname
=
0
;
else
if
(
client_addr
)
{
else
if
(
client_addr
)
{
...
@@ -2561,7 +2573,7 @@ MgmtSrvr::backupCallback(BackupEvent & event)
...
@@ -2561,7 +2573,7 @@ MgmtSrvr::backupCallback(BackupEvent & event)
int
int
MgmtSrvr
::
repCommand
(
Uint32
*
repReqId
,
Uint32
request
,
bool
waitCompleted
)
MgmtSrvr
::
repCommand
(
Uint32
*
repReqId
,
Uint32
request
,
bool
waitCompleted
)
{
{
abort
(
);
require
(
false
);
return
0
;
return
0
;
}
}
...
@@ -2715,7 +2727,7 @@ MgmtSrvr::setDbParameter(int node, int param, const char * value,
...
@@ -2715,7 +2727,7 @@ MgmtSrvr::setDbParameter(int node, int param, const char * value,
ndbout_c
(
"Updating node %d param: %d to %s"
,
node
,
param
,
val_char
);
ndbout_c
(
"Updating node %d param: %d to %s"
,
node
,
param
,
val_char
);
break
;
break
;
default:
default:
abort
(
);
require
(
false
);
}
}
assert
(
res
);
assert
(
res
);
}
while
(
node
==
0
&&
iter
.
next
()
==
0
);
}
while
(
node
==
0
&&
iter
.
next
()
==
0
);
...
...
ndb/src/mgmsrv/Services.cpp
View file @
32a3dd85
...
@@ -343,8 +343,6 @@ MgmApiSession::getConfig_old(Parser_t::Context &ctx) {
...
@@ -343,8 +343,6 @@ MgmApiSession::getConfig_old(Parser_t::Context &ctx) {
}
}
#endif
/* MGM_GET_CONFIG_BACKWARDS_COMPAT */
#endif
/* MGM_GET_CONFIG_BACKWARDS_COMPAT */
inline
void
require
(
bool
b
){
if
(
!
b
)
abort
();
}
void
void
MgmApiSession
::
getConfig
(
Parser_t
::
Context
&
ctx
,
MgmApiSession
::
getConfig
(
Parser_t
::
Context
&
ctx
,
const
class
Properties
&
args
)
{
const
class
Properties
&
args
)
{
...
...
ndb/tools/Makefile.am
View file @
32a3dd85
...
@@ -30,7 +30,7 @@ ndb_restore_SOURCES = restore/restore_main.cpp \
...
@@ -30,7 +30,7 @@ ndb_restore_SOURCES = restore/restore_main.cpp \
restore/consumer.cpp
\
restore/consumer.cpp
\
restore/consumer_restore.cpp
\
restore/consumer_restore.cpp
\
restore/consumer_printer.cpp
\
restore/consumer_printer.cpp
\
restore/Restore.cpp
restore/Restore.cpp
$(tools_common_sources)
ndb_config_SOURCES
=
ndb_config.cpp
\
ndb_config_SOURCES
=
ndb_config.cpp
\
../src/mgmsrv/Config.cpp
\
../src/mgmsrv/Config.cpp
\
...
...
ndb/tools/ndb_config.cpp
View file @
32a3dd85
...
@@ -42,6 +42,7 @@ static const char * g_field_delimiter=",";
...
@@ -42,6 +42,7 @@ static const char * g_field_delimiter=",";
static
const
char
*
g_row_delimiter
=
" "
;
static
const
char
*
g_row_delimiter
=
" "
;
int
g_print_full_config
,
opt_ndb_shm
;
int
g_print_full_config
,
opt_ndb_shm
;
my_bool
opt_core
;
typedef
ndb_mgm_configuration_iterator
Iter
;
typedef
ndb_mgm_configuration_iterator
Iter
;
...
...
ndb/tools/restore/consumer_restore.cpp
View file @
32a3dd85
...
@@ -14,9 +14,12 @@
...
@@ -14,9 +14,12 @@
along with this program; if not, write to the Free Software
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#include <NDBT_ReturnCodes.h>
#include "consumer_restore.hpp"
#include "consumer_restore.hpp"
#include <NdbSleep.h>
#include <NdbSleep.h>
extern
my_bool
opt_core
;
extern
FilteredNdbOut
err
;
extern
FilteredNdbOut
err
;
extern
FilteredNdbOut
info
;
extern
FilteredNdbOut
info
;
extern
FilteredNdbOut
debug
;
extern
FilteredNdbOut
debug
;
...
@@ -458,7 +461,11 @@ bool BackupRestore::errorHandler(restore_callback_t *cb)
...
@@ -458,7 +461,11 @@ bool BackupRestore::errorHandler(restore_callback_t *cb)
void
BackupRestore
::
exitHandler
()
void
BackupRestore
::
exitHandler
()
{
{
release
();
release
();
exit
(
-
1
);
NDBT_ProgramExit
(
NDBT_FAILED
);
if
(
opt_core
)
abort
();
else
exit
(
NDBT_FAILED
);
}
}
...
@@ -492,7 +499,7 @@ BackupRestore::logEntry(const LogEntry & tup)
...
@@ -492,7 +499,7 @@ BackupRestore::logEntry(const LogEntry & tup)
{
{
// Deep shit, TODO: handle the error
// Deep shit, TODO: handle the error
err
<<
"Cannot start transaction"
<<
endl
;
err
<<
"Cannot start transaction"
<<
endl
;
exit
(
-
1
);
exit
Handler
(
);
}
// if
}
// if
const
NdbDictionary
::
Table
*
table
=
get_table
(
tup
.
m_table
->
m_dictTable
);
const
NdbDictionary
::
Table
*
table
=
get_table
(
tup
.
m_table
->
m_dictTable
);
...
@@ -500,7 +507,7 @@ BackupRestore::logEntry(const LogEntry & tup)
...
@@ -500,7 +507,7 @@ BackupRestore::logEntry(const LogEntry & tup)
if
(
op
==
NULL
)
if
(
op
==
NULL
)
{
{
err
<<
"Cannot get operation: "
<<
trans
->
getNdbError
()
<<
endl
;
err
<<
"Cannot get operation: "
<<
trans
->
getNdbError
()
<<
endl
;
exit
(
-
1
);
exit
Handler
(
);
}
// if
}
// if
int
check
=
0
;
int
check
=
0
;
...
@@ -518,13 +525,13 @@ BackupRestore::logEntry(const LogEntry & tup)
...
@@ -518,13 +525,13 @@ BackupRestore::logEntry(const LogEntry & tup)
default:
default:
err
<<
"Log entry has wrong operation type."
err
<<
"Log entry has wrong operation type."
<<
" Exiting..."
;
<<
" Exiting..."
;
exit
(
-
1
);
exit
Handler
(
);
}
}
if
(
check
!=
0
)
if
(
check
!=
0
)
{
{
err
<<
"Error defining op: "
<<
trans
->
getNdbError
()
<<
endl
;
err
<<
"Error defining op: "
<<
trans
->
getNdbError
()
<<
endl
;
exit
(
-
1
);
exit
Handler
(
);
}
// if
}
// if
Bitmask
<
4096
>
keys
;
Bitmask
<
4096
>
keys
;
...
@@ -553,7 +560,7 @@ BackupRestore::logEntry(const LogEntry & tup)
...
@@ -553,7 +560,7 @@ BackupRestore::logEntry(const LogEntry & tup)
if
(
check
!=
0
)
if
(
check
!=
0
)
{
{
err
<<
"Error defining op: "
<<
trans
->
getNdbError
()
<<
endl
;
err
<<
"Error defining op: "
<<
trans
->
getNdbError
()
<<
endl
;
exit
(
-
1
);
exit
Handler
(
);
}
// if
}
// if
}
}
...
@@ -582,7 +589,7 @@ BackupRestore::logEntry(const LogEntry & tup)
...
@@ -582,7 +589,7 @@ BackupRestore::logEntry(const LogEntry & tup)
if
(
!
ok
)
if
(
!
ok
)
{
{
err
<<
"execute failed: "
<<
errobj
<<
endl
;
err
<<
"execute failed: "
<<
errobj
<<
endl
;
exit
(
-
1
);
exit
Handler
(
);
}
}
}
}
...
@@ -629,7 +636,7 @@ BackupRestore::tuple(const TupleS & tup)
...
@@ -629,7 +636,7 @@ BackupRestore::tuple(const TupleS & tup)
{
{
// Deep shit, TODO: handle the error
// Deep shit, TODO: handle the error
ndbout << "Cannot start transaction" << endl;
ndbout << "Cannot start transaction" << endl;
exit
(-1
);
exit
Handler(
);
} // if
} // if
const TableS * table = tup.getTable();
const TableS * table = tup.getTable();
...
@@ -638,7 +645,7 @@ BackupRestore::tuple(const TupleS & tup)
...
@@ -638,7 +645,7 @@ BackupRestore::tuple(const TupleS & tup)
{
{
ndbout << "Cannot get operation: ";
ndbout << "Cannot get operation: ";
ndbout << trans->getNdbError() << endl;
ndbout << trans->getNdbError() << endl;
exit
(-1
);
exit
Handler(
);
} // if
} // if
// TODO: check return value and handle error
// TODO: check return value and handle error
...
@@ -646,7 +653,7 @@ BackupRestore::tuple(const TupleS & tup)
...
@@ -646,7 +653,7 @@ BackupRestore::tuple(const TupleS & tup)
{
{
ndbout << "writeTuple call failed: ";
ndbout << "writeTuple call failed: ";
ndbout << trans->getNdbError() << endl;
ndbout << trans->getNdbError() << endl;
exit
(-1
);
exit
Handler(
);
} // if
} // if
for (int i = 0; i < tup.getNoOfAttributes(); i++)
for (int i = 0; i < tup.getNoOfAttributes(); i++)
...
@@ -680,7 +687,7 @@ BackupRestore::tuple(const TupleS & tup)
...
@@ -680,7 +687,7 @@ BackupRestore::tuple(const TupleS & tup)
{
{
ndbout << "execute failed: ";
ndbout << "execute failed: ";
ndbout << trans->getNdbError() << endl;
ndbout << trans->getNdbError() << endl;
exit
(-1
);
exit
Handler(
);
}
}
m_ndb->closeTransaction(trans);
m_ndb->closeTransaction(trans);
if (ret == 0)
if (ret == 0)
...
...
ndb/tools/restore/restore_main.cpp
View file @
32a3dd85
...
@@ -20,6 +20,7 @@
...
@@ -20,6 +20,7 @@
#include <ndb_limits.h>
#include <ndb_limits.h>
#include <NdbTCP.h>
#include <NdbTCP.h>
#include <NdbOut.hpp>
#include <NdbOut.hpp>
#include <NDBT_ReturnCodes.h>
#include "consumer_restore.hpp"
#include "consumer_restore.hpp"
#include "consumer_printer.hpp"
#include "consumer_printer.hpp"
...
@@ -116,14 +117,14 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
...
@@ -116,14 +117,14 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
if
(
ga_nodeId
==
0
)
if
(
ga_nodeId
==
0
)
{
{
printf
(
"Error in --nodeid,-n setting, see --help
\n
"
);
printf
(
"Error in --nodeid,-n setting, see --help
\n
"
);
exit
(
1
);
exit
(
NDBT_ProgramExit
(
NDBT_WRONGARGS
)
);
}
}
break
;
break
;
case
'b'
:
case
'b'
:
if
(
ga_backupId
==
0
)
if
(
ga_backupId
==
0
)
{
{
printf
(
"Error in --backupid,-b setting, see --help
\n
"
);
printf
(
"Error in --backupid,-b setting, see --help
\n
"
);
exit
(
1
);
exit
(
NDBT_ProgramExit
(
NDBT_WRONGARGS
)
);
}
}
break
;
break
;
}
}
...
@@ -136,7 +137,7 @@ readArguments(int *pargc, char*** pargv)
...
@@ -136,7 +137,7 @@ readArguments(int *pargc, char*** pargv)
load_defaults
(
"my"
,
load_default_groups
,
pargc
,
pargv
);
load_defaults
(
"my"
,
load_default_groups
,
pargc
,
pargv
);
if
(
handle_options
(
pargc
,
pargv
,
my_long_options
,
get_one_option
))
if
(
handle_options
(
pargc
,
pargv
,
my_long_options
,
get_one_option
))
{
{
exit
(
1
);
exit
(
NDBT_ProgramExit
(
NDBT_WRONGARGS
)
);
}
}
BackupPrinter
*
printer
=
new
BackupPrinter
();
BackupPrinter
*
printer
=
new
BackupPrinter
();
...
@@ -226,6 +227,15 @@ free_data_callback()
...
@@ -226,6 +227,15 @@ free_data_callback()
g_consumers
[
i
]
->
tuple_free
();
g_consumers
[
i
]
->
tuple_free
();
}
}
static
void
exitHandler
(
int
code
)
{
NDBT_ProgramExit
(
code
);
if
(
opt_core
)
abort
();
else
exit
(
code
);
}
int
int
main
(
int
argc
,
char
**
argv
)
main
(
int
argc
,
char
**
argv
)
{
{
...
@@ -233,7 +243,7 @@ main(int argc, char** argv)
...
@@ -233,7 +243,7 @@ main(int argc, char** argv)
if
(
!
readArguments
(
&
argc
,
&
argv
))
if
(
!
readArguments
(
&
argc
,
&
argv
))
{
{
return
-
1
;
exitHandler
(
NDBT_FAILED
)
;
}
}
Ndb
::
setConnectString
(
opt_connect_str
);
Ndb
::
setConnectString
(
opt_connect_str
);
...
@@ -245,7 +255,7 @@ main(int argc, char** argv)
...
@@ -245,7 +255,7 @@ main(int argc, char** argv)
if
(
!
metaData
.
readHeader
())
if
(
!
metaData
.
readHeader
())
{
{
ndbout
<<
"Failed to read "
<<
metaData
.
getFilename
()
<<
endl
<<
endl
;
ndbout
<<
"Failed to read "
<<
metaData
.
getFilename
()
<<
endl
<<
endl
;
return
-
1
;
exitHandler
(
NDBT_FAILED
)
;
}
}
const
BackupFormat
::
FileHeader
&
tmp
=
metaData
.
getFileHeader
();
const
BackupFormat
::
FileHeader
&
tmp
=
metaData
.
getFileHeader
();
...
@@ -263,20 +273,20 @@ main(int argc, char** argv)
...
@@ -263,20 +273,20 @@ main(int argc, char** argv)
if
(
res
==
0
)
if
(
res
==
0
)
{
{
ndbout_c
(
"Restore: Failed to load content"
);
ndbout_c
(
"Restore: Failed to load content"
);
return
-
1
;
exitHandler
(
NDBT_FAILED
)
;
}
}
if
(
metaData
.
getNoOfTables
()
==
0
)
if
(
metaData
.
getNoOfTables
()
==
0
)
{
{
ndbout_c
(
"Restore: The backup contains no tables "
);
ndbout_c
(
"Restore: The backup contains no tables "
);
return
-
1
;
exitHandler
(
NDBT_FAILED
)
;
}
}
if
(
!
metaData
.
validateFooter
())
if
(
!
metaData
.
validateFooter
())
{
{
ndbout_c
(
"Restore: Failed to validate footer."
);
ndbout_c
(
"Restore: Failed to validate footer."
);
return
-
1
;
exitHandler
(
NDBT_FAILED
)
;
}
}
Uint32
i
;
Uint32
i
;
...
@@ -285,7 +295,7 @@ main(int argc, char** argv)
...
@@ -285,7 +295,7 @@ main(int argc, char** argv)
if
(
!
g_consumers
[
i
]
->
init
())
if
(
!
g_consumers
[
i
]
->
init
())
{
{
clearConsumers
();
clearConsumers
();
return
-
11
;
exitHandler
(
NDBT_FAILED
)
;
}
}
}
}
...
@@ -300,7 +310,7 @@ main(int argc, char** argv)
...
@@ -300,7 +310,7 @@ main(int argc, char** argv)
ndbout_c
(
"Restore: Failed to restore table: %s. "
ndbout_c
(
"Restore: Failed to restore table: %s. "
"Exiting..."
,
"Exiting..."
,
metaData
[
i
]
->
getTableName
());
metaData
[
i
]
->
getTableName
());
return
-
11
;
exitHandler
(
NDBT_FAILED
)
;
}
}
}
}
}
}
...
@@ -309,7 +319,7 @@ main(int argc, char** argv)
...
@@ -309,7 +319,7 @@ main(int argc, char** argv)
if
(
!
g_consumers
[
i
]
->
endOfTables
())
if
(
!
g_consumers
[
i
]
->
endOfTables
())
{
{
ndbout_c
(
"Restore: Failed while closing tables"
);
ndbout_c
(
"Restore: Failed while closing tables"
);
return
-
11
;
exitHandler
(
NDBT_FAILED
)
;
}
}
if
(
ga_restore
||
ga_print
)
if
(
ga_restore
||
ga_print
)
...
@@ -322,7 +332,7 @@ main(int argc, char** argv)
...
@@ -322,7 +332,7 @@ main(int argc, char** argv)
if
(
!
dataIter
.
readHeader
())
if
(
!
dataIter
.
readHeader
())
{
{
ndbout
<<
"Failed to read header of data file. Exiting..."
;
ndbout
<<
"Failed to read header of data file. Exiting..."
;
return
-
11
;
exitHandler
(
NDBT_FAILED
)
;
}
}
...
@@ -340,12 +350,12 @@ main(int argc, char** argv)
...
@@ -340,12 +350,12 @@ main(int argc, char** argv)
{
{
ndbout_c
(
"Restore: An error occured while restoring data. "
ndbout_c
(
"Restore: An error occured while restoring data. "
"Exiting..."
);
"Exiting..."
);
return
-
1
;
exitHandler
(
NDBT_FAILED
)
;
}
}
if
(
!
dataIter
.
validateFragmentFooter
())
{
if
(
!
dataIter
.
validateFragmentFooter
())
{
ndbout_c
(
"Restore: Error validating fragment footer. "
ndbout_c
(
"Restore: Error validating fragment footer. "
"Exiting..."
);
"Exiting..."
);
return
-
1
;
exitHandler
(
NDBT_FAILED
)
;
}
}
}
// while (dataIter.readFragmentHeader(res))
}
// while (dataIter.readFragmentHeader(res))
...
@@ -353,7 +363,7 @@ main(int argc, char** argv)
...
@@ -353,7 +363,7 @@ main(int argc, char** argv)
{
{
err
<<
"Restore: An error occured while restoring data. Exiting... "
err
<<
"Restore: An error occured while restoring data. Exiting... "
<<
"res="
<<
res
<<
endl
;
<<
"res="
<<
res
<<
endl
;
return
-
1
;
exitHandler
(
NDBT_FAILED
)
;
}
}
...
@@ -366,7 +376,7 @@ main(int argc, char** argv)
...
@@ -366,7 +376,7 @@ main(int argc, char** argv)
if
(
!
logIter
.
readHeader
())
if
(
!
logIter
.
readHeader
())
{
{
err
<<
"Failed to read header of data file. Exiting..."
<<
endl
;
err
<<
"Failed to read header of data file. Exiting..."
<<
endl
;
return
-
1
;
exitHandler
(
NDBT_FAILED
)
;
}
}
const
LogEntry
*
logEntry
=
0
;
const
LogEntry
*
logEntry
=
0
;
...
@@ -380,7 +390,7 @@ main(int argc, char** argv)
...
@@ -380,7 +390,7 @@ main(int argc, char** argv)
{
{
err
<<
"Restore: An restoring the data log. Exiting... res="
err
<<
"Restore: An restoring the data log. Exiting... res="
<<
res
<<
endl
;
<<
res
<<
endl
;
return
-
1
;
exitHandler
(
NDBT_FAILED
)
;
}
}
logIter
.
validateFooter
();
//not implemented
logIter
.
validateFooter
();
//not implemented
for
(
i
=
0
;
i
<
g_consumers
.
size
();
i
++
)
for
(
i
=
0
;
i
<
g_consumers
.
size
();
i
++
)
...
@@ -395,14 +405,14 @@ main(int argc, char** argv)
...
@@ -395,14 +405,14 @@ main(int argc, char** argv)
ndbout_c
(
"Restore: Failed to finalize restore table: %s. "
ndbout_c
(
"Restore: Failed to finalize restore table: %s. "
"Exiting..."
,
"Exiting..."
,
metaData
[
i
]
->
getTableName
());
metaData
[
i
]
->
getTableName
());
return
-
11
;
exitHandler
(
NDBT_FAILED
)
;
}
}
}
}
}
}
}
}
}
}
clearConsumers
();
clearConsumers
();
return
0
;
return
NDBT_ProgramExit
(
NDBT_OK
)
;
}
// main
}
// main
template
class
Vector
<
BackupConsumer
*
>;
template
class
Vector
<
BackupConsumer
*
>;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment