Skip to content

Conversation

@zstack-robot-1
Copy link
Collaborator

DBImpact

Resolves: ZSV-9938

Change-Id: I7a6d68747a637170796d757163756a6579627368

sync from gitlab !8451

DBImpact

Resolves: ZSV-9938

Change-Id: I7a6d68747a637170796d757163756a6579627368
@coderabbitai
Copy link

coderabbitai bot commented Sep 20, 2025

Walkthrough

在数据库升级脚本中,删除了与键(category: sharedblock, name: qcow2.allocation)相关的 ResourceConfigVO 配置,并将同一键的 GlobalConfigVO 值设置为 'none'。该变更将该配置项的存储与读取位置从 ResourceConfigVO 迁移到 GlobalConfigVO,不涉及表结构调整或删除语义变更。

Changes

Cohort / File(s) Change Summary
数据库升级脚本
conf/db/upgrade/V4.10.18__schema.sql
移除对应键的 ResourceConfigVO 记录;为相同键在 GlobalConfigVO 中设置值为 'none';实现配置来源从 ResourceConfigVO 向 GlobalConfigVO 的迁移。

Sequence Diagram(s)

sequenceDiagram
    autonumber
    actor Admin as 升级进程
    participant DB as 数据库
    participant App as 应用读取配置

    Admin->>DB: 执行 V4.10.18__schema.sql
    DB-->>DB: 删除 ResourceConfigVO 条目<br/>(sharedblock, qcow2.allocation)
    DB-->>DB: 在 GlobalConfigVO 设定值 'none'<br/>(sharedblock, qcow2.allocation)

    App->>DB: 读取配置(sharedblock, qcow2.allocation)
    Note over App,DB: 配置从 GlobalConfigVO 获取
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

小兔敲键轻如风,
旧枝剪去新芽生。
资源项退场不声动,
全局一语定从容。
跳跃间,配置归位——none!
耳尖一抖,发布又稳稳。 🐇✨

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed 标题与变更集直接相关且简洁,清楚指出主要修改为重置 sharedblock 下的 qcow2 allocation 配置,符合单句且可被同事快速理解的要求。
Description Check ✅ Passed PR 描述虽然简短但与变更直接相关(提及 DB 影响、关联工单和 Change-Id,并注明从 GitLab 同步),因此满足宽松的通过条件。
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch sync/tao.gan/4.10.28-ZSV-9938

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
conf/db/upgrade/V4.10.18__schema.sql (2)

15-16: 时间戳列建议补充默认值,提升可用性与一致性

lastOpDate/createDate 未设置默认值,插入时容易得到 NULL。多数表约定这两列默认 CURRENT_TIMESTAMP(且 lastOpDate 同步更新)。作为新建表,可直接设置,减少应用侧赋值负担。

-    `lastOpDate` timestamp ON UPDATE CURRENT_TIMESTAMP,
-    `createDate` timestamp,
+    `lastOpDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    `createDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

请确认与项目内同类表的约定一致后再调整。


19-19: 字符集建议升级为 utf8mb4

当前为 DEFAULT CHARSET=utf8(3 字节),可能影响 4 字节字符(emoji、部分罕用字)。如项目全局已迁移,建议使用 utf8mb4 与一致的 collation。

-) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4ada92d and eeeb118.

📒 Files selected for processing (1)
  • conf/db/upgrade/V4.10.18__schema.sql (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.sql

⚙️ CodeRabbit configuration file

**/*.sql: Review the SQL code, make sure has no errors and confirm that:

  • Upgrading scene has been carefully handled
  • Do not use DEFAULT 0000-00-00 00:00:00 , use DEFAULT CURRENT_TIMESTAMP instead
  • When NOT NULL exists, must use stored procedure or other functions to process historical data, this is very very important

Files:

  • conf/db/upgrade/V4.10.18__schema.sql

) 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants