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
61af1b50
Commit
61af1b50
authored
Jul 15, 2005
by
unknown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
BUG#11898 ndb_mgmd not releasing resources, added "ping" on add_listener
+ added close of some fd's + debug prints
parent
10bd1edb
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
105 additions
and
23 deletions
+105
-23
ndb/src/mgmclient/CommandInterpreter.cpp
ndb/src/mgmclient/CommandInterpreter.cpp
+28
-6
ndb/src/mgmsrv/MgmtSrvr.hpp
ndb/src/mgmsrv/MgmtSrvr.hpp
+1
-0
ndb/src/mgmsrv/Services.cpp
ndb/src/mgmsrv/Services.cpp
+76
-17
No files found.
ndb/src/mgmclient/CommandInterpreter.cpp
View file @
61af1b50
...
@@ -455,11 +455,13 @@ static int do_event_thread;
...
@@ -455,11 +455,13 @@ static int do_event_thread;
static
void
*
static
void
*
event_thread_run
(
void
*
m
)
event_thread_run
(
void
*
m
)
{
{
DBUG_ENTER
(
"event_thread_run"
);
NdbMgmHandle
handle
=
*
(
NdbMgmHandle
*
)
m
;
NdbMgmHandle
handle
=
*
(
NdbMgmHandle
*
)
m
;
int
filter
[]
=
{
15
,
NDB_MGM_EVENT_CATEGORY_BACKUP
,
0
};
int
filter
[]
=
{
15
,
NDB_MGM_EVENT_CATEGORY_BACKUP
,
0
};
int
fd
=
ndb_mgm_listen_event
(
handle
,
filter
);
int
fd
=
ndb_mgm_listen_event
(
handle
,
filter
);
if
(
fd
>
0
)
if
(
fd
!=
NDB_INVALID_SOCKET
)
{
{
do_event_thread
=
1
;
do_event_thread
=
1
;
char
*
tmp
=
0
;
char
*
tmp
=
0
;
...
@@ -468,20 +470,26 @@ event_thread_run(void* m)
...
@@ -468,20 +470,26 @@ event_thread_run(void* m)
do
{
do
{
if
(
tmp
==
0
)
NdbSleep_MilliSleep
(
10
);
if
(
tmp
==
0
)
NdbSleep_MilliSleep
(
10
);
if
((
tmp
=
in
.
gets
(
buf
,
1024
)))
if
((
tmp
=
in
.
gets
(
buf
,
1024
)))
{
const
char
ping_token
[]
=
"<PING>"
;
if
(
memcmp
(
ping_token
,
tmp
,
sizeof
(
ping_token
)
-
1
))
ndbout
<<
tmp
;
ndbout
<<
tmp
;
}
}
while
(
do_event_thread
);
}
while
(
do_event_thread
);
NDB_CLOSE_SOCKET
(
fd
);
}
}
else
else
{
{
do_event_thread
=
-
1
;
do_event_thread
=
-
1
;
}
}
return
NULL
;
DBUG_RETURN
(
NULL
)
;
}
}
bool
bool
CommandInterpreter
::
connect
()
CommandInterpreter
::
connect
()
{
{
DBUG_ENTER
(
"CommandInterpreter::connect"
);
if
(
!
m_connected
)
if
(
!
m_connected
)
{
{
if
(
!
ndb_mgm_connect
(
m_mgmsrv
,
try_reconnect
-
1
,
5
,
1
))
if
(
!
ndb_mgm_connect
(
m_mgmsrv
,
try_reconnect
-
1
,
5
,
1
))
...
@@ -512,8 +520,19 @@ CommandInterpreter::connect()
...
@@ -512,8 +520,19 @@ CommandInterpreter::connect()
do_event_thread
==
0
||
do_event_thread
==
0
||
do_event_thread
==
-
1
)
do_event_thread
==
-
1
)
{
{
printf
(
"Warning, event thread startup failed, degraded printouts as result
\n
"
);
DBUG_PRINT
(
"info"
,(
"Warning, event thread startup failed, "
"degraded printouts as result, errno=%d"
,
errno
));
printf
(
"Warning, event thread startup failed, "
"degraded printouts as result, errno=%d
\n
"
,
errno
);
do_event_thread
=
0
;
do_event_thread
=
0
;
if
(
m_event_thread
)
{
void
*
res
;
NdbThread_WaitFor
(
m_event_thread
,
&
res
);
NdbThread_Destroy
(
&
m_event_thread
);
}
ndb_mgm_disconnect
(
m_mgmsrv2
);
}
}
}
}
else
else
...
@@ -521,6 +540,8 @@ CommandInterpreter::connect()
...
@@ -521,6 +540,8 @@ CommandInterpreter::connect()
printf
(
"Warning, event connect failed, degraded printouts as result
\n
"
);
printf
(
"Warning, event connect failed, degraded printouts as result
\n
"
);
}
}
m_connected
=
true
;
m_connected
=
true
;
DBUG_PRINT
(
"info"
,(
"Connected to Management Server at: %s:%d"
,
host
,
port
));
if
(
m_verbose
)
if
(
m_verbose
)
{
{
printf
(
"Connected to Management Server at: %s:%d
\n
"
,
printf
(
"Connected to Management Server at: %s:%d
\n
"
,
...
@@ -528,12 +549,13 @@ CommandInterpreter::connect()
...
@@ -528,12 +549,13 @@ CommandInterpreter::connect()
}
}
}
}
}
}
return
m_connected
;
DBUG_RETURN
(
m_connected
)
;
}
}
bool
bool
CommandInterpreter
::
disconnect
()
CommandInterpreter
::
disconnect
()
{
{
DBUG_ENTER
(
"CommandInterpreter::disconnect"
);
if
(
m_event_thread
)
{
if
(
m_event_thread
)
{
void
*
res
;
void
*
res
;
do_event_thread
=
0
;
do_event_thread
=
0
;
...
@@ -550,7 +572,7 @@ CommandInterpreter::disconnect()
...
@@ -550,7 +572,7 @@ CommandInterpreter::disconnect()
}
}
m_connected
=
false
;
m_connected
=
false
;
}
}
return
true
;
DBUG_RETURN
(
true
)
;
}
}
//*****************************************************************************
//*****************************************************************************
...
...
ndb/src/mgmsrv/MgmtSrvr.hpp
View file @
61af1b50
...
@@ -60,6 +60,7 @@ public:
...
@@ -60,6 +60,7 @@ public:
}
}
void
add_listener
(
const
Event_listener
&
);
void
add_listener
(
const
Event_listener
&
);
void
check_listeners
();
void
update_max_log_level
(
const
LogLevel
&
);
void
update_max_log_level
(
const
LogLevel
&
);
void
update_log_level
(
const
LogLevel
&
);
void
update_log_level
(
const
LogLevel
&
);
...
...
ndb/src/mgmsrv/Services.cpp
View file @
61af1b50
...
@@ -253,15 +253,19 @@ ParserRow<MgmApiSession> commands[] = {
...
@@ -253,15 +253,19 @@ ParserRow<MgmApiSession> commands[] = {
};
};
MgmApiSession
::
MgmApiSession
(
class
MgmtSrvr
&
mgm
,
NDB_SOCKET_TYPE
sock
)
MgmApiSession
::
MgmApiSession
(
class
MgmtSrvr
&
mgm
,
NDB_SOCKET_TYPE
sock
)
:
SocketServer
::
Session
(
sock
),
m_mgmsrv
(
mgm
)
{
:
SocketServer
::
Session
(
sock
),
m_mgmsrv
(
mgm
)
{
DBUG_ENTER
(
"MgmApiSession::MgmApiSession"
);
m_input
=
new
SocketInputStream
(
sock
);
m_input
=
new
SocketInputStream
(
sock
);
m_output
=
new
SocketOutputStream
(
sock
);
m_output
=
new
SocketOutputStream
(
sock
);
m_parser
=
new
Parser_t
(
commands
,
*
m_input
,
true
,
true
,
true
);
m_parser
=
new
Parser_t
(
commands
,
*
m_input
,
true
,
true
,
true
);
m_allocated_resources
=
new
MgmtSrvr
::
Allocated_resources
(
m_mgmsrv
);
m_allocated_resources
=
new
MgmtSrvr
::
Allocated_resources
(
m_mgmsrv
);
DBUG_VOID_RETURN
;
}
}
MgmApiSession
::~
MgmApiSession
()
MgmApiSession
::~
MgmApiSession
()
{
{
DBUG_ENTER
(
"MgmApiSession::~MgmApiSession"
);
if
(
m_input
)
if
(
m_input
)
delete
m_input
;
delete
m_input
;
if
(
m_output
)
if
(
m_output
)
...
@@ -270,10 +274,19 @@ MgmApiSession::~MgmApiSession()
...
@@ -270,10 +274,19 @@ MgmApiSession::~MgmApiSession()
delete
m_parser
;
delete
m_parser
;
if
(
m_allocated_resources
)
if
(
m_allocated_resources
)
delete
m_allocated_resources
;
delete
m_allocated_resources
;
if
(
m_socket
!=
NDB_INVALID_SOCKET
)
{
NDB_CLOSE_SOCKET
(
m_socket
);
m_socket
=
NDB_INVALID_SOCKET
;
}
DBUG_VOID_RETURN
;
}
}
void
void
MgmApiSession
::
runSession
()
{
MgmApiSession
::
runSession
()
{
DBUG_ENTER
(
"MgmApiSession::runSession"
);
Parser_t
::
Context
ctx
;
Parser_t
::
Context
ctx
;
while
(
!
m_stop
)
{
while
(
!
m_stop
)
{
m_parser
->
run
(
ctx
,
*
this
);
m_parser
->
run
(
ctx
,
*
this
);
...
@@ -301,8 +314,13 @@ MgmApiSession::runSession() {
...
@@ -301,8 +314,13 @@ MgmApiSession::runSession() {
break
;
break
;
}
}
}
}
if
(
m_socket
>=
0
)
if
(
m_socket
!=
NDB_INVALID_SOCKET
)
{
NDB_CLOSE_SOCKET
(
m_socket
);
NDB_CLOSE_SOCKET
(
m_socket
);
m_socket
=
NDB_INVALID_SOCKET
;
}
DBUG_VOID_RETURN
;
}
}
#ifdef MGM_GET_CONFIG_BACKWARDS_COMPAT
#ifdef MGM_GET_CONFIG_BACKWARDS_COMPAT
...
@@ -1236,7 +1254,7 @@ Ndb_mgmd_event_service::log(int eventType, const Uint32* theData, NodeId nodeId)
...
@@ -1236,7 +1254,7 @@ Ndb_mgmd_event_service::log(int eventType, const Uint32* theData, NodeId nodeId)
Uint32
threshold
;
Uint32
threshold
;
LogLevel
::
EventCategory
cat
;
LogLevel
::
EventCategory
cat
;
Logger
::
LoggerLevel
severity
;
Logger
::
LoggerLevel
severity
;
int
i
;
int
i
,
n
;
DBUG_ENTER
(
"Ndb_mgmd_event_service::log"
);
DBUG_ENTER
(
"Ndb_mgmd_event_service::log"
);
DBUG_PRINT
(
"enter"
,(
"eventType=%d, nodeid=%d"
,
eventType
,
nodeId
));
DBUG_PRINT
(
"enter"
,(
"eventType=%d, nodeid=%d"
,
eventType
,
nodeId
));
...
@@ -1248,28 +1266,30 @@ Ndb_mgmd_event_service::log(int eventType, const Uint32* theData, NodeId nodeId)
...
@@ -1248,28 +1266,30 @@ Ndb_mgmd_event_service::log(int eventType, const Uint32* theData, NodeId nodeId)
Vector
<
NDB_SOCKET_TYPE
>
copy
;
Vector
<
NDB_SOCKET_TYPE
>
copy
;
m_clients
.
lock
();
m_clients
.
lock
();
for
(
i
=
m_clients
.
size
()
-
1
;
i
>=
0
;
i
--
){
for
(
i
=
m_clients
.
size
()
-
1
;
i
>=
0
;
i
--
)
if
(
threshold
<=
m_clients
[
i
].
m_logLevel
.
getLogLevel
(
cat
)){
{
if
(
m_clients
[
i
].
m_socket
!=
NDB_INVALID_SOCKET
&&
if
(
threshold
<=
m_clients
[
i
].
m_logLevel
.
getLogLevel
(
cat
))
println_socket
(
m_clients
[
i
].
m_socket
,
{
MAX_WRITE_TIMEOUT
,
m_text
)
==
-
1
){
int
fd
=
m_clients
[
i
].
m_socket
;
copy
.
push_back
(
m_clients
[
i
].
m_socket
);
if
(
fd
!=
NDB_INVALID_SOCKET
&&
println_socket
(
fd
,
MAX_WRITE_TIMEOUT
,
m_text
)
==
-
1
)
{
copy
.
push_back
(
fd
);
m_clients
.
erase
(
i
,
false
);
m_clients
.
erase
(
i
,
false
);
}
}
}
}
}
}
m_clients
.
unlock
();
m_clients
.
unlock
();
for
(
i
=
0
;
(
unsigned
)
i
<
copy
.
size
();
i
++
){
if
((
n
=
(
int
)
copy
.
size
()))
{
for
(
i
=
0
;
i
<
n
;
i
++
)
NDB_CLOSE_SOCKET
(
copy
[
i
]);
NDB_CLOSE_SOCKET
(
copy
[
i
]);
}
if
(
copy
.
size
()){
LogLevel
tmp
;
tmp
.
clear
();
LogLevel
tmp
;
tmp
.
clear
();
m_clients
.
lock
();
m_clients
.
lock
();
for
(
i
=
0
;
(
unsigned
)
i
<
m_clients
.
size
();
i
++
){
for
(
i
=
m_clients
.
size
()
-
1
;
i
>=
0
;
i
--
)
tmp
.
set_max
(
m_clients
[
i
].
m_logLevel
);
tmp
.
set_max
(
m_clients
[
i
].
m_logLevel
);
}
m_clients
.
unlock
();
m_clients
.
unlock
();
update_log_level
(
tmp
);
update_log_level
(
tmp
);
}
}
...
@@ -1297,9 +1317,48 @@ Ndb_mgmd_event_service::update_log_level(const LogLevel &tmp)
...
@@ -1297,9 +1317,48 @@ Ndb_mgmd_event_service::update_log_level(const LogLevel &tmp)
}
}
void
void
Ndb_mgmd_event_service
::
add_listener
(
const
Event_listener
&
client
){
Ndb_mgmd_event_service
::
check_listeners
()
{
int
i
,
n
=
0
;
DBUG_ENTER
(
"Ndb_mgmd_event_service::check_listeners"
);
m_clients
.
lock
();
for
(
i
=
m_clients
.
size
()
-
1
;
i
>=
0
;
i
--
)
{
int
fd
=
m_clients
[
i
].
m_socket
;
DBUG_PRINT
(
"info"
,(
"%d %d"
,
i
,
fd
));
char
buf
[
1
];
buf
[
0
]
=
0
;
if
(
fd
!=
NDB_INVALID_SOCKET
&&
println_socket
(
fd
,
MAX_WRITE_TIMEOUT
,
"<PING>"
)
==
-
1
)
{
NDB_CLOSE_SOCKET
(
fd
);
m_clients
.
erase
(
i
,
false
);
n
=
1
;
}
}
if
(
n
)
{
LogLevel
tmp
;
tmp
.
clear
();
for
(
i
=
m_clients
.
size
()
-
1
;
i
>=
0
;
i
--
)
tmp
.
set_max
(
m_clients
[
i
].
m_logLevel
);
update_log_level
(
tmp
);
}
m_clients
.
unlock
();
DBUG_VOID_RETURN
;
}
void
Ndb_mgmd_event_service
::
add_listener
(
const
Event_listener
&
client
)
{
DBUG_ENTER
(
"Ndb_mgmd_event_service::add_listener"
);
DBUG_PRINT
(
"enter"
,(
"client.m_socket: %d"
,
client
.
m_socket
));
check_listeners
();
m_clients
.
push_back
(
client
);
m_clients
.
push_back
(
client
);
update_max_log_level
(
client
.
m_logLevel
);
update_max_log_level
(
client
.
m_logLevel
);
DBUG_VOID_RETURN
;
}
}
void
void
...
...
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