Skip to content

Commit 5e6e973

Browse files
committed
[#3677] MySQL now migrates client_classes data
src/bin/admin/tests/mysql_tests.sh.in mysql_migrate_client_class_test() - new test src/share/database/scripts/mysql/dhcpdb_create.mysql src/share/database/scripts/mysql/upgrade_026_to_027.sh.in Added migration of client_classes data
1 parent 6bbbc1e commit 5e6e973

File tree

3 files changed

+194
-0
lines changed

3 files changed

+194
-0
lines changed

src/bin/admin/tests/mysql_tests.sh.in

+126
Original file line numberDiff line numberDiff line change
@@ -3609,6 +3609,131 @@ mysql_remove_control_socket_parameters_test() {
36093609
test_finish 0
36103610
}
36113611

3612+
# Verifies that client_class to client_classes migrates
3613+
# single text entries to JSON list correctly
3614+
mysql_migrate_client_class_test() {
3615+
test_start "mysql.migrate_client_class_test"
3616+
3617+
# Let's wipe the whole database
3618+
mysql_wipe
3619+
3620+
# We need to create an older database with lease data so we can
3621+
# verify the upgrade mechanisms which prepopulate the lease stat
3622+
# tables.
3623+
#
3624+
# Initialize database to schema 1.0.
3625+
mysql -u"${db_user}" -p"${db_password}" "${db_name}" < "@abs_top_srcdir@/src/bin/admin/tests/dhcpdb_create_1.0.mysql"
3626+
3627+
# Now upgrade to schema 4.0, this has lease_state in it
3628+
mysql_upgrade_schema_to_version 26.0
3629+
3630+
# Now we need insert some leases to "migrate" for both v4 and v6
3631+
qry=\
3632+
"set @disable_audit 1;\
3633+
insert into dhcp4_shared_network (name, client_classes) values ('aaa', 'abc');\
3634+
insert into dhcp4_shared_network (name, client_classes) values ('bbb', '');\
3635+
insert into dhcp4_shared_network (name) values ('ccc');\
3636+
set @disable_audit 0;\
3637+
run_statement "insert v4 networks" "$qry"
3638+
3639+
# Let's upgrade it to the latest version.
3640+
run_command \
3641+
"${kea_admin}" db-upgrade mysql -u "${db_user}" -p "${db_password}" -n "${db_name}" -d "${db_scripts_dir}"
3642+
3643+
qry="select client_classes from dhcp4_shared_network where name = 'aaa' and client_classes = '[ \"abc\" ]';
3644+
run_statement "#4.1" "$qry" 1
3645+
3646+
mysql_wipe
3647+
3648+
test_finish 0
3649+
}
3650+
3651+
# Verifies that client_class to client_classes migrates
3652+
# single text entries to JSON list correctly
3653+
mysql_migrate_client_class_test() {
3654+
test_start "mysql.migrate_client_class_test"
3655+
3656+
# Let's wipe the whole database
3657+
mysql_wipe
3658+
3659+
# We need to create an older database with lease data so we can
3660+
# verify the upgrade mechanisms which prepopulate the lease stat
3661+
# tables.
3662+
#
3663+
# Initialize database to schema 1.0.
3664+
mysql -u"${db_user}" -p"${db_password}" "${db_name}" < "@abs_top_srcdir@/src/bin/admin/tests/dhcpdb_create_1.0.mysql"
3665+
3666+
# Now upgrade to schema 4.0, this has lease_state in it
3667+
mysql_upgrade_schema_to_version 26.0
3668+
3669+
# Now we need insert some leases to "migrate" for both v4 and v6
3670+
qry="\
3671+
set @disable_audit = 1;\
3672+
insert into dhcp4_shared_network (name, client_class, modification_ts) values ('net1', 'abc', current_timestamp);\
3673+
insert into dhcp4_shared_network (name, client_class, modification_ts) values ('net2', '', current_timestamp);\
3674+
insert into dhcp4_shared_network (name, modification_ts) values ('net3', current_timestamp);\
3675+
insert into dhcp4_subnet (subnet_id, subnet_prefix, modification_ts, client_class)\
3676+
values (1, '192.0.0.0/24', current_timestamp, 'subber');\
3677+
insert into dhcp4_pool (subnet_id, start_address, end_address, modification_ts, client_class)\
3678+
values (1, INET_ATON('192.0.0.0'), INET_ATON('192.0.0.1'), current_timestamp, 'poolio');\
3679+
insert into dhcp6_shared_network (name, client_class, modification_ts) values ('net6', 'xyz', current_timestamp);\
3680+
insert into dhcp6_subnet (subnet_id, subnet_prefix, modification_ts, client_class)\
3681+
values (6, '2001:db8:1::/64', current_timestamp, 'subber6');\
3682+
insert into dhcp6_pool (subnet_id, start_address, end_address, modification_ts, client_class)\
3683+
values (6, ('2001:db8:1::1'), ('2001:db8:1::2'), current_timestamp, 'poolio6');\
3684+
insert into dhcp6_pd_pool (subnet_id, prefix, prefix_length, delegated_prefix_length, \
3685+
excluded_prefix_length, modification_ts, client_class) \
3686+
values (6, ('3001::'), 64, 72, 0, current_timestamp, 'pd_poolio');\
3687+
set @disable_audit = 0;\
3688+
"
3689+
run_statement "insert v4 networks" "$qry"
3690+
3691+
# Let's upgrade it to the latest version.
3692+
run_command \
3693+
"${kea_admin}" db-upgrade mysql -u "${db_user}" -p "${db_password}" -n "${db_name}" -d "${db_scripts_dir}"
3694+
3695+
# Verify dhcp4_shared_network values
3696+
qry="select count(name) from dhcp4_shared_network where name = 'net1' and client_classes = '[ \"abc\" ]';"
3697+
run_statement "#1" "$qry" 1
3698+
3699+
qry="select count(name) from dhcp4_shared_network where name = 'net2' and client_classes IS NULL;"
3700+
run_statement "#2" "$qry" 1
3701+
3702+
qry="select count(name) from dhcp4_shared_network where name = 'net3' and client_classes IS NULL;"
3703+
run_statement "#3" "$qry" 1
3704+
3705+
# We don't bother verifying all null and '' handling again, only that the conversion function is
3706+
# called for remaining tables.
3707+
3708+
# Verify dhcp4_subnet.
3709+
qry="select count(subnet_id) from dhcp4_subnet where subnet_id = 1 and client_classes = '[ \"subber\" ]';"
3710+
run_statement "#4" "$qry" 1
3711+
3712+
# Verify dhcp4_pool.
3713+
qry="select count(subnet_id) from dhcp4_pool where subnet_id = 1 and client_classes = '[ \"poolio\" ]';"
3714+
run_statement "#5" "$qry" 1
3715+
3716+
# Verify dhcp6_shared_network.
3717+
qry="select count(name) from dhcp6_shared_network where name = 'net6' and client_classes = '[ \"xyz\" ]';"
3718+
run_statement "#6" "$qry" 1
3719+
3720+
# Verify dhcp6_subnet.
3721+
qry="select count(subnet_id) from dhcp6_subnet where subnet_id = 6 and client_classes = '[ \"subber6\" ]';"
3722+
run_statement "#7" "$qry" 1
3723+
3724+
# Verify dhcp6_pool.
3725+
qry="select count(subnet_id) from dhcp6_pool where subnet_id = 6 and client_classes = '[ \"poolio6\" ]';"
3726+
run_statement "#8" "$qry" 1
3727+
3728+
# Verify dhcp6_pd_pool.
3729+
qry="select count(subnet_id) from dhcp6_pd_pool where subnet_id = 6 and client_classes = '[ \"pd_poolio\" ]';"
3730+
run_statement "#9" "$qry" 1
3731+
3732+
mysql_wipe
3733+
3734+
test_finish 0
3735+
}
3736+
36123737
# Run tests.
36133738
mysql_db_init_test
36143739
mysql_host_reservation_init_test
@@ -3643,3 +3768,4 @@ mysql_reservation_mode_global_parameters_test
36433768
mysql_reservation_mode_out_of_pool_parameters_test
36443769
mysql_migrate_opt_record_type
36453770
mysql_remove_control_socket_parameters_test
3771+
mysql_migrate_client_class_test

src/share/database/scripts/mysql/dhcpdb_create.mysql

+34
Original file line numberDiff line numberDiff line change
@@ -6070,27 +6070,61 @@ UPDATE schema_version
60706070

60716071
-- This line starts the schema upgrade to version 27.0.
60726072

6073+
SET @disable_audit = 1;
6074+
6075+
DROP FUNCTION IF EXISTS textToJSONList;
6076+
DELIMITER $$
6077+
CREATE FUNCTION textToJSONList(orig TEXT)
6078+
RETURNS TEXT
6079+
DETERMINISTIC
6080+
BEGIN
6081+
IF orig = '' THEN
6082+
RETURN NULL;
6083+
END IF;
6084+
6085+
RETURN CONCAT('[ "', orig, '" ]');
6086+
END $$
6087+
DELIMITER ;
6088+
60736089
ALTER TABLE dhcp4_shared_network
60746090
CHANGE client_class client_classes LONGTEXT DEFAULT NULL;
60756091

6092+
UPDATE dhcp4_shared_network SET client_classes = textToJSONList(client_classes);
6093+
60766094
ALTER TABLE dhcp4_subnet
60776095
CHANGE client_class client_classes LONGTEXT DEFAULT NULL;
60786096

6097+
UPDATE dhcp4_subnet SET client_classes = textToJSONList(client_classes);
6098+
60796099
ALTER TABLE dhcp4_pool
60806100
CHANGE client_class client_classes LONGTEXT DEFAULT NULL;
60816101

6102+
UPDATE dhcp4_pool SET client_classes = textToJSONList(client_classes);
6103+
60826104
ALTER TABLE dhcp6_shared_network
60836105
CHANGE client_class client_classes LONGTEXT DEFAULT NULL;
60846106

6107+
UPDATE dhcp6_shared_network SET client_classes = textToJSONList(client_classes);
6108+
60856109
ALTER TABLE dhcp6_subnet
60866110
CHANGE client_class client_classes LONGTEXT DEFAULT NULL;
60876111

6112+
UPDATE dhcp6_subnet SET client_classes = textToJSONList(client_classes);
6113+
60886114
ALTER TABLE dhcp6_pool
60896115
CHANGE client_class client_classes LONGTEXT DEFAULT NULL;
60906116

6117+
UPDATE dhcp6_pool SET client_classes = textToJSONList(client_classes);
6118+
60916119
ALTER TABLE dhcp6_pd_pool
60926120
CHANGE client_class client_classes LONGTEXT DEFAULT NULL;
60936121

6122+
UPDATE dhcp6_pd_pool SET client_classes = textToJSONList(client_classes);
6123+
6124+
DROP FUNCTION textToJSONList;
6125+
6126+
SET @disable_audit = 0;
6127+
60946128
-- Update the schema version number.
60956129
UPDATE schema_version
60966130
SET version = '27', minor = '0';

src/share/database/scripts/mysql/upgrade_026_to_027.sh.in

+34
Original file line numberDiff line numberDiff line change
@@ -56,27 +56,61 @@ mysql "$@" <<EOF
5656
5757
-- This line starts the schema upgrade to version 27.0.
5858
59+
SET @disable_audit = 1;
60+
61+
DROP FUNCTION IF EXISTS textToJSONList;
62+
DELIMITER $$
63+
CREATE FUNCTION textToJSONList(orig TEXT)
64+
RETURNS TEXT
65+
DETERMINISTIC
66+
BEGIN
67+
IF orig = '' THEN
68+
RETURN NULL;
69+
END IF;
70+
71+
RETURN CONCAT('[ "', orig, '" ]');
72+
END $$
73+
DELIMITER ;
74+
5975
ALTER TABLE dhcp4_shared_network
6076
CHANGE client_class client_classes LONGTEXT DEFAULT NULL;
6177
78+
UPDATE dhcp4_shared_network SET client_classes = textToJSONList(client_classes);
79+
6280
ALTER TABLE dhcp4_subnet
6381
CHANGE client_class client_classes LONGTEXT DEFAULT NULL;
6482
83+
UPDATE dhcp4_subnet SET client_classes = textToJSONList(client_classes);
84+
6585
ALTER TABLE dhcp4_pool
6686
CHANGE client_class client_classes LONGTEXT DEFAULT NULL;
6787
88+
UPDATE dhcp4_pool SET client_classes = textToJSONList(client_classes);
89+
6890
ALTER TABLE dhcp6_shared_network
6991
CHANGE client_class client_classes LONGTEXT DEFAULT NULL;
7092
93+
UPDATE dhcp6_shared_network SET client_classes = textToJSONList(client_classes);
94+
7195
ALTER TABLE dhcp6_subnet
7296
CHANGE client_class client_classes LONGTEXT DEFAULT NULL;
7397
98+
UPDATE dhcp6_subnet SET client_classes = textToJSONList(client_classes);
99+
74100
ALTER TABLE dhcp6_pool
75101
CHANGE client_class client_classes LONGTEXT DEFAULT NULL;
76102
103+
UPDATE dhcp6_pool SET client_classes = textToJSONList(client_classes);
104+
77105
ALTER TABLE dhcp6_pd_pool
78106
CHANGE client_class client_classes LONGTEXT DEFAULT NULL;
79107
108+
UPDATE dhcp6_pd_pool SET client_classes = textToJSONList(client_classes);
109+
110+
DROP FUNCTION textToJSONList;
111+
112+
SET @disable_audit = 0;
113+
80114
-- Update the schema version number.
81115
UPDATE schema_version
82116
SET version = '27', minor = '0';

0 commit comments

Comments
 (0)