Skip to content

Commit 2aa4714

Browse files
Tomasz Stepniakdahlerlend
Tomasz Stepniak
authored andcommitted
WL#15440 MySQL REST Service (MRS) - Umbrella WL
Bug#37526809 mysql_rest_service_metadata.router.router_name empty after bootstrap without --name Register default name in MRS metadata as address:rw_port. Change-Id: I3462068ad4ad48c974588e5e674cb3c38b918244
1 parent 2519671 commit 2aa4714

15 files changed

+428
-94
lines changed
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
# MySQL Rest Service schema created.
2+
CREATE USER mrs_bootstrap_user IDENTIFIED BY 'pass';
3+
GRANT SELECT, INSERT, UPDATE on mysql_rest_service_metadata.* to mrs_bootstrap_user;
4+
GRANT mysql_rest_service_data_provider TO mrs_bootstrap_user WITH ADMIN OPTION;
5+
GRANT CREATE USER ON *.* TO mrs_bootstrap_user WITH GRANT OPTION;
6+
GRANT mysql_rest_service_meta_provider TO mrs_bootstrap_user WITH ADMIN OPTION;
7+
FLUSH PRIVILEGES;
8+
Warnings:
9+
Warning 1681 'FLUSH PRIVILEGES' is deprecated and will be removed in a future release.
10+
# Bootstrapping MySQL Router instance at 'DIRECTORY'
11+
12+
- Storing account in keyring
13+
- Creating configuration .../mysqlrouter.conf
14+
15+
# MySQL Router configured for the Standalone MySQL Server at 'localhost'
16+
17+
After this, MySQL Router can be started with the generated configuration with:
18+
19+
$ mysqlrouter -c .../mysqlrouter.conf
20+
21+
This Router instance can be reached by connecting to:
22+
23+
## MySQL Classic protocol
24+
25+
- Read/Write Connections: localhost:6446
26+
- Read/Only Connections: localhost:6447
27+
- Read/Write Split Connections: localhost:6450
28+
29+
## MySQL X protocol
30+
31+
- Read/Write Connections: localhost:6448
32+
- Read/Only Connections: localhost:6449
33+
34+
# Configuring `MRS` plugin...
35+
36+
- Registering metadata
37+
- Creating account(s) (only those that are needed, if any)
38+
- Storing account in keyring
39+
- Adjusting configuration file .../mysqlrouter.conf
40+
41+
Once the MySQL Router is started, the MySQL REST Service can be reached at
42+
https://localhost:8443/<service-name>
43+
# File automatically generated during MySQL Router bootstrap
44+
[DEFAULT]
45+
logging_folder=TEMP_DIR_FILE_OR_FOLDER
46+
runtime_folder=TEMP_DIR_FILE_OR_FOLDER
47+
data_folder=TEMP_DIR_FILE_OR_FOLDER
48+
keyring_path=TEMP_DIR_FILE_OR_FOLDER
49+
master_key_path=TEMP_DIR_FILE_OR_FOLDER
50+
dynamic_state=TEMP_DIR_FILE_OR_FOLDER
51+
client_ssl_cert=TEMP_DIR_FILE_OR_FOLDER
52+
client_ssl_key=TEMP_DIR_FILE_OR_FOLDER
53+
client_ssl_mode=PREFERRED
54+
server_ssl_mode=PREFERRED
55+
server_ssl_verify=DISABLED
56+
unknown_config_option=error
57+
max_idle_server_connections=64
58+
router_require_enforce=1
59+
plugin_folder=ROUTER_PLUGIN_DIRECTORY
60+
61+
[logger]
62+
level=info
63+
64+
[routing:bootstrap_rw]
65+
bind_address=0.0.0.0
66+
bind_port=6446
67+
destinations=ADDR:PORT
68+
routing_strategy=first-available
69+
protocol=classic
70+
router_require_enforce=0
71+
72+
[routing:bootstrap_ro]
73+
bind_address=0.0.0.0
74+
bind_port=6447
75+
destinations=ADDR:PORT
76+
routing_strategy=round-robin
77+
protocol=classic
78+
router_require_enforce=0
79+
80+
[routing:bootstrap_x_rw]
81+
bind_address=0.0.0.0
82+
bind_port=6448
83+
destinations=ADDR:PORT
84+
routing_strategy=first-available
85+
protocol=x
86+
router_require_enforce=0
87+
88+
[routing:bootstrap_x_ro]
89+
bind_address=0.0.0.0
90+
bind_port=6449
91+
destinations=ADDR:PORT
92+
routing_strategy=round-robin
93+
protocol=x
94+
router_require_enforce=0
95+
96+
[http_server]
97+
port=8443
98+
ssl=1
99+
ssl_cert=TEMP_DIR_FILE_OR_FOLDER
100+
ssl_key=TEMP_DIR_FILE_OR_FOLDER
101+
102+
[http_auth_realm:default_auth_realm]
103+
backend=default_auth_backend
104+
method=basic
105+
name=default_realm
106+
107+
[rest_router]
108+
require_realm=default_auth_realm
109+
110+
[rest_api]
111+
112+
[http_auth_backend:default_auth_backend]
113+
backend=file
114+
filename=TEMP_DIR_FILE_OR_FOLDER
115+
116+
[rest_routing]
117+
require_realm=default_auth_realm
118+
119+
[mysql_rest_service]
120+
mysql_read_only_route=bootstrap_ro
121+
mysql_read_write_route=bootstrap_rw
122+
mysql_user=mysql_router_mrs1_RANDOM
123+
mysql_user_data_access=
124+
router_id=1
125+
126+
select id, product_name, options from mysql_rest_service_metadata.router;
127+
id product_name options
128+
1 MySQL Router {}
129+
select router_name from mysql_rest_service_metadata.router;
130+
router_name
131+
"Name found"
132+
select attributes from mysql_rest_service_metadata.router;
133+
attributes
134+
{"mrs_metadata_accounts": ["mysql_router_mrs1_RANDOM"]}
135+
DROP USER 'mrs_bootstrap_user'@'%';
136+
DROP SCHEMA mysql_rest_service_metadata;
137+
DROP ROLE mysql_rest_service_admin;
138+
DROP ROLE mysql_rest_service_schema_admin;
139+
DROP ROLE mysql_rest_service_meta_provider;
140+
DROP ROLE mysql_rest_service_data_provider;
141+
DROP ROLE mysql_rest_service_dev;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# MySQL Rest Service schema created.
2+
# MySQL Rest Service, server accounts configured.
3+
4+
5+
## I. Check how router_name is registered in the metadata
6+
#
7+
# 1. verify that default router_name is set to <hostname>:<http_port>
8+
# 2. verify that name gets updated when custom name is used
9+
#
10+
#
11+
# Registred SERVICE at path: /svc1
12+
# Registred DB_SCHEMA at path: /svc1/basic_schema
13+
# Registred DB_OBJECT at path: /svc1/basic_schema/obj
14+
15+
#
16+
# I.1
17+
select router_name from mysql_rest_service_metadata.router;
18+
router_name
19+
"Name found"
20+
21+
#
22+
# I.2
23+
# restart: %PARAMETERS%extra_router_config.cnf
24+
select router_name from mysql_rest_service_metadata.router;
25+
router_name
26+
custom_name
27+
DROP SCHEMA mysql_rest_service_metadata;
28+
DROP ROLE mysql_rest_service_admin;
29+
DROP ROLE mysql_rest_service_schema_admin;
30+
DROP ROLE mysql_rest_service_meta_provider;
31+
DROP ROLE mysql_rest_service_data_provider;
32+
DROP ROLE mysql_rest_service_dev;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Check default router_name registered in the metadata
2+
--source bootstrap_mrs_standalone.inc
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
--source include/have_router_bootstrap.inc
2+
3+
--source ../include/mrs/initialize_schema.inc
4+
5+
#create a b/s user with minimal required set of priviledges
6+
7+
CREATE USER mrs_bootstrap_user IDENTIFIED BY 'pass';
8+
GRANT SELECT, INSERT, UPDATE on mysql_rest_service_metadata.* to mrs_bootstrap_user;
9+
GRANT mysql_rest_service_data_provider TO mrs_bootstrap_user WITH ADMIN OPTION;
10+
GRANT CREATE USER ON *.* TO mrs_bootstrap_user WITH GRANT OPTION;
11+
GRANT mysql_rest_service_meta_provider TO mrs_bootstrap_user WITH ADMIN OPTION;
12+
FLUSH PRIVILEGES;
13+
14+
15+
replace_regex
16+
/ Bootstrapping MySQL Router.* instance at '.*'.*/ Bootstrapping MySQL Router instance at 'DIRECTORY'/
17+
/Creating configuration .*mysqlrouter.conf/Creating configuration ...\/mysqlrouter.conf/
18+
/.*mysqlrouter.* -c .*mysqlrouter.conf/$ mysqlrouter -c ...\/mysqlrouter.conf/
19+
/Adjusting configuration file .*mysqlrouter.conf/Adjusting configuration file ...\/mysqlrouter.conf/
20+
/- Adjusting permissions of generated files\n//
21+
;
22+
23+
exec $MYSQLROUTER_BOOTSTRAP
24+
$bootstrap_name_cmd
25+
--conf-set-option=DEFAULT.plugin_folder=$ROUTER_PLUGIN_DIRECTORY
26+
-B mrs_bootstrap_user:pass@127.0.0.1:$MASTER_MYPORT
27+
--directory $MYSQL_TMP_DIR/bootstrap_folder/
28+
--mrs --mrs-global-secret something_important ;
29+
30+
replace_regex /=.*\/bootstrap_folder\/.*/=TEMP_DIR_FILE_OR_FOLDER/
31+
/mysql_user=mysql_router_mrs1_.*/mysql_user=mysql_router_mrs1_RANDOM/
32+
/user=mysql_router1_.*/user=mysql_router1_RANDOM/
33+
/plugin_folder=.*/plugin_folder=ROUTER_PLUGIN_DIRECTORY/
34+
/destinations=.*/destinations=ADDR:PORT/ ;
35+
36+
37+
# Check the contents of the configuration file created
38+
--cat_file $MYSQL_TMP_DIR/bootstrap_folder/mysqlrouter.conf
39+
40+
# Check the metadata registered during the bootstrap
41+
if ($bootstrap_name_cmd) {
42+
select id, router_name, product_name, options from mysql_rest_service_metadata.router;
43+
}
44+
if (!$bootstrap_name_cmd) {
45+
select id, product_name, options from mysql_rest_service_metadata.router;
46+
47+
--replace_regex /^.+:\d+$/"Name found"/
48+
select router_name from mysql_rest_service_metadata.router;
49+
}
50+
51+
--replace_regex /"mysql_router_mrs1_.*"/"mysql_router_mrs1_RANDOM"/
52+
select attributes from mysql_rest_service_metadata.router;
53+
54+
# Cleanup
55+
if (!$KEEP_ROUTER_FILES)
56+
{
57+
--disable_query_log
58+
--disable_result_log
59+
--let $u1=`SELECT user from mysql.user WHERE user like "mysql_router_mrs1_%";`
60+
eval DROP USER $u1@'%';
61+
--enable_query_log
62+
--enable_result_log
63+
64+
DROP USER 'mrs_bootstrap_user'@'%';
65+
--force-rmdir $MYSQL_TMP_DIR/bootstrap_folder
66+
}
67+
68+
if ($KEEP_ROUTER_FILES == 1)
69+
{
70+
--echo DROP USER 'mrs_bootstrap_user'@'%';
71+
}
72+
73+
--let $cleanup_arg_mrs_skip_service_disable=1
74+
--source ../include/mrs/cleanup.inc
75+
Lines changed: 2 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,3 @@
1-
--source include/have_router_bootstrap.inc
1+
--let $bootstrap_name_cmd = --name MyRouterName
22

3-
--source ../include/mrs/initialize_schema.inc
4-
5-
#create a b/s user with minimal required set of priviledges
6-
7-
CREATE USER mrs_bootstrap_user IDENTIFIED BY 'pass';
8-
GRANT SELECT, INSERT, UPDATE on mysql_rest_service_metadata.* to mrs_bootstrap_user;
9-
GRANT mysql_rest_service_data_provider TO mrs_bootstrap_user WITH ADMIN OPTION;
10-
GRANT CREATE USER ON *.* TO mrs_bootstrap_user WITH GRANT OPTION;
11-
GRANT mysql_rest_service_meta_provider TO mrs_bootstrap_user WITH ADMIN OPTION;
12-
FLUSH PRIVILEGES;
13-
14-
15-
replace_regex
16-
/ Bootstrapping MySQL Router.* instance at '.*'.*/ Bootstrapping MySQL Router instance at 'DIRECTORY'/
17-
/Creating configuration .*mysqlrouter.conf/Creating configuration ...\/mysqlrouter.conf/
18-
/.*mysqlrouter.* -c .*mysqlrouter.conf/$ mysqlrouter -c ...\/mysqlrouter.conf/
19-
/Adjusting configuration file .*mysqlrouter.conf/Adjusting configuration file ...\/mysqlrouter.conf/
20-
/- Adjusting permissions of generated files\n//
21-
;
22-
23-
exec $MYSQLROUTER_BOOTSTRAP
24-
--name MyRouterName
25-
--conf-set-option=DEFAULT.plugin_folder=$ROUTER_PLUGIN_DIRECTORY
26-
-B mrs_bootstrap_user:[email protected]:$MASTER_MYPORT
27-
--directory $MYSQL_TMP_DIR/bootstrap_folder/
28-
--mrs --mrs-global-secret something_important ;
29-
30-
replace_regex /=.*\/bootstrap_folder\/.*/=TEMP_DIR_FILE_OR_FOLDER/
31-
/mysql_user=mysql_router_mrs1_.*/mysql_user=mysql_router_mrs1_RANDOM/
32-
/user=mysql_router1_.*/user=mysql_router1_RANDOM/
33-
/plugin_folder=.*/plugin_folder=ROUTER_PLUGIN_DIRECTORY/
34-
/destinations=.*/destinations=ADDR:PORT/ ;
35-
36-
37-
# Check the contents of the configuration file created
38-
--cat_file $MYSQL_TMP_DIR/bootstrap_folder/mysqlrouter.conf
39-
40-
# Check the metadata registered during the bootstrap
41-
select id, router_name, product_name, options from mysql_rest_service_metadata.router;
42-
43-
--replace_regex /"mysql_router_mrs1_.*"/"mysql_router_mrs1_RANDOM"/
44-
select attributes from mysql_rest_service_metadata.router;
45-
46-
# Cleanup
47-
if (!$KEEP_ROUTER_FILES)
48-
{
49-
--disable_query_log
50-
--disable_result_log
51-
--let $u1=`SELECT user from mysql.user WHERE user like "mysql_router_mrs1_%";`
52-
eval DROP USER $u1@'%';
53-
--enable_query_log
54-
--enable_result_log
55-
56-
DROP USER 'mrs_bootstrap_user'@'%';
57-
--force-rmdir $MYSQL_TMP_DIR/bootstrap_folder
58-
}
59-
60-
if ($KEEP_ROUTER_FILES == 1)
61-
{
62-
--echo DROP USER 'mrs_bootstrap_user'@'%';
63-
}
64-
65-
--let $cleanup_arg_mrs_skip_service_disable=1
66-
--source ../include/mrs/cleanup.inc
3+
--source bootstrap_mrs_standalone.inc
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
--source include/have_router.inc
2+
3+
--write_file $MYSQL_TMP_DIR/extra_router_config.cnf
4+
[DEFAULT]
5+
name=custom_name
6+
EOF
7+
8+
# Set the router-id, to generate statistics
9+
# this way we can wait until router detects
10+
# changes to DB_OBJECTS.
11+
--let $extra_mrs_router_id=1
12+
--source ../include/predefined_setup/configure_router_mrs_root.inc
13+
14+
15+
## Test starts here
16+
--echo
17+
--echo
18+
--echo ## I. Check how router_name is registered in the metadata
19+
--echo #
20+
--echo # 1. verify that default router_name is set to <hostname>:<http_port>
21+
--echo # 2. verify that name gets updated when custom name is used
22+
--echo #
23+
--echo #
24+
25+
26+
--source ../include/mrs/start_object_definition.inc
27+
28+
--let $mrs_add_service_path="/svc1"
29+
--let $mrs_add_host_name=""
30+
--source ../include/mrs/service/add.inc
31+
# Workaround: the end_object_definition, needs at least one db_object
32+
# to sync to its refresh.
33+
--let $mrs_add_schema=basic_schema
34+
--let $mrs_add_schema_path=/basic_schema
35+
--source ../include/mrs/db_schema/add.inc
36+
37+
--let $mrs_add_db_object=table2
38+
--let $mrs_add_db_object_path=/obj
39+
--source ../include/mrs/db_object/add.inc
40+
41+
--source ../include/mrs/end_object_definition.inc
42+
43+
44+
--echo
45+
--echo #
46+
--echo # I.1
47+
--replace_regex /^.+:\d+$/"Name found"/
48+
select router_name from mysql_rest_service_metadata.router;
49+
50+
51+
--echo
52+
--echo #
53+
--echo # I.2
54+
--connect (router_conn,127.0.0.1,root,,test,$ROUTING_STATIC_BIND_PORT)
55+
--replace_regex /restart: (.*\/)*/restart: %PARAMETERS%/
56+
--let $router_restart_parameters= restart: -a $MYSQL_TMP_DIR/extra_router_config.cnf
57+
--source ../include/mysqlrouter_restart.inc
58+
--source ../include/mrs/wait_mrs_read_metadata.inc
59+
60+
select router_name from mysql_rest_service_metadata.router;
61+
62+
63+
# Cleanup
64+
remove_file $MYSQL_TMP_DIR/extra_router_config.cnf;
65+
--source ../include/mrs/cleanup.inc

0 commit comments

Comments
 (0)