Skip to content

Commit 3eb5460

Browse files
committed
[#3677] Posgresql now migrates client-classes data
modified: src/bin/admin/tests/pgsql_tests.sh.in modified: src/share/database/scripts/pgsql/dhcpdb_create.pgsql modified: src/share/database/scripts/pgsql/upgrade_026_to_027.sh.in modified: src/share/database/scripts/mysql/upgrade_026_to_027.sh.in modified: src/share/database/scripts/mysql/dhcpdb_create.mysql
1 parent 5e6e973 commit 3eb5460

File tree

5 files changed

+155
-2
lines changed

5 files changed

+155
-2
lines changed

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

+89
Original file line numberDiff line numberDiff line change
@@ -2872,6 +2872,94 @@ pgsql_remove_control_socket_parameters_test() {
28722872
test_finish 0
28732873
}
28742874

2875+
# Verifies that client_class to client_classes migrates
2876+
# single text entries to JSON list correctly
2877+
pgsql_migrate_client_class_test() {
2878+
2879+
test_start "pgsql.pgsql_migrate_client_class_test"
2880+
2881+
# Let's wipe the whole database
2882+
pgsql_wipe
2883+
2884+
# We need to create an older database with lease data so we can
2885+
# verify the upgrade mechanisms which prepopulate the lease stat
2886+
# tables.
2887+
#
2888+
# Initialize database to schema 1.0.
2889+
pgsql_execute_script "@abs_top_srcdir@/src/bin/admin/tests/dhcpdb_create_1.0.pgsql"
2890+
assert_eq 0 "${EXIT_CODE}" "cannot initialize 1.0 database, expected exit code: %d, actual: %d"
2891+
2892+
# Now upgrade to schema 26.0
2893+
pgsql_upgrade_schema_to_version 26.0
2894+
2895+
# Now we need insert some leases to "migrate" for both v4 and v6
2896+
qry="\
2897+
select set_config('kea.disable_audit', 'true', false);\
2898+
insert into dhcp4_shared_network (name, client_class, modification_ts) values ('net1', 'abc', current_timestamp);\
2899+
insert into dhcp4_shared_network (name, client_class, modification_ts) values ('net2', '', current_timestamp);\
2900+
insert into dhcp4_shared_network (name, modification_ts) values ('net3', current_timestamp);\
2901+
insert into dhcp4_subnet (subnet_id, subnet_prefix, modification_ts, client_class)\
2902+
values (1, '192.0.0.0/24', current_timestamp, 'subber');\
2903+
insert into dhcp4_pool (subnet_id, start_address, end_address, modification_ts, client_class)\
2904+
values (1, '192.0.0.0', '192.0.0.1', current_timestamp, 'poolio');\
2905+
insert into dhcp6_shared_network (name, client_class, modification_ts) values ('net6', 'xyz', current_timestamp);\
2906+
insert into dhcp6_subnet (subnet_id, subnet_prefix, modification_ts, client_class)\
2907+
values (6, '2001:db8:1::/64', current_timestamp, 'subber6');\
2908+
insert into dhcp6_pool (subnet_id, start_address, end_address, modification_ts, client_class)\
2909+
values (6, '2001:db8:1::1', '2001:db8:1::2', current_timestamp, 'poolio6');\
2910+
insert into dhcp6_pd_pool (subnet_id, prefix, prefix_length, delegated_prefix_length, \
2911+
excluded_prefix_length, modification_ts, client_class) \
2912+
values (6, ('3001::'), 64, 72, 0, current_timestamp, 'pd_poolio');\
2913+
select set_config('kea.disable_audit', 'false', false);\
2914+
"
2915+
run_statement "insert test data" "$qry"
2916+
2917+
# Let's upgrade it to the latest version.
2918+
pgsql_upgrade_schema_to_version 27.0
2919+
2920+
# Verify dhcp4_shared_network values
2921+
qry="select count(name) from dhcp4_shared_network where name = 'net1' and client_classes = '[ \"abc\" ]';"
2922+
run_statement "#1" "$qry" 1
2923+
2924+
qry="select count(name) from dhcp4_shared_network where name = 'net2' and client_classes IS NULL;"
2925+
run_statement "#2" "$qry" 1
2926+
2927+
qry="select count(name) from dhcp4_shared_network where name = 'net3' and client_classes IS NULL;"
2928+
run_statement "#3" "$qry" 1
2929+
2930+
# We don't bother verifying all null and '' handling again, only that the conversion function is
2931+
# called for remaining tables.
2932+
2933+
# Verify dhcp4_subnet.
2934+
qry="select count(subnet_id) from dhcp4_subnet where subnet_id = 1 and client_classes = '[ \"subber\" ]';"
2935+
run_statement "#4" "$qry" 1
2936+
2937+
# Verify dhcp4_pool.
2938+
qry="select count(subnet_id) from dhcp4_pool where subnet_id = 1 and client_classes = '[ \"poolio\" ]';"
2939+
run_statement "#5" "$qry" 1
2940+
2941+
# Verify dhcp6_shared_network.
2942+
qry="select count(name) from dhcp6_shared_network where name = 'net6' and client_classes = '[ \"xyz\" ]';"
2943+
run_statement "#6" "$qry" 1
2944+
2945+
# Verify dhcp6_subnet.
2946+
qry="select count(subnet_id) from dhcp6_subnet where subnet_id = 6 and client_classes = '[ \"subber6\" ]';"
2947+
run_statement "#7" "$qry" 1
2948+
2949+
# Verify dhcp6_pool.
2950+
qry="select count(subnet_id) from dhcp6_pool where subnet_id = 6 and client_classes = '[ \"poolio6\" ]';"
2951+
run_statement "#8" "$qry" 1
2952+
2953+
# Verify dhcp6_pd_pool.
2954+
qry="select count(subnet_id) from dhcp6_pd_pool where subnet_id = 6 and client_classes = '[ \"pd_poolio\" ]';"
2955+
run_statement "#9" "$qry" 1
2956+
2957+
pgsql_wipe
2958+
2959+
test_finish 0
2960+
}
2961+
2962+
28752963
# Run tests.
28762964
pgsql_db_init_test
28772965
pgsql_db_version_test
@@ -2900,3 +2988,4 @@ pgsql_reservation_mode_global_parameters_test
29002988
pgsql_reservation_mode_out_of_pool_parameters_test
29012989
pgsql_migrate_opt_record_type
29022990
pgsql_remove_control_socket_parameters_test
2991+
pgsql_migrate_client_class_test

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -6078,7 +6078,7 @@ CREATE FUNCTION textToJSONList(orig TEXT)
60786078
RETURNS TEXT
60796079
DETERMINISTIC
60806080
BEGIN
6081-
IF orig = '' THEN
6081+
IF orig = '' OR orig IS NULL THEN
60826082
RETURN NULL;
60836083
END IF;
60846084

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ CREATE FUNCTION textToJSONList(orig TEXT)
6464
RETURNS TEXT
6565
DETERMINISTIC
6666
BEGIN
67-
IF orig = '' THEN
67+
IF orig = '' OR orig IS NULL THEN
6868
RETURN NULL;
6969
END IF;
7070

src/share/database/scripts/pgsql/dhcpdb_create.pgsql

+32
Original file line numberDiff line numberDiff line change
@@ -6531,27 +6531,59 @@ UPDATE schema_version
65316531

65326532
-- This line starts the schema upgrade to version 27.0.
65336533

6534+
SELECT set_config('kea.disable_audit', 'true', false);
6535+
6536+
CREATE OR REPLACE FUNCTION textToJSONList(orig TEXT)
6537+
RETURNS TEXT AS $$
6538+
DECLARE
6539+
BEGIN
6540+
IF orig = '' OR orig IS NULL THEN
6541+
RETURN NULL;
6542+
END IF;
6543+
6544+
RETURN CONCAT('[ "', orig, '" ]');
6545+
END;
6546+
$$ LANGUAGE plpgsql;
6547+
65346548
ALTER TABLE dhcp4_shared_network RENAME client_class TO client_classes;
65356549
ALTER TABLE dhcp4_shared_network ALTER COLUMN client_classes TYPE TEXT;
65366550

6551+
UPDATE dhcp4_shared_network SET client_classes = textToJSONList(client_classes);
6552+
65376553
ALTER TABLE dhcp4_subnet RENAME client_class TO client_classes;
65386554
ALTER TABLE dhcp4_subnet ALTER COLUMN client_classes TYPE TEXT;
65396555

6556+
UPDATE dhcp4_subnet SET client_classes = textToJSONList(client_classes);
6557+
65406558
ALTER TABLE dhcp4_pool RENAME client_class TO client_classes;
65416559
ALTER TABLE dhcp4_pool ALTER COLUMN client_classes TYPE TEXT;
65426560

6561+
UPDATE dhcp4_pool SET client_classes = textToJSONList(client_classes);
6562+
65436563
ALTER TABLE dhcp6_shared_network RENAME client_class TO client_classes;
65446564
ALTER TABLE dhcp6_shared_network ALTER COLUMN client_classes TYPE TEXT;
65456565

6566+
UPDATE dhcp6_shared_network SET client_classes = textToJSONList(client_classes);
6567+
65466568
ALTER TABLE dhcp6_subnet RENAME client_class TO client_classes;
65476569
ALTER TABLE dhcp6_subnet ALTER COLUMN client_classes TYPE TEXT;
65486570

6571+
UPDATE dhcp6_subnet SET client_classes = textToJSONList(client_classes);
6572+
65496573
ALTER TABLE dhcp6_pool RENAME client_class TO client_classes;
65506574
ALTER TABLE dhcp6_pool ALTER COLUMN client_classes TYPE TEXT;
65516575

6576+
UPDATE dhcp6_pool SET client_classes = textToJSONList(client_classes);
6577+
65526578
ALTER TABLE dhcp6_pd_pool RENAME client_class TO client_classes;
65536579
ALTER TABLE dhcp6_pd_pool ALTER COLUMN client_classes TYPE TEXT;
65546580

6581+
UPDATE dhcp6_pd_pool SET client_classes = textToJSONList(client_classes);
6582+
6583+
DROP FUNCTION IF EXISTS testToJSONList();
6584+
6585+
SELECT set_config('kea.disable_audit', 'false', false);
6586+
65556587
-- Update the schema version number.
65566588
UPDATE schema_version
65576589
SET version = '27', minor = '0';

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

+32
Original file line numberDiff line numberDiff line change
@@ -39,27 +39,59 @@ START TRANSACTION;
3939
4040
-- This line starts the schema upgrade to version 27.0.
4141
42+
SELECT set_config('kea.disable_audit', 'true', false);
43+
44+
CREATE OR REPLACE FUNCTION textToJSONList(orig TEXT)
45+
RETURNS TEXT AS \$\$
46+
DECLARE
47+
BEGIN
48+
IF orig = '' OR orig IS NULL THEN
49+
RETURN NULL;
50+
END IF;
51+
52+
RETURN CONCAT('[ "', orig, '" ]');
53+
END;
54+
\$\$ LANGUAGE plpgsql;
55+
4256
ALTER TABLE dhcp4_shared_network RENAME client_class TO client_classes;
4357
ALTER TABLE dhcp4_shared_network ALTER COLUMN client_classes TYPE TEXT;
4458
59+
UPDATE dhcp4_shared_network SET client_classes = textToJSONList(client_classes);
60+
4561
ALTER TABLE dhcp4_subnet RENAME client_class TO client_classes;
4662
ALTER TABLE dhcp4_subnet ALTER COLUMN client_classes TYPE TEXT;
4763
64+
UPDATE dhcp4_subnet SET client_classes = textToJSONList(client_classes);
65+
4866
ALTER TABLE dhcp4_pool RENAME client_class TO client_classes;
4967
ALTER TABLE dhcp4_pool ALTER COLUMN client_classes TYPE TEXT;
5068
69+
UPDATE dhcp4_pool SET client_classes = textToJSONList(client_classes);
70+
5171
ALTER TABLE dhcp6_shared_network RENAME client_class TO client_classes;
5272
ALTER TABLE dhcp6_shared_network ALTER COLUMN client_classes TYPE TEXT;
5373
74+
UPDATE dhcp6_shared_network SET client_classes = textToJSONList(client_classes);
75+
5476
ALTER TABLE dhcp6_subnet RENAME client_class TO client_classes;
5577
ALTER TABLE dhcp6_subnet ALTER COLUMN client_classes TYPE TEXT;
5678
79+
UPDATE dhcp6_subnet SET client_classes = textToJSONList(client_classes);
80+
5781
ALTER TABLE dhcp6_pool RENAME client_class TO client_classes;
5882
ALTER TABLE dhcp6_pool ALTER COLUMN client_classes TYPE TEXT;
5983
84+
UPDATE dhcp6_pool SET client_classes = textToJSONList(client_classes);
85+
6086
ALTER TABLE dhcp6_pd_pool RENAME client_class TO client_classes;
6187
ALTER TABLE dhcp6_pd_pool ALTER COLUMN client_classes TYPE TEXT;
6288
89+
UPDATE dhcp6_pd_pool SET client_classes = textToJSONList(client_classes);
90+
91+
DROP FUNCTION IF EXISTS testToJSONList();
92+
93+
SELECT set_config('kea.disable_audit', 'false', false);
94+
6395
-- Update the schema version number.
6496
UPDATE schema_version
6597
SET version = '27', minor = '0';

0 commit comments

Comments
 (0)