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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
2b0a3b47
Commit
2b0a3b47
authored
19 years ago
by
tomas@poseidon.ndb.mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug #9249 NDBD crashes when mapping SHM segment w/o correct permission
parent
d9b59517
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
206 additions
and
76 deletions
+206
-76
ndb/include/mgmapi/ndbd_exit_codes.h
ndb/include/mgmapi/ndbd_exit_codes.h
+1
-0
ndb/include/transporter/TransporterCallback.hpp
ndb/include/transporter/TransporterCallback.hpp
+41
-31
ndb/src/common/transporter/SHM_Transporter.cpp
ndb/src/common/transporter/SHM_Transporter.cpp
+13
-9
ndb/src/common/transporter/SHM_Transporter.hpp
ndb/src/common/transporter/SHM_Transporter.hpp
+2
-0
ndb/src/common/transporter/SHM_Transporter.unix.cpp
ndb/src/common/transporter/SHM_Transporter.unix.cpp
+27
-1
ndb/src/common/transporter/SHM_Transporter.win32.cpp
ndb/src/common/transporter/SHM_Transporter.win32.cpp
+6
-0
ndb/src/common/transporter/Transporter.hpp
ndb/src/common/transporter/Transporter.hpp
+2
-1
ndb/src/common/transporter/TransporterRegistry.cpp
ndb/src/common/transporter/TransporterRegistry.cpp
+2
-2
ndb/src/kernel/blocks/qmgr/QmgrMain.cpp
ndb/src/kernel/blocks/qmgr/QmgrMain.cpp
+10
-0
ndb/src/kernel/error/ndbd_exit_codes.c
ndb/src/kernel/error/ndbd_exit_codes.c
+1
-0
ndb/src/kernel/vm/FastScheduler.cpp
ndb/src/kernel/vm/FastScheduler.cpp
+8
-7
ndb/src/kernel/vm/TransporterCallback.cpp
ndb/src/kernel/vm/TransporterCallback.cpp
+72
-18
ndb/src/kernel/vm/VMSignal.hpp
ndb/src/kernel/vm/VMSignal.hpp
+10
-0
ndb/src/mgmsrv/ConfigInfo.cpp
ndb/src/mgmsrv/ConfigInfo.cpp
+3
-2
ndb/src/ndbapi/TransporterFacade.cpp
ndb/src/ndbapi/TransporterFacade.cpp
+8
-5
No files found.
ndb/include/mgmapi/ndbd_exit_codes.h
View file @
2b0a3b47
...
...
@@ -100,6 +100,7 @@ typedef ndbd_exit_classification_enum ndbd_exit_classification;
#define NDBD_EXIT_SIGNAL_LOST 6051
#define NDBD_EXIT_SIGNAL_LOST_SEND_BUFFER_FULL 6052
#define NDBD_EXIT_ILLEGAL_SIGNAL 6053
#define NDBD_EXIT_CONNECTION_SETUP_FAILED 6054
/* NDBCNTR 6100-> */
#define NDBD_EXIT_RESTART_TIMEOUT 6100
...
...
This diff is collapsed.
Click to expand it.
ndb/include/transporter/TransporterCallback.hpp
View file @
2b0a3b47
...
...
@@ -81,7 +81,9 @@ reportConnect(void * callbackObj, NodeId nodeId);
void
reportDisconnect
(
void
*
callbackObj
,
NodeId
nodeId
,
Uint32
errNo
);
#define TE_DO_DISCONNECT 0x8000
enum
TransporterError
{
TE_NO_ERROR
=
0
,
/**
...
...
@@ -111,7 +113,7 @@ enum TransporterError {
*
* Recommended behavior: setPerformState(PerformDisconnect)
*/
TE_INVALID_MESSAGE_LENGTH
=
0x
8003
,
TE_INVALID_MESSAGE_LENGTH
=
0x
3
|
TE_DO_DISCONNECT
,
/**
* TE_INVALID_CHECKSUM
...
...
@@ -120,7 +122,7 @@ enum TransporterError {
*
* Recommended behavior: setPerformState(PerformDisonnect)
*/
TE_INVALID_CHECKSUM
=
0x
8004
,
TE_INVALID_CHECKSUM
=
0x
4
|
TE_DO_DISCONNECT
,
/**
* TE_COULD_NOT_CREATE_SOCKET
...
...
@@ -129,7 +131,7 @@ enum TransporterError {
*
* Recommended behavior: setPerformState(PerformDisonnect)
*/
TE_COULD_NOT_CREATE_SOCKET
=
0x
800
5
,
TE_COULD_NOT_CREATE_SOCKET
=
0x5
,
/**
* TE_COULD_NOT_BIND_SOCKET
...
...
@@ -138,7 +140,7 @@ enum TransporterError {
*
* Recommended behavior: setPerformState(PerformDisonnect)
*/
TE_COULD_NOT_BIND_SOCKET
=
0x
800
6
,
TE_COULD_NOT_BIND_SOCKET
=
0x6
,
/**
* TE_LISTEN_FAILED
...
...
@@ -147,7 +149,7 @@ enum TransporterError {
*
* Recommended behavior: setPerformState(PerformDisonnect)
*/
TE_LISTEN_FAILED
=
0x
800
7
,
TE_LISTEN_FAILED
=
0x7
,
/**
* TE_ACCEPT_RETURN_ERROR
...
...
@@ -158,7 +160,7 @@ enum TransporterError {
* Recommended behavior: Ignore
* (or possible do setPerformState(PerformDisconnect)
*/
TE_ACCEPT_RETURN_ERROR
=
0x8
008
TE_ACCEPT_RETURN_ERROR
=
0x8
/**
* TE_SHM_DISCONNECT
...
...
@@ -167,7 +169,7 @@ enum TransporterError {
*
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,
TE_SHM_DISCONNECT
=
0x
800b
,
TE_SHM_DISCONNECT
=
0x
b
|
TE_DO_DISCONNECT
/**
* TE_SHM_IPC_STAT
...
...
@@ -178,7 +180,12 @@ enum TransporterError {
*
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,
TE_SHM_IPC_STAT
=
0x800c
,
TE_SHM_IPC_STAT
=
0xc
|
TE_DO_DISCONNECT
/**
* Permanent error
*/
,
TE_SHM_IPC_PERMANENT
=
0x21
/**
* TE_SHM_UNABLE_TO_CREATE_SEGMENT
...
...
@@ -188,7 +195,7 @@ enum TransporterError {
*
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,
TE_SHM_UNABLE_TO_CREATE_SEGMENT
=
0x
800
d
,
TE_SHM_UNABLE_TO_CREATE_SEGMENT
=
0xd
/**
* TE_SHM_UNABLE_TO_ATTACH_SEGMENT
...
...
@@ -198,7 +205,7 @@ enum TransporterError {
*
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,
TE_SHM_UNABLE_TO_ATTACH_SEGMENT
=
0x
800
e
,
TE_SHM_UNABLE_TO_ATTACH_SEGMENT
=
0xe
/**
* TE_SHM_UNABLE_TO_REMOVE_SEGMENT
...
...
@@ -208,12 +215,12 @@ enum TransporterError {
* Recommended behavior: Ignore (not much to do)
* Print warning to logfile
*/
,
TE_SHM_UNABLE_TO_REMOVE_SEGMENT
=
0x
800
f
,
TE_SHM_UNABLE_TO_REMOVE_SEGMENT
=
0xf
,
TE_TOO_SMALL_SIGID
=
0x
00
10
,
TE_TOO_LARGE_SIGID
=
0x
00
11
,
TE_WAIT_STACK_FULL
=
0x
8012
,
TE_RECEIVE_BUFFER_FULL
=
0x
8013
,
TE_TOO_SMALL_SIGID
=
0x10
,
TE_TOO_LARGE_SIGID
=
0x11
,
TE_WAIT_STACK_FULL
=
0x
12
|
TE_DO_DISCONNECT
,
TE_RECEIVE_BUFFER_FULL
=
0x
13
|
TE_DO_DISCONNECT
/**
* TE_SIGNAL_LOST_SEND_BUFFER_FULL
...
...
@@ -222,7 +229,7 @@ enum TransporterError {
* a signal is dropped!! very bad very bad
*
*/
,
TE_SIGNAL_LOST_SEND_BUFFER_FULL
=
0x
8014
,
TE_SIGNAL_LOST_SEND_BUFFER_FULL
=
0x
14
|
TE_DO_DISCONNECT
/**
* TE_SIGNAL_LOST
...
...
@@ -231,14 +238,14 @@ enum TransporterError {
* a signal is dropped!! very bad very bad
*
*/
,
TE_SIGNAL_LOST
=
0x
80
15
,
TE_SIGNAL_LOST
=
0x15
/**
* TE_SEND_BUFFER_FULL
*
* The send buffer was full, but sleeping for a while solved it
*/
,
TE_SEND_BUFFER_FULL
=
0x
00
16
,
TE_SEND_BUFFER_FULL
=
0x16
/**
* TE_SCI_UNABLE_TO_CLOSE_CHANNEL
...
...
@@ -246,7 +253,7 @@ enum TransporterError {
* Unable to close the sci channel and the resources allocated by
* the sisci api.
*/
,
TE_SCI_UNABLE_TO_CLOSE_CHANNEL
=
0x
8016
,
TE_SCI_UNABLE_TO_CLOSE_CHANNEL
=
0x
22
/**
* TE_SCI_LINK_ERROR
...
...
@@ -255,7 +262,7 @@ enum TransporterError {
* No point in continuing. Must check the connections.
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,
TE_SCI_LINK_ERROR
=
0x
8
017
,
TE_SCI_LINK_ERROR
=
0x
0
017
/**
* TE_SCI_UNABLE_TO_START_SEQUENCE
...
...
@@ -264,14 +271,14 @@ enum TransporterError {
* are exumed or no sequence has been created.
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,
TE_SCI_UNABLE_TO_START_SEQUENCE
=
0x
8018
,
TE_SCI_UNABLE_TO_START_SEQUENCE
=
0x
18
|
TE_DO_DISCONNECT
/**
* TE_SCI_UNABLE_TO_REMOVE_SEQUENCE
*
* Could not remove a sequence
*/
,
TE_SCI_UNABLE_TO_REMOVE_SEQUENCE
=
0x
8019
,
TE_SCI_UNABLE_TO_REMOVE_SEQUENCE
=
0x
19
|
TE_DO_DISCONNECT
/**
* TE_SCI_UNABLE_TO_CREATE_SEQUENCE
...
...
@@ -280,7 +287,7 @@ enum TransporterError {
* exempted. Must reboot.
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,
TE_SCI_UNABLE_TO_CREATE_SEQUENCE
=
0x
801a
,
TE_SCI_UNABLE_TO_CREATE_SEQUENCE
=
0x
1a
|
TE_DO_DISCONNECT
/**
* TE_SCI_UNRECOVERABLE_DATA_TFX_ERROR
...
...
@@ -288,7 +295,7 @@ enum TransporterError {
* Tried to send data on redundant link but failed.
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,
TE_SCI_UNRECOVERABLE_DATA_TFX_ERROR
=
0x
801b
,
TE_SCI_UNRECOVERABLE_DATA_TFX_ERROR
=
0x
1b
|
TE_DO_DISCONNECT
/**
* TE_SCI_CANNOT_INIT_LOCALSEGMENT
...
...
@@ -297,7 +304,7 @@ enum TransporterError {
* gone wrong (no system resources). Must reboot.
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,
TE_SCI_CANNOT_INIT_LOCALSEGMENT
=
0x
801c
,
TE_SCI_CANNOT_INIT_LOCALSEGMENT
=
0x
1c
|
TE_DO_DISCONNECT
/**
* TE_SCI_CANNOT_MAP_REMOTESEGMENT
...
...
@@ -306,7 +313,7 @@ enum TransporterError {
* Must reboot system.
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,
TE_SCI_CANNOT_MAP_REMOTESEGMENT
=
0x
801d
,
TE_SCI_CANNOT_MAP_REMOTESEGMENT
=
0x
1d
|
TE_DO_DISCONNECT
/**
* TE_SCI_UNABLE_TO_UNMAP_SEGMENT
...
...
@@ -314,7 +321,7 @@ enum TransporterError {
* Cannot free the resources used by this segment (step 1).
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,
TE_SCI_UNABLE_TO_UNMAP_SEGMENT
=
0x
801e
,
TE_SCI_UNABLE_TO_UNMAP_SEGMENT
=
0x
1e
|
TE_DO_DISCONNECT
/**
* TE_SCI_UNABLE_TO_REMOVE_SEGMENT
...
...
@@ -324,7 +331,7 @@ enum TransporterError {
* to map more segment
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,
TE_SCI_UNABLE_TO_REMOVE_SEGMENT
=
0x
801f
,
TE_SCI_UNABLE_TO_REMOVE_SEGMENT
=
0x
1f
|
TE_DO_DISCONNECT
/**
* TE_SCI_UNABLE_TO_DISCONNECT_SEGMENT
...
...
@@ -332,15 +339,18 @@ enum TransporterError {
* Cannot disconnect from a remote segment.
* Recommended behavior: setPerformState(PerformDisonnect)
*/
,
TE_SCI_UNABLE_TO_DISCONNECT_SEGMENT
=
0x
8020
,
TE_SCI_UNABLE_TO_DISCONNECT_SEGMENT
=
0x
20
|
TE_DO_DISCONNECT
/* Used 0x21 */
/* Used 0x22 */
};
/**
* Report error
*/
void
reportError
(
void
*
callbackObj
,
NodeId
nodeId
,
TransporterError
errorCode
);
reportError
(
void
*
callbackObj
,
NodeId
nodeId
,
TransporterError
errorCode
,
const
char
*
info
=
0
);
void
transporter_recv_from
(
void
*
callbackObj
,
NodeId
node
);
...
...
This diff is collapsed.
Click to expand it.
ndb/src/common/transporter/SHM_Transporter.cpp
View file @
2b0a3b47
...
...
@@ -47,6 +47,9 @@ SHM_Transporter::SHM_Transporter(TransporterRegistry &t_reg,
shmKey
(
_shmKey
),
shmSize
(
_shmSize
)
{
#ifndef NDB_WIN32
shmId
=
0
;
#endif
_shmSegCreated
=
false
;
_attached
=
false
;
...
...
@@ -202,7 +205,8 @@ SHM_Transporter::connect_server_impl(NDB_SOCKET_TYPE sockfd)
// Create
if
(
!
_shmSegCreated
){
if
(
!
ndb_shm_create
())
{
report_error
(
TE_SHM_UNABLE_TO_CREATE_SEGMENT
);
make_error_info
(
buf
,
sizeof
(
buf
));
report_error
(
TE_SHM_UNABLE_TO_CREATE_SEGMENT
,
buf
);
NDB_CLOSE_SOCKET
(
sockfd
);
DBUG_RETURN
(
false
);
}
...
...
@@ -212,7 +216,8 @@ SHM_Transporter::connect_server_impl(NDB_SOCKET_TYPE sockfd)
// Attach
if
(
!
_attached
){
if
(
!
ndb_shm_attach
())
{
report_error
(
TE_SHM_UNABLE_TO_ATTACH_SEGMENT
);
make_error_info
(
buf
,
sizeof
(
buf
));
report_error
(
TE_SHM_UNABLE_TO_ATTACH_SEGMENT
,
buf
);
NDB_CLOSE_SOCKET
(
sockfd
);
DBUG_RETURN
(
false
);
}
...
...
@@ -224,7 +229,8 @@ SHM_Transporter::connect_server_impl(NDB_SOCKET_TYPE sockfd)
m_transporter_registry
.
m_shm_own_pid
);
// Wait for ok from client
if
(
s_input
.
gets
(
buf
,
256
)
==
0
)
DBUG_PRINT
(
"info"
,
(
"Wait for ok from client"
));
if
(
s_input
.
gets
(
buf
,
sizeof
(
buf
))
==
0
)
{
NDB_CLOSE_SOCKET
(
sockfd
);
DBUG_RETURN
(
false
);
...
...
@@ -262,10 +268,8 @@ SHM_Transporter::connect_client_impl(NDB_SOCKET_TYPE sockfd)
SocketOutputStream
s_output
(
sockfd
);
char
buf
[
256
];
#if 1
#endif
// Wait for server to create and attach
DBUG_PRINT
(
"info"
,
(
"Wait for server to create and attach"
));
if
(
s_input
.
gets
(
buf
,
256
)
==
0
)
{
NDB_CLOSE_SOCKET
(
sockfd
);
DBUG_PRINT
(
"error"
,
(
"Server id %d did not attach"
,
...
...
@@ -293,7 +297,8 @@ SHM_Transporter::connect_client_impl(NDB_SOCKET_TYPE sockfd)
// Attach
if
(
!
_attached
){
if
(
!
ndb_shm_attach
())
{
report_error
(
TE_SHM_UNABLE_TO_ATTACH_SEGMENT
);
make_error_info
(
buf
,
sizeof
(
buf
));
report_error
(
TE_SHM_UNABLE_TO_ATTACH_SEGMENT
,
buf
);
NDB_CLOSE_SOCKET
(
sockfd
);
DBUG_PRINT
(
"error"
,
(
"Failed attach of shm seg to node %d"
,
remoteNodeId
));
...
...
@@ -310,6 +315,7 @@ SHM_Transporter::connect_client_impl(NDB_SOCKET_TYPE sockfd)
if
(
r
)
{
// Wait for ok from server
DBUG_PRINT
(
"info"
,
(
"Wait for ok from server"
));
if
(
s_input
.
gets
(
buf
,
256
)
==
0
)
{
NDB_CLOSE_SOCKET
(
sockfd
);
DBUG_PRINT
(
"error"
,
(
"No ok from server node %d"
,
...
...
@@ -330,8 +336,6 @@ bool
SHM_Transporter
::
connect_common
(
NDB_SOCKET_TYPE
sockfd
)
{
if
(
!
checkConnected
())
{
DBUG_PRINT
(
"error"
,
(
"Already connected to node %d"
,
remoteNodeId
));
return
false
;
}
...
...
This diff is collapsed.
Click to expand it.
ndb/src/common/transporter/SHM_Transporter.hpp
View file @
2b0a3b47
...
...
@@ -170,6 +170,8 @@ private:
bool
hasDataToRead
()
const
{
return
reader
->
empty
()
==
false
;
}
void
make_error_info
(
char
info
[],
int
sz
);
};
#endif
This diff is collapsed.
Click to expand it.
ndb/src/common/transporter/SHM_Transporter.unix.cpp
View file @
2b0a3b47
...
...
@@ -26,6 +26,12 @@
#include <sys/ipc.h>
#include <sys/shm.h>
void
SHM_Transporter
::
make_error_info
(
char
info
[],
int
sz
)
{
snprintf
(
info
,
sz
,
"Shm key=%d sz=%d id=%d"
,
shmKey
,
shmSize
,
shmId
);
}
bool
SHM_Transporter
::
ndb_shm_create
()
{
...
...
@@ -64,12 +70,30 @@ SHM_Transporter::checkConnected(){
struct
shmid_ds
info
;
const
int
res
=
shmctl
(
shmId
,
IPC_STAT
,
&
info
);
if
(
res
==
-
1
){
report_error
(
TE_SHM_IPC_STAT
);
char
buf
[
128
];
int
r
=
snprintf
(
buf
,
sizeof
(
buf
),
"shmctl(%d, IPC_STAT) errno: %d(%s). "
,
shmId
,
errno
,
strerror
(
errno
));
make_error_info
(
buf
+
r
,
sizeof
(
buf
)
-
r
);
DBUG_PRINT
(
"error"
,(
buf
));
switch
(
errno
)
{
case
EACCES
:
report_error
(
TE_SHM_IPC_PERMANENT
,
buf
);
break
;
default:
report_error
(
TE_SHM_IPC_STAT
,
buf
);
break
;
}
return
false
;
}
if
(
info
.
shm_nattch
!=
2
){
char
buf
[
128
];
make_error_info
(
buf
,
sizeof
(
buf
));
report_error
(
TE_SHM_DISCONNECT
);
DBUG_PRINT
(
"error"
,
(
"Already connected to node %d"
,
remoteNodeId
));
return
false
;
}
return
true
;
...
...
@@ -91,6 +115,8 @@ SHM_Transporter::disconnectImpl(){
if
(
isServer
&&
_shmSegCreated
){
const
int
res
=
shmctl
(
shmId
,
IPC_RMID
,
0
);
if
(
res
==
-
1
){
char
buf
[
64
];
make_error_info
(
buf
,
sizeof
(
buf
));
report_error
(
TE_SHM_UNABLE_TO_REMOVE_SEGMENT
);
return
;
}
...
...
This diff is collapsed.
Click to expand it.
ndb/src/common/transporter/SHM_Transporter.win32.cpp
View file @
2b0a3b47
...
...
@@ -26,6 +26,12 @@
#include <windows.h>
void
SHM_Transporter
::
make_error_info
(
char
info
[],
int
sz
)
{
snprintf
(
info
,
sz
,
"Shm key=%d sz=%d"
,
shmKey
,
shmSize
);
}
bool
SHM_Transporter
::
connectServer
(
Uint32
timeOutMillis
){
if
(
!
_shmSegCreated
)
...
...
This diff is collapsed.
Click to expand it.
ndb/src/common/transporter/Transporter.hpp
View file @
2b0a3b47
...
...
@@ -161,7 +161,8 @@ protected:
TransporterRegistry
&
m_transporter_registry
;
void
*
get_callback_obj
()
{
return
m_transporter_registry
.
callbackObj
;
};
void
report_disconnect
(
int
err
){
m_transporter_registry
.
report_disconnect
(
remoteNodeId
,
err
);};
void
report_error
(
enum
TransporterError
err
){
reportError
(
get_callback_obj
(),
remoteNodeId
,
err
);};
void
report_error
(
enum
TransporterError
err
,
const
char
*
info
=
0
)
{
reportError
(
get_callback_obj
(),
remoteNodeId
,
err
,
info
);
};
};
inline
...
...
This diff is collapsed.
Click to expand it.
ndb/src/common/transporter/TransporterRegistry.cpp
View file @
2b0a3b47
...
...
@@ -1508,8 +1508,8 @@ TransporterRegistry::startReceiving()
{
DBUG_PRINT
(
"error"
,(
"Install failed"
));
g_eventLogger
.
error
(
"Failed to install signal handler for"
" SHM transporter
errno: %d (%s)"
,
errno
,
strerror
(
errno
));
" SHM transporter
, signum %d, errno: %d (%s)"
,
g_ndb_shm_signum
,
errno
,
strerror
(
errno
));
}
}
#endif // NDB_SHM_TRANSPORTER
...
...
This diff is collapsed.
Click to expand it.
ndb/src/kernel/blocks/qmgr/QmgrMain.cpp
View file @
2b0a3b47
...
...
@@ -1823,11 +1823,14 @@ void Qmgr::execNDB_FAILCONF(Signal* signal)
/*******************************/
/* DISCONNECT_REP */
/*******************************/
const
char
*
lookupConnectionError
(
Uint32
err
);
void
Qmgr
::
execDISCONNECT_REP
(
Signal
*
signal
)
{
jamEntry
();
const
DisconnectRep
*
const
rep
=
(
DisconnectRep
*
)
&
signal
->
theData
[
0
];
const
Uint32
nodeId
=
rep
->
nodeId
;
const
Uint32
err
=
rep
->
err
;
c_connectedNodes
.
clear
(
nodeId
);
NodeRecPtr
nodePtr
;
...
...
@@ -1838,10 +1841,17 @@ void Qmgr::execDISCONNECT_REP(Signal* signal)
jam
();
break
;
case
ZINIT
:
ndbrequire
(
false
);
case
ZSTARTING
:
progError
(
__LINE__
,
NDBD_EXIT_CONNECTION_SETUP_FAILED
,
lookupConnectionError
(
err
));
ndbrequire
(
false
);
case
ZPREPARE_FAIL
:
ndbrequire
(
false
);
case
ZFAIL_CLOSING
:
ndbrequire
(
false
);
case
ZAPI_ACTIVE
:
ndbrequire
(
false
);
case
ZAPI_INACTIVE
:
ndbrequire
(
false
);
}
...
...
This diff is collapsed.
Click to expand it.
ndb/src/kernel/error/ndbd_exit_codes.c
View file @
2b0a3b47
...
...
@@ -95,6 +95,7 @@ static const ErrStruct errArray[] =
{
NDBD_EXIT_SIGNAL_LOST
,
XIE
,
"Signal lost (unknown reason)"
},
{
NDBD_EXIT_ILLEGAL_SIGNAL
,
XIE
,
"Illegal signal (version mismatch a possibility)"
},
{
NDBD_EXIT_CONNECTION_SETUP_FAILED
,
XCE
,
"Connection setup failed"
},
/* Ndbcntr */
{
NDBD_EXIT_RESTART_TIMEOUT
,
XCE
,
...
...
This diff is collapsed.
Click to expand it.
ndb/src/kernel/vm/FastScheduler.cpp
View file @
2b0a3b47
...
...
@@ -394,7 +394,8 @@ void print_restart(FILE * output, Signal* signal, Uint32 aLevel);
void
FastScheduler
::
dumpSignalMemory
(
FILE
*
output
)
{
Signal
signal
;
SignalT
<
25
>
signalT
;
Signal
&
signal
=
*
(
Signal
*
)
&
signalT
;
Uint32
ReadPtr
[
5
];
Uint32
tJob
;
Uint32
tLastJob
;
...
...
@@ -483,17 +484,17 @@ print_restart(FILE * output, Signal* signal, Uint32 aLevel)
*/
void
FastScheduler
::
reportDoJobStatistics
(
Uint32
tMeanLoopCount
)
{
Signal
signal
;
SignalT
<
2
>
signalT
;
Signal
&
signal
=
*
(
Signal
*
)
&
signalT
;
memset
(
&
signal
.
header
,
0
,
sizeof
(
signal
.
header
));
signal
.
header
.
theLength
=
2
;
signal
.
header
.
theSendersSignalId
=
0
;
signal
.
header
.
theSendersBlockRef
=
numberToRef
(
0
,
0
);
signal
.
theData
[
0
]
=
NDB_LE_JobStatistic
;
signal
.
theData
[
1
]
=
tMeanLoopCount
;
memset
(
&
signal
.
header
,
0
,
sizeof
(
SignalHeader
));
signal
.
header
.
theLength
=
2
;
signal
.
header
.
theSendersSignalId
=
0
;
signal
.
header
.
theSendersBlockRef
=
numberToRef
(
0
,
0
);
execute
(
&
signal
,
JBA
,
CMVMI
,
GSN_EVENT_REP
);
}
This diff is collapsed.
Click to expand it.
ndb/src/kernel/vm/TransporterCallback.cpp
View file @
2b0a3b47
...
...
@@ -39,6 +39,26 @@
*/
SectionSegmentPool
g_sectionSegmentPool
;
struct
ConnectionError
{
enum
TransporterError
err
;
const
char
*
text
;
};
static
const
ConnectionError
connectionError
[]
=
{
{
TE_NO_ERROR
,
"No error"
},
{
TE_SHM_UNABLE_TO_CREATE_SEGMENT
,
"Unable to create shared memory segment"
},
{
(
enum
TransporterError
)
-
1
,
"No connection error message available (please report a bug)"
}
};
const
char
*
lookupConnectionError
(
Uint32
err
)
{
int
i
=
0
;
while
((
Uint32
)
connectionError
[
i
].
err
!=
err
&&
(
Uint32
)
connectionError
[
i
].
err
!=
-
1
);
return
connectionError
[
i
].
text
;
}
bool
import
(
Ptr
<
SectionSegment
>
&
first
,
const
Uint32
*
src
,
Uint32
len
){
/**
...
...
@@ -306,30 +326,54 @@ checkJobBuffer() {
}
void
reportError
(
void
*
callbackObj
,
NodeId
nodeId
,
TransporterError
errorCode
){
reportError
(
void
*
callbackObj
,
NodeId
nodeId
,
TransporterError
errorCode
,
const
char
*
info
)
{
#ifdef DEBUG_TRANSPORTER
char
buf
[
255
];
sprintf
(
buf
,
"reportError (%d, 0x%x)"
,
nodeId
,
errorCode
);
ndbout
<<
buf
<<
endl
;
ndbout_c
(
"reportError (%d, 0x%x) %s"
,
nodeId
,
errorCode
,
info
?
info
:
""
)
#endif
if
(
errorCode
==
TE_SIGNAL_LOST_SEND_BUFFER_FULL
){
DBUG_ENTER
(
"reportError"
);
DBUG_PRINT
(
"info"
,(
"nodeId %d errorCode: 0x%x info: %s"
,
nodeId
,
errorCode
,
info
));
switch
(
errorCode
)
{
case
TE_SIGNAL_LOST_SEND_BUFFER_FULL
:
{
char
msg
[
64
];
snprintf
(
msg
,
sizeof
(
msg
),
"Remote note id %d.%s%s"
,
nodeId
,
info
?
" "
:
""
,
info
?
info
:
""
);
ErrorReporter
::
handleError
(
NDBD_EXIT_SIGNAL_LOST_SEND_BUFFER_FULL
,
""
,
__FILE__
,
NST_ErrorHandler
);
msg
,
__FILE__
,
NST_ErrorHandler
);
}
if
(
errorCode
==
TE_SIGNAL_LOST
){
case
TE_SIGNAL_LOST
:
{
char
msg
[
64
];
snprintf
(
msg
,
sizeof
(
msg
),
"Remote node id %d,%s%s"
,
nodeId
,
info
?
" "
:
""
,
info
?
info
:
""
);
ErrorReporter
::
handleError
(
NDBD_EXIT_SIGNAL_LOST
,
""
,
__FILE__
,
NST_ErrorHandler
);
msg
,
__FILE__
,
NST_ErrorHandler
);
}
if
(
errorCode
&
0x8000
){
case
TE_SHM_IPC_PERMANENT
:
{
char
msg
[
128
];
snprintf
(
msg
,
sizeof
(
msg
),
"Remote node id %d.%s%s"
,
nodeId
,
info
?
" "
:
""
,
info
?
info
:
""
);
ErrorReporter
::
handleError
(
NDBD_EXIT_CONNECTION_SETUP_FAILED
,
msg
,
__FILE__
,
NST_ErrorHandler
);
}
default:
break
;
}
if
(
errorCode
&
&
TE_DO_DISCONNECT
){
reportDisconnect
(
callbackObj
,
nodeId
,
errorCode
);
}
Signal
signal
;
SignalT
<
3
>
signalT
;
Signal
&
signal
=
*
(
Signal
*
)
&
signalT
;
memset
(
&
signal
.
header
,
0
,
sizeof
(
signal
.
header
));
...
...
@@ -345,6 +389,8 @@ reportError(void * callbackObj, NodeId nodeId, TransporterError errorCode){
signal
.
header
.
theSendersSignalId
=
0
;
signal
.
header
.
theSendersBlockRef
=
numberToRef
(
0
,
globalData
.
ownId
);
globalScheduler
.
execute
(
&
signal
,
JBA
,
CMVMI
,
GSN_EVENT_REP
);
DBUG_VOID_RETURN
;
}
/**
...
...
@@ -354,7 +400,8 @@ void
reportSendLen
(
void
*
callbackObj
,
NodeId
nodeId
,
Uint32
count
,
Uint64
bytes
){
Signal
signal
;
SignalT
<
3
>
signalT
;
Signal
&
signal
=
*
(
Signal
*
)
&
signalT
;
memset
(
&
signal
.
header
,
0
,
sizeof
(
signal
.
header
));
signal
.
header
.
theLength
=
3
;
...
...
@@ -373,7 +420,8 @@ void
reportReceiveLen
(
void
*
callbackObj
,
NodeId
nodeId
,
Uint32
count
,
Uint64
bytes
){
Signal
signal
;
SignalT
<
3
>
signalT
;
Signal
&
signal
=
*
(
Signal
*
)
&
signalT
;
memset
(
&
signal
.
header
,
0
,
sizeof
(
signal
.
header
));
signal
.
header
.
theLength
=
3
;
...
...
@@ -392,7 +440,8 @@ reportReceiveLen(void * callbackObj,
void
reportConnect
(
void
*
callbackObj
,
NodeId
nodeId
){
Signal
signal
;
SignalT
<
1
>
signalT
;
Signal
&
signal
=
*
(
Signal
*
)
&
signalT
;
memset
(
&
signal
.
header
,
0
,
sizeof
(
signal
.
header
));
signal
.
header
.
theLength
=
1
;
...
...
@@ -409,7 +458,10 @@ reportConnect(void * callbackObj, NodeId nodeId){
void
reportDisconnect
(
void
*
callbackObj
,
NodeId
nodeId
,
Uint32
errNo
){
Signal
signal
;
DBUG_ENTER
(
"reportDisconnect"
);
SignalT
<
sizeof
(
DisconnectRep
)
/
4
>
signalT
;
Signal
&
signal
=
*
(
Signal
*
)
&
signalT
;
memset
(
&
signal
.
header
,
0
,
sizeof
(
signal
.
header
));
signal
.
header
.
theLength
=
DisconnectRep
::
SignalLength
;
...
...
@@ -422,6 +474,8 @@ reportDisconnect(void * callbackObj, NodeId nodeId, Uint32 errNo){
rep
->
err
=
errNo
;
globalScheduler
.
execute
(
&
signal
,
JBA
,
CMVMI
,
GSN_DISCONNECT_REP
);
DBUG_VOID_RETURN
;
}
void
...
...
This diff is collapsed.
Click to expand it.
ndb/src/kernel/vm/VMSignal.hpp
View file @
2b0a3b47
...
...
@@ -42,6 +42,16 @@ struct NodeReceiverGroup {
NodeBitmask
m_nodes
;
};
template
<
unsigned
T
>
struct
SignalT
{
SignalHeader
header
;
SegmentedSectionPtr
m_sectionPtr
[
3
];
union
{
Uint32
theData
[
T
];
Uint64
dummyAlign
;
};
};
/**
* class used for passing argumentes to blocks
*/
...
...
This diff is collapsed.
Click to expand it.
ndb/src/mgmsrv/ConfigInfo.cpp
View file @
2b0a3b47
...
...
@@ -150,7 +150,6 @@ ConfigInfo::m_SectionRules[] = {
{
"TCP"
,
fixPortNumber
,
0
},
// has to come after fixHostName
{
"SHM"
,
fixPortNumber
,
0
},
// has to come after fixHostName
{
"SCI"
,
fixPortNumber
,
0
},
// has to come after fixHostName
{
"SHM"
,
fixShmKey
,
0
},
/**
* fixExtConnection must be after fixNodeId
...
...
@@ -164,6 +163,8 @@ ConfigInfo::m_SectionRules[] = {
{
"*"
,
fixDepricated
,
0
},
{
"*"
,
applyDefaultValues
,
"system"
},
{
"SHM"
,
fixShmKey
,
0
},
// has to come after apply default values
{
DB_TOKEN
,
checkLocalhostHostnameMix
,
0
},
{
API_TOKEN
,
checkLocalhostHostnameMix
,
0
},
{
MGM_TOKEN
,
checkLocalhostHostnameMix
,
0
},
...
...
@@ -1798,7 +1799,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
ConfigInfo
::
CI_USED
,
false
,
ConfigInfo
::
CI_INT
,
"0"
,
UNDEFINED
,
"0"
,
STR_VALUE
(
MAX_INT_RNIL
)
},
...
...
This diff is collapsed.
Click to expand it.
ndb/src/ndbapi/TransporterFacade.cpp
View file @
2b0a3b47
...
...
@@ -63,13 +63,16 @@ TransporterFacade* TransporterFacade::theFacadeInstance = NULL;
*****************************************************************************/
void
reportError
(
void
*
callbackObj
,
NodeId
nodeId
,
TransporterError
errorCode
){
reportError
(
void
*
callbackObj
,
NodeId
nodeId
,
TransporterError
errorCode
,
const
char
*
info
)
{
#ifdef REPORT_TRANSPORTER
ndbout_c
(
"REPORT_TRANSP: reportError (nodeId=%d, errorCode=%d)"
,
(
int
)
nodeId
,
(
int
)
errorCode
);
ndbout_c
(
"REPORT_TRANSP: reportError (nodeId=%d, errorCode=%d)
%s
"
,
(
int
)
nodeId
,
(
int
)
errorCode
,
info
?
info
:
""
);
#endif
if
(
errorCode
&
0x8000
)
{
ndbout_c
(
"reportError (%d, %d)
\n
"
,
(
int
)
nodeId
,
(
int
)
errorCode
);
if
(
errorCode
&
TE_DO_DISCONNECT
)
{
ndbout_c
(
"reportError (%d, %d) %s"
,
(
int
)
nodeId
,
(
int
)
errorCode
,
info
?
info
:
""
);
((
TransporterFacade
*
)(
callbackObj
))
->
doDisconnect
(
nodeId
);
}
}
...
...
This diff is collapsed.
Click to expand it.
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