Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions conf/db/upgrade/V4.10.18__schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,4 @@ CREATE TABLE IF NOT EXISTS `zstack`.`VmCustomSpecificationVO` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DELETE FROM `zstack`.`ResourceConfigVO` WHERE category='sharedblock' AND name='qcow2.allocation' AND value='metadata';
UPDATE `zstack`.`GlobalConfigVO` SET value='none' WHERE category='sharedblock' AND name='qcow2.allocation';
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

❓ Verification inconclusive

避免覆盖用户已有配置,并确保键存在(条件更新 + 插入若不存在)

当前对 GlobalConfigVO 的无条件 UPDATE 会把已存在且非“metadata”的用户/站点定制值也改成 none。升级脚本应尽量“最小改动”,仅在原值为 NULL/空串/metadata 或该键不存在时设置为 none,并保证该键缺失时可以插入。

建议将本行替换为“条件更新 + 插入若不存在”的安全写法(幂等):

-UPDATE `zstack`.`GlobalConfigVO` SET value='none' WHERE category='sharedblock' AND name='qcow2.allocation';
+-- 仅在值为 NULL/空串/metadata 时更新,避免覆盖用户自定义
+UPDATE `zstack`.`GlobalConfigVO`
+SET value='none'
+WHERE category='sharedblock' AND name='qcow2.allocation'
+  AND (value IS NULL OR value='' OR value='metadata');
+
+-- 若配置不存在则插入
+INSERT INTO `zstack`.`GlobalConfigVO` (`category`,`name`,`value`)
+SELECT 'sharedblock','qcow2.allocation','none'
+WHERE NOT EXISTS (
+  SELECT 1 FROM `zstack`.`GlobalConfigVO`
+  WHERE category='sharedblock' AND name='qcow2.allocation'
+);

可选:为避免半完成状态,考虑把第21行的 DELETE 与上述两条语句包在一个事务中执行(START TRANSACTION ... COMMIT)。


将 GlobalConfigVO 更新改为条件更新 + 插入以避免覆盖用户自定义配置并保证幂等

-UPDATE `zstack`.`GlobalConfigVO` SET value='none' WHERE category='sharedblock' AND name='qcow2.allocation';
+-- 仅当 value 为 NULL/空串/metadata 时更新,避免覆盖已有配置
+UPDATE `zstack`.`GlobalConfigVO`
+SET value='none'
+WHERE category='sharedblock' AND name='qcow2.allocation'
+  AND (value IS NULL OR value='' OR value='metadata');
+
+-- 若配置不存在则插入
+INSERT INTO `zstack`.`GlobalConfigVO` (`category`,`name`,`value`)
+SELECT 'sharedblock','qcow2.allocation','none'
+WHERE NOT EXISTS (
+  SELECT 1 FROM `zstack`.`GlobalConfigVO`
+  WHERE category='sharedblock' AND name='qcow2.allocation'
+);

可选:将 DELETE、UPDATE、INSERT 包裹在事务中(START TRANSACTION … COMMIT)以防半完成状态。

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
UPDATE `zstack`.`GlobalConfigVO` SET value='none' WHERE category='sharedblock' AND name='qcow2.allocation';
-- 仅当 value 为 NULL/空串/metadata 时更新,避免覆盖已有配置
UPDATE `zstack`.`GlobalConfigVO`
SET value='none'
WHERE category='sharedblock' AND name='qcow2.allocation'
AND (value IS NULL OR value='' OR value='metadata');
-- 若配置不存在则插入
INSERT INTO `zstack`.`GlobalConfigVO` (`category`,`name`,`value`)
SELECT 'sharedblock','qcow2.allocation','none'
WHERE NOT EXISTS (
SELECT 1 FROM `zstack`.`GlobalConfigVO`
WHERE category='sharedblock' AND name='qcow2.allocation'
);
🤖 Prompt for AI Agents
In conf/db/upgrade/V4.10.18__schema.sql around line 22, the current statement
blindly updates GlobalConfigVO which can overwrite user-customized values and is
not idempotent; change it to perform a conditional update only when the row
exists and matches expected precondition and otherwise insert the row if missing
(e.g. check existence by category+name and then UPDATE only when appropriate, or
use INSERT ... ON DUPLICATE KEY UPDATE with a guard that preserves non-default
values), and optionally wrap the DELETE/UPDATE/INSERT sequence in a START
TRANSACTION ... COMMIT block to ensure atomicity and avoid partially applied
upgrades.