Skip to content

Commit f407dc7

Browse files
author
SadiJr
committed
Merge branch 'fix-backup-detail' into '4.20.0.0-scclouds'
Correção na tabela `backup_details` Closes #3257 See merge request scclouds/scclouds!1356
2 parents dfec362 + 8549cac commit f407dc7

2 files changed

Lines changed: 85 additions & 1 deletion

File tree

engine/schema/src/main/java/org/apache/cloudstack/backup/BackupDetailVO.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public class BackupDetailVO implements ResourceDetail {
4040
@Column(name = "name")
4141
private String name;
4242

43-
@Column(name = "value")
43+
@Column(name = "value", length = 65536)
4444
private String value;
4545

4646
@Column(name = "display")

engine/schema/src/main/resources/META-INF/db/schema-42007to42008.sql

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,87 @@
1616
-- under the License.
1717

1818
-- Schema upgrade from 4.20.0.7 to 4.20.0.8
19+
20+
-- Fix backup details
21+
22+
ALTER TABLE backup_details MODIFY value TEXT NOT NULL;
23+
24+
DELETE FROM `cloud`.`backup_details`
25+
WHERE `name`='nics'
26+
AND NOT JSON_VALID(`value`)
27+
AND `backup_id` IN (
28+
SELECT b.id
29+
FROM `cloud`.`backups` b JOIN `cloud`.`vm_instance` vm ON b.vm_id = vm.id
30+
WHERE vm.removed IS NOT NULL);
31+
32+
DROP PROCEDURE IF EXISTS NormalizeNicDetails;
33+
CREATE PROCEDURE NormalizeNicDetails()
34+
BEGIN
35+
DECLARE nics_json JSON;
36+
DECLARE nic_json JSON;
37+
FOR vm IN (
38+
SELECT DISTINCT vm_id
39+
FROM `cloud`.`backups` b
40+
JOIN `cloud`.`backup_details` bd ON b.id = bd.`backup_id`
41+
WHERE bd.`name` = 'nics'
42+
AND NOT JSON_VALID(bd.`value`)
43+
AND b.`removed` IS NULL
44+
) DO
45+
SET nics_json = JSON_ARRAY();
46+
FOR nic IN (
47+
SELECT net.`uuid` AS network_uuid, n.`ip4_address`, n.`ip6_address`, n.`mac_address`
48+
FROM `cloud`.`nics` n JOIN `cloud`.`networks` net ON n.network_id = net.id
49+
WHERE n.instance_id = vm.vm_id AND n.removed IS NULL
50+
) DO
51+
SET nic_json = JSON_OBJECT();
52+
IF nic.network_uuid IS NOT NULL THEN
53+
SET nic_json = JSON_MERGE(nic_json, JSON_OBJECT('networkid', nic.network_uuid));
54+
END IF;
55+
IF nic.ip4_address IS NOT NULL THEN
56+
SET nic_json = JSON_MERGE(nic_json, JSON_OBJECT('ipaddress', nic.ip4_address));
57+
END IF;
58+
IF nic.ip6_address IS NOT NULL THEN
59+
SET nic_json = JSON_MERGE(nic_json, JSON_OBJECT('ip6address', nic.ip6_address));
60+
END IF;
61+
IF nic.mac_address IS NOT NULL THEN
62+
SET nic_json = JSON_MERGE(nic_json, JSON_OBJECT('macaddress', nic.mac_address));
63+
END IF;
64+
SET nics_json = JSON_ARRAY_APPEND(nics_json, '$', nic_json);
65+
END FOR;
66+
UPDATE `cloud`.`backup_details`
67+
SET `value` = REPLACE(REPLACE(REPLACE(nics_json,'\\',''), '"{', '{'), '}"', '}')
68+
WHERE name = 'nics' AND `backup_id` IN (SELECT id FROM `cloud`.`backups` bs WHERE bs.vm_id = vm.vm_id);
69+
END FOR;
70+
END;
71+
CALL NormalizeNicDetails();
72+
DROP NormalizeNicDetails();
73+
74+
DROP PROCEDURE IF EXISTS NormalizeVmSettings;
75+
CREATE PROCEDURE NormalizeVmSettings ()
76+
BEGIN
77+
DECLARE settings JSON;
78+
FOR vm IN (
79+
SELECT DISTINCT `vm_id`
80+
FROM `cloud`.`backups` b JOIN `cloud`.`backup_details` bd ON b.`id` = bd.`backup_id`
81+
WHERE bd.`name` ='vmsettings'
82+
AND NOT JSON_VALID(bd.`value`)
83+
) DO
84+
SET settings = JSON_OBJECT();
85+
FOR detail IN (
86+
SELECT `name`, `value`
87+
FROM `user_vm_details` uvd
88+
WHERE uvd.`vm_id` = vm.`vm_id`
89+
) DO
90+
SET settings = JSON_MERGE(settings, JSON_OBJECT(detail.name, detail.value));
91+
END FOR;
92+
UPDATE `cloud`.`backup_details`
93+
SET `value`=settings
94+
WHERE `name` = "vmsettings"
95+
AND `backup_id` IN (
96+
SELECT `id`
97+
FROM `cloud`.`backups` bs
98+
WHERE bs.vm_id = vm.vm_id);
99+
END FOR;
100+
END;
101+
CALL NormalizeVmSettings();
102+
DROP NormalizeVmSettings();

0 commit comments

Comments
 (0)