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
47d8d129
Commit
47d8d129
authored
Feb 22, 2006
by
msvensson@neptunus.(none)
Browse files
Options
Browse Files
Download
Plain Diff
Merge bk-internal:/home/bk/mysql-5.1-new
into neptunus.(none):/home/msvensson/mysql/mysql-5.1
parents
3f39d25e
8163afb4
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
93 additions
and
39 deletions
+93
-39
server-tools/instance-manager/guardian.cc
server-tools/instance-manager/guardian.cc
+0
-2
server-tools/instance-manager/instance_map.cc
server-tools/instance-manager/instance_map.cc
+68
-15
server-tools/instance-manager/instance_map.h
server-tools/instance-manager/instance_map.h
+10
-7
server-tools/instance-manager/manager.cc
server-tools/instance-manager/manager.cc
+7
-15
server-tools/instance-manager/options.cc
server-tools/instance-manager/options.cc
+6
-0
server-tools/instance-manager/priv.h
server-tools/instance-manager/priv.h
+2
-0
No files found.
server-tools/instance-manager/guardian.cc
View file @
47d8d129
...
@@ -256,7 +256,6 @@ int Guardian_thread::init()
...
@@ -256,7 +256,6 @@ int Guardian_thread::init()
Instance
*
instance
;
Instance
*
instance
;
Instance_map
::
Iterator
iterator
(
instance_map
);
Instance_map
::
Iterator
iterator
(
instance_map
);
instance_map
->
lock
();
/* clear the list of guarded instances */
/* clear the list of guarded instances */
free_root
(
&
alloc
,
MYF
(
0
));
free_root
(
&
alloc
,
MYF
(
0
));
init_alloc_root
(
&
alloc
,
MEM_ROOT_BLOCK_SIZE
,
0
);
init_alloc_root
(
&
alloc
,
MEM_ROOT_BLOCK_SIZE
,
0
);
...
@@ -272,7 +271,6 @@ int Guardian_thread::init()
...
@@ -272,7 +271,6 @@ int Guardian_thread::init()
}
}
}
}
instance_map
->
unlock
();
return
0
;
return
0
;
}
}
...
...
server-tools/instance-manager/instance_map.cc
View file @
47d8d129
...
@@ -80,19 +80,44 @@ static void delete_instance(void *u)
...
@@ -80,19 +80,44 @@ static void delete_instance(void *u)
static
int
process_option
(
void
*
ctx
,
const
char
*
group
,
const
char
*
option
)
static
int
process_option
(
void
*
ctx
,
const
char
*
group
,
const
char
*
option
)
{
{
Instance_map
*
map
=
NULL
;
Instance_map
*
map
=
NULL
;
map
=
(
Instance_map
*
)
ctx
;
return
map
->
process_one_option
(
group
,
option
);
}
C_MODE_END
/*
Process one option from the configuration file.
SYNOPSIS
Instance_map::process_one_option()
group group name
option option string (e.g. "--name=value")
DESCRIPTION
This is an auxiliary function and should not be used externally.
It is used only by flush_instances(), which pass it to
process_option(). The caller ensures proper locking
of the instance map object.
*/
int
Instance_map
::
process_one_option
(
const
char
*
group
,
const
char
*
option
)
{
Instance
*
instance
=
NULL
;
Instance
*
instance
=
NULL
;
static
const
char
prefix
[]
=
{
'm'
,
'y'
,
's'
,
'q'
,
'l'
,
'd'
};
static
const
char
prefix
[]
=
{
'm'
,
'y'
,
's'
,
'q'
,
'l'
,
'd'
};
map
=
(
Instance_map
*
)
ctx
;
if
(
strncmp
(
group
,
prefix
,
sizeof
prefix
)
==
0
&&
if
(
strncmp
(
group
,
prefix
,
sizeof
prefix
)
==
0
&&
((
my_isdigit
(
default_charset_info
,
group
[
sizeof
prefix
]))
((
my_isdigit
(
default_charset_info
,
group
[
sizeof
prefix
]))
||
group
[
sizeof
(
prefix
)]
==
'\0'
))
||
group
[
sizeof
(
prefix
)]
==
'\0'
))
{
{
if
((
instance
=
map
->
find
(
group
,
strlen
(
group
)))
==
NULL
)
if
(
!
(
instance
=
(
Instance
*
)
hash_search
(
&
hash
,
(
byte
*
)
group
,
strlen
(
group
))))
{
{
if
(
(
instance
=
new
Instance
)
==
0
)
if
(
!
(
instance
=
new
Instance
)
)
goto
err
;
goto
err
;
if
(
instance
->
init
(
group
)
||
m
ap
->
add_instance
(
instance
))
if
(
instance
->
init
(
group
)
||
m
y_hash_insert
(
&
hash
,
(
byte
*
)
instance
))
goto
err_instance
;
goto
err_instance
;
}
}
...
@@ -108,8 +133,6 @@ static int process_option(void *ctx, const char *group, const char *option)
...
@@ -108,8 +133,6 @@ static int process_option(void *ctx, const char *group, const char *option)
return
1
;
return
1
;
}
}
C_MODE_END
Instance_map
::
Instance_map
(
const
char
*
default_mysqld_path_arg
)
:
Instance_map
::
Instance_map
(
const
char
*
default_mysqld_path_arg
)
:
mysqld_path
(
default_mysqld_path_arg
)
mysqld_path
(
default_mysqld_path_arg
)
...
@@ -144,30 +167,61 @@ void Instance_map::unlock()
...
@@ -144,30 +167,61 @@ void Instance_map::unlock()
pthread_mutex_unlock
(
&
LOCK_instance_map
);
pthread_mutex_unlock
(
&
LOCK_instance_map
);
}
}
/*
Re-read instance configuration file.
SYNOPSIS
Instance_map::flush_instances()
DESCRIPTION
This function will:
- clear the current list of instances. This removes both
running and stopped instances.
- load a new instance configuration from the file.
- pass on the new map to the guardian thread: it will start
all instances that are marked `guarded' and not yet started.
Note, as the check whether an instance is started is currently
very simple (returns true if there is a MySQL server running
at the given port), this function has some peculiar
side-effects:
* if the port number of a running instance was changed, the
old instance is forgotten, even if it was running. The new
instance will be started at the new port.
* if the configuration was changed in a way that two
instances swapped their port numbers, the guardian thread
will not notice that and simply report that both instances
are configured successfully and running.
In order to avoid such side effects one should never call
FLUSH INSTANCES without prior stop of all running instances.
TODO
FLUSH INSTANCES should return an error if it's called
while there is a running instance.
*/
int
Instance_map
::
flush_instances
()
int
Instance_map
::
flush_instances
()
{
{
int
rc
;
int
rc
;
/*
Guardian thread relies on the instance map repository for guarding
instances. This is why refreshing instance map, we need (1) to stop
guardian (2) reload the instance map (3) reinitialize the guardian
with new instances.
*/
guardian
->
lock
();
guardian
->
lock
();
pthread_mutex_lock
(
&
LOCK_instance_map
);
pthread_mutex_lock
(
&
LOCK_instance_map
);
hash_free
(
&
hash
);
hash_free
(
&
hash
);
hash_init
(
&
hash
,
default_charset_info
,
START_HASH_SIZE
,
0
,
0
,
hash_init
(
&
hash
,
default_charset_info
,
START_HASH_SIZE
,
0
,
0
,
get_instance_key
,
delete_instance
,
0
);
get_instance_key
,
delete_instance
,
0
);
pthread_mutex_unlock
(
&
LOCK_instance_map
);
rc
=
load
();
rc
=
load
();
guardian
->
init
();
guardian
->
init
();
pthread_mutex_unlock
(
&
LOCK_instance_map
);
guardian
->
unlock
();
guardian
->
unlock
();
return
rc
;
return
rc
;
}
}
int
Instance_map
::
add_instance
(
Instance
*
instance
)
{
return
my_hash_insert
(
&
hash
,
(
byte
*
)
instance
);
}
Instance
*
Instance
*
Instance_map
::
find
(
const
char
*
name
,
uint
name_len
)
Instance_map
::
find
(
const
char
*
name
,
uint
name_len
)
{
{
...
@@ -190,10 +244,9 @@ int Instance_map::complete_initialization()
...
@@ -190,10 +244,9 @@ int Instance_map::complete_initialization()
if
((
instance
=
new
Instance
)
==
0
)
if
((
instance
=
new
Instance
)
==
0
)
goto
err
;
goto
err
;
if
(
instance
->
init
(
"mysqld"
)
||
add_instance
(
instance
))
if
(
instance
->
init
(
"mysqld"
)
||
my_hash_insert
(
&
hash
,
(
byte
*
)
instance
))
goto
err_instance
;
goto
err_instance
;
/*
/*
After an instance have been added to the instance_map,
After an instance have been added to the instance_map,
hash_free should handle it's deletion => goto err, not
hash_free should handle it's deletion => goto err, not
...
...
server-tools/instance-manager/instance_map.h
View file @
47d8d129
...
@@ -63,21 +63,24 @@ class Instance_map
...
@@ -63,21 +63,24 @@ class Instance_map
void
lock
();
void
lock
();
void
unlock
();
void
unlock
();
int
init
();
int
init
();
/*
Process a given option and assign it to appropricate instance. This is
required for the option handler, passed to my_search_option_files().
*/
int
process_one_option
(
const
char
*
group
,
const
char
*
option
);
Instance_map
(
const
char
*
default_mysqld_path_arg
);
Instance_map
(
const
char
*
default_mysqld_path_arg
);
~
Instance_map
();
~
Instance_map
();
/* loads options from config files */
int
load
();
/* adds instance to internal hash */
int
add_instance
(
Instance
*
instance
);
/* inits instances argv's after all options have been loaded */
int
complete_initialization
();
public:
public:
const
char
*
mysqld_path
;
const
char
*
mysqld_path
;
Guardian_thread
*
guardian
;
Guardian_thread
*
guardian
;
private:
/* loads options from config files */
int
load
();
/* inits instances argv's after all options have been loaded */
int
complete_initialization
();
private:
private:
enum
{
START_HASH_SIZE
=
16
};
enum
{
START_HASH_SIZE
=
16
};
pthread_mutex_t
LOCK_instance_map
;
pthread_mutex_t
LOCK_instance_map
;
...
...
server-tools/instance-manager/manager.cc
View file @
47d8d129
...
@@ -135,15 +135,6 @@ void manager(const Options &options)
...
@@ -135,15 +135,6 @@ void manager(const Options &options)
if
(
instance_map
.
init
()
||
user_map
.
init
())
if
(
instance_map
.
init
()
||
user_map
.
init
())
return
;
return
;
if
(
instance_map
.
load
())
{
log_error
(
"Cannot init instances repository. This might be caused by "
"the wrong config file options. For instance, missing mysqld "
"binary. Aborting."
);
return
;
}
if
(
user_map
.
load
(
options
.
password_file_name
))
if
(
user_map
.
load
(
options
.
password_file_name
))
return
;
return
;
...
@@ -207,12 +198,13 @@ void manager(const Options &options)
...
@@ -207,12 +198,13 @@ void manager(const Options &options)
shutdown_complete
=
FALSE
;
shutdown_complete
=
FALSE
;
/* init list of guarded instances */
if
(
instance_map
.
flush_instances
())
guardian_thread
.
lock
();
{
log_error
(
"Cannot init instances repository. This might be caused by "
guardian_thread
.
init
();
"the wrong config file options. For instance, missing mysqld "
"binary. Aborting."
);
guardian_thread
.
unlock
();
return
;
}
/*
/*
After the list of guarded instances have been initialized,
After the list of guarded instances have been initialized,
...
...
server-tools/instance-manager/options.cc
View file @
47d8d129
...
@@ -79,6 +79,7 @@ enum options {
...
@@ -79,6 +79,7 @@ enum options {
#endif
#endif
OPT_MONITORING_INTERVAL
,
OPT_MONITORING_INTERVAL
,
OPT_PORT
,
OPT_PORT
,
OPT_WAIT_TIMEOUT
,
OPT_BIND_ADDRESS
OPT_BIND_ADDRESS
};
};
...
@@ -151,6 +152,11 @@ static struct my_option my_long_options[] =
...
@@ -151,6 +152,11 @@ static struct my_option my_long_options[] =
{
"version"
,
'V'
,
"Output version information and exit."
,
0
,
0
,
0
,
{
"version"
,
'V'
,
"Output version information and exit."
,
0
,
0
,
0
,
GET_NO_ARG
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
GET_NO_ARG
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
},
{
"wait-timeout"
,
OPT_WAIT_TIMEOUT
,
"The number of seconds IM waits "
"for activity on a connection before closing it."
,
(
gptr
*
)
&
net_read_timeout
,
(
gptr
*
)
&
net_read_timeout
,
0
,
GET_ULONG
,
REQUIRED_ARG
,
NET_WAIT_TIMEOUT
,
1
,
LONG_TIMEOUT
,
0
,
1
,
0
},
{
0
,
0
,
0
,
0
,
0
,
0
,
GET_NO_ARG
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
}
{
0
,
0
,
0
,
0
,
0
,
0
,
GET_NO_ARG
,
NO_ARG
,
0
,
0
,
0
,
0
,
0
,
0
}
};
};
...
...
server-tools/instance-manager/priv.h
View file @
47d8d129
...
@@ -28,6 +28,8 @@
...
@@ -28,6 +28,8 @@
#define SERVER_DEFAULT_PORT 3306
#define SERVER_DEFAULT_PORT 3306
#define DEFAULT_MONITORING_INTERVAL 20
#define DEFAULT_MONITORING_INTERVAL 20
#define DEFAULT_PORT 2273
#define DEFAULT_PORT 2273
/* three-week timeout should be enough */
#define LONG_TIMEOUT ((ulong) 3600L*24L*21L)
/* the pid of the manager process (of the signal thread on the LinuxThreads) */
/* the pid of the manager process (of the signal thread on the LinuxThreads) */
extern
pid_t
manager_pid
;
extern
pid_t
manager_pid
;
...
...
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