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
643606ca
Commit
643606ca
authored
Oct 20, 2006
by
anozdrin/alik@alik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Instance Manager polishing.
parent
384f0fee
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
47 additions
and
61 deletions
+47
-61
server-tools/instance-manager/guardian.cc
server-tools/instance-manager/guardian.cc
+29
-43
server-tools/instance-manager/guardian.h
server-tools/instance-manager/guardian.h
+2
-2
server-tools/instance-manager/instance.cc
server-tools/instance-manager/instance.cc
+12
-11
server-tools/instance-manager/listener.cc
server-tools/instance-manager/listener.cc
+2
-2
server-tools/instance-manager/manager.cc
server-tools/instance-manager/manager.cc
+2
-3
No files found.
server-tools/instance-manager/guardian.cc
View file @
643606ca
...
...
@@ -66,11 +66,11 @@ Guardian_thread::~Guardian_thread()
}
void
Guardian_thread
::
request_shutdown
(
bool
stop_instances_arg
)
void
Guardian_thread
::
request_shutdown
()
{
pthread_mutex_lock
(
&
LOCK_guardian
);
/* stop instances or just clean up Guardian repository */
stop_instances
(
stop_instances_arg
);
stop_instances
();
shutdown_requested
=
TRUE
;
pthread_mutex_unlock
(
&
LOCK_guardian
);
}
...
...
@@ -118,11 +118,11 @@ void Guardian_thread::process_instance(Instance *instance,
{
/* Pid file not created yet, don't go to STARTED state yet */
}
else
else
if
(
current_node
->
state
!=
STARTED
)
{
/* clear status fields */
log_info
(
"guardian: instance
%s is running, set state to STARTED
"
,
instance
->
options
.
instance_name
);
log_info
(
"guardian: instance
'%s' is running, set state to STARTED.
"
,
(
const
char
*
)
instance
->
options
.
instance_name
);
current_node
->
restart_counter
=
0
;
current_node
->
crash_moment
=
0
;
current_node
->
state
=
STARTED
;
...
...
@@ -132,8 +132,8 @@ void Guardian_thread::process_instance(Instance *instance,
{
switch
(
current_node
->
state
)
{
case
NOT_STARTED
:
log_info
(
"guardian: starting instance
%s
"
,
instance
->
options
.
instance_name
);
log_info
(
"guardian: starting instance
'%s'...
"
,
(
const
char
*
)
instance
->
options
.
instance_name
);
/* NOTE, set state to STARTING _before_ start() is called */
current_node
->
state
=
STARTING
;
...
...
@@ -157,8 +157,8 @@ void Guardian_thread::process_instance(Instance *instance,
if
(
instance
->
is_crashed
())
{
instance
->
start
();
log_info
(
"guardian: starting instance
%s
"
,
instance
->
options
.
instance_name
);
log_info
(
"guardian: starting instance
'%s'...
"
,
(
const
char
*
)
instance
->
options
.
instance_name
);
}
}
else
...
...
@@ -175,8 +175,8 @@ void Guardian_thread::process_instance(Instance *instance,
instance
->
start
();
current_node
->
last_checked
=
current_time
;
current_node
->
restart_counter
++
;
log_info
(
"guardian: restarting instance
%s
"
,
instance
->
options
.
instance_name
);
log_info
(
"guardian: restarting instance
'%s'...
"
,
(
const
char
*
)
instance
->
options
.
instance_name
);
}
}
else
...
...
@@ -382,12 +382,11 @@ int Guardian_thread::stop_guard(Instance *instance)
SYNOPSYS
stop_instances()
stop_instances_arg whether we should stop instances at shutdown
DESCRIPTION
Loops through the guarded_instances list and prepares them for shutdown.
If stop_instances was requested, we need to issue a stop command and chang
e
the state accordingly. Otherwise we simply delete an entr
y.
For each instance we issue a stop command and change the stat
e
accordingl
y.
NOTE
Guardian object should be locked by the calling function.
...
...
@@ -397,42 +396,29 @@ int Guardian_thread::stop_guard(Instance *instance)
1 - error occured
*/
int
Guardian_thread
::
stop_instances
(
bool
stop_instances_arg
)
int
Guardian_thread
::
stop_instances
()
{
LIST
*
node
;
node
=
guarded_instances
;
while
(
node
!=
NULL
)
{
if
(
!
stop_instances_arg
)
GUARD_NODE
*
current_node
=
(
GUARD_NODE
*
)
node
->
data
;
/*
If instance is running or was running (and now probably hanging),
request stop.
*/
if
(
current_node
->
instance
->
is_running
()
||
(
current_node
->
state
==
STARTED
))
{
/* just forget about an instance */
guarded_instances
=
list_delete
(
guarded_instances
,
node
);
/*
This should still work fine, as we have only removed the
node from the list. The pointer to the next one is still valid
*/
node
=
node
->
next
;
current_node
->
state
=
STOPPING
;
current_node
->
last_checked
=
time
(
NULL
);
}
else
{
GUARD_NODE
*
current_node
=
(
GUARD_NODE
*
)
node
->
data
;
/*
If instance is running or was running (and now probably hanging),
request stop.
*/
if
(
current_node
->
instance
->
is_running
()
||
(
current_node
->
state
==
STARTED
))
{
current_node
->
state
=
STOPPING
;
current_node
->
last_checked
=
time
(
NULL
);
}
else
/* otherwise remove it from the list */
guarded_instances
=
list_delete
(
guarded_instances
,
node
);
/* But try to kill it anyway. Just in case */
current_node
->
instance
->
kill_instance
(
SIGTERM
);
node
=
node
->
next
;
}
/* otherwise remove it from the list */
guarded_instances
=
list_delete
(
guarded_instances
,
node
);
/* But try to kill it anyway. Just in case */
current_node
->
instance
->
kill_instance
(
SIGTERM
);
node
=
node
->
next
;
}
return
0
;
}
...
...
@@ -440,7 +426,7 @@ int Guardian_thread::stop_instances(bool stop_instances_arg)
void
Guardian_thread
::
lock
()
{
pthread_mutex_lock
(
&
LOCK_guardian
);
pthread_mutex_lock
(
&
LOCK_guardian
);
}
...
...
server-tools/instance-manager/guardian.h
View file @
643606ca
...
...
@@ -89,7 +89,7 @@ class Guardian_thread: public Guardian_thread_args
/* Initialize or refresh the list of guarded instances */
int
init
();
/* Request guardian shutdown. Stop instances if needed */
void
request_shutdown
(
bool
stop_instances
);
void
request_shutdown
();
/* Start instance protection */
int
guard
(
Instance
*
instance
,
bool
nolock
=
FALSE
);
/* Stop instance protection */
...
...
@@ -104,7 +104,7 @@ class Guardian_thread: public Guardian_thread_args
private:
/* Prepares Guardian shutdown. Stops instances is needed */
int
stop_instances
(
bool
stop_instances_arg
);
int
stop_instances
();
/* check instance state and act accordingly */
void
process_instance
(
Instance
*
instance
,
GUARD_NODE
*
current_node
,
LIST
**
guarded_instances
,
LIST
*
elem
);
...
...
server-tools/instance-manager/instance.cc
View file @
643606ca
...
...
@@ -156,8 +156,8 @@ static int start_process(Instance_options *instance_options,
/* exec never returns */
exit
(
1
);
case
-
1
:
log_info
(
"cannot create a new process to start instance
%s
"
,
instance_options
->
instance_name
);
log_info
(
"cannot create a new process to start instance
'%s'.
"
,
(
const
char
*
)
instance_options
->
instance_name
);
return
1
;
}
return
0
;
...
...
@@ -252,7 +252,8 @@ static void start_and_monitor_instance(Instance_options *old_instance_options,
MAX_INSTANCE_NAME_LEN
-
1
);
instance_name_len
=
old_instance_options
->
instance_name_len
;
log_info
(
"starting instance %s"
,
instance_name_buff
);
log_info
(
"starting instance '%s'..."
,
(
const
char
*
)
instance_name_buff
);
if
(
start_process
(
old_instance_options
,
&
process_info
))
{
...
...
@@ -286,9 +287,9 @@ void Instance::remove_pid()
int
pid
;
if
((
pid
=
options
.
get_pid
())
!=
0
)
/* check the pidfile */
if
(
options
.
unlink_pidfile
())
/* remove stalled pidfile */
log_error
(
"cannot remove pidfile for instance
%i
, this might be \
log_error
(
"cannot remove pidfile for instance
'%s'
, this might be \
since IM lacks permmissions or hasn't found the pidifle"
,
options
.
instance_name
);
(
const
char
*
)
options
.
instance_name
);
}
...
...
@@ -435,9 +436,9 @@ bool Instance::is_running()
We have successfully connected to the server using fake
username/password. Write a warning to the logfile.
*/
log_info
(
"The Instance Manager was able to log into you server
\
with faked compiled-in password while checking server status. \
Looks like something is wrong."
);
log_info
(
"The Instance Manager was able to log into you server
"
"with faked compiled-in password while checking server status. "
"
Looks like something is wrong."
);
pthread_mutex_unlock
(
&
LOCK_instance
);
return_val
=
TRUE
;
/* server is alive */
}
...
...
@@ -577,10 +578,10 @@ void Instance::kill_instance(int signum)
/* Kill suceeded */
if
(
signum
==
SIGKILL
)
/* really killed instance with SIGKILL */
{
log_error
(
"The instance
%s is being stopped forcibly. Normally"
\
"it should not happen. Probably the instance has been"
\
log_error
(
"The instance
'%s' is being stopped forcibly. Normally"
"it should not happen. Probably the instance has been"
"hanging. You should also check your IM setup"
,
options
.
instance_name
);
(
const
char
*
)
options
.
instance_name
);
/* After sucessful hard kill the pidfile need to be removed */
options
.
unlink_pidfile
();
}
...
...
server-tools/instance-manager/listener.cc
View file @
643606ca
...
...
@@ -280,7 +280,7 @@ int Listener_thread::create_tcp_socket()
FD_SET
(
ip_socket
,
&
read_fds
);
sockets
[
num_sockets
++
]
=
ip_socket
;
log_info
(
"accepting connections on ip socket
"
);
log_info
(
"accepting connections on ip socket
(port: %d)"
,
(
int
)
im_port
);
return
0
;
}
...
...
@@ -334,7 +334,7 @@ create_unix_socket(struct sockaddr_un &unix_socket_address)
/* make sure that instances won't be listening our sockets */
set_no_inherit
(
unix_socket
);
log_info
(
"accepting connections on unix socket
%s
"
,
log_info
(
"accepting connections on unix socket
'%s'
"
,
unix_socket_address
.
sun_path
);
sockets
[
num_sockets
++
]
=
unix_socket
;
FD_SET
(
unix_socket
,
&
read_fds
);
...
...
server-tools/instance-manager/manager.cc
View file @
643606ca
...
...
@@ -110,7 +110,7 @@ void stop_all(Guardian_thread *guardian, Thread_registry *registry)
Let guardian thread know that it should break it's processing cycle,
once it wakes up.
*/
guardian
->
request_shutdown
(
true
);
guardian
->
request_shutdown
();
/* wake guardian */
pthread_cond_signal
(
&
guardian
->
COND_guardian
);
/* stop all threads */
...
...
@@ -282,8 +282,7 @@ void manager(const Options &options)
{
if
(
!
guardian_thread
.
is_stopped
())
{
bool
stop_instances
=
true
;
guardian_thread
.
request_shutdown
(
stop_instances
);
guardian_thread
.
request_shutdown
();
pthread_cond_signal
(
&
guardian_thread
.
COND_guardian
);
}
else
...
...
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