-
Notifications
You must be signed in to change notification settings - Fork 0
<fix>[conf]: reset sharedblock qcow2 allocation #2663
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: zsv_4.10.18
Are you sure you want to change the base?
Conversation
DBImpact Resolves: ZSV-9938 Change-Id: I7a6d68747a637170796d757163756a6579627368
Walkthrough在数据库升级脚本中,删除了与键(category: sharedblock, name: qcow2.allocation)相关的 ResourceConfigVO 配置,并将同一键的 GlobalConfigVO 值设置为 'none'。该变更将该配置项的存储与读取位置从 ResourceConfigVO 迁移到 GlobalConfigVO,不涉及表结构调整或删除语义变更。 Changes
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 获取
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches🧪 Generate unit tests
Comment |
There was a problem hiding this 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
📒 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, useDEFAULT CURRENT_TIMESTAMPinstead- When
NOT NULLexists, must usestored procedureor 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'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
❓ 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.
| 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.
DBImpact
Resolves: ZSV-9938
Change-Id: I7a6d68747a637170796d757163756a6579627368
sync from gitlab !8451