Skip to content
Closed
Show file tree
Hide file tree
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
19 changes: 19 additions & 0 deletions conf/db/upgrade/V5.4.7.1__schema.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
CREATE TABLE IF NOT EXISTS `zstack`.`VpcRouterDnsRecordVO` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`uuid` VARCHAR(32) NOT NULL,
`vpcRouterUuid` VARCHAR(32) DEFAULT NULL,
`vpcHaGroupUuid` VARCHAR(32) DEFAULT NULL,
`type` VARCHAR(16) NOT NULL DEFAULT 'A',
`domain` VARCHAR(255) NOT NULL,
`ip` VARCHAR(255) NOT NULL,
`createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
`lastOpDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
Comment on lines +9 to +10
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

时间戳字段必须使用正确的默认值

这两个时间戳字段使用了 DEFAULT '0000-00-00 00:00:00',这违反了编码规范。根据项目历史经验,在 MySQL 5.7 环境中(explicit_defaults_for_timestamp=OFF),当表中已有一个带 ON UPDATE CURRENT_TIMESTAMP 的 TIMESTAMP 列(如 lastOpDate)时,第二个 TIMESTAMP 列(如 createDate)不能使用 DEFAULT CURRENT_TIMESTAMP,否则会触发 MySQL Error 1293。

应使用哨兵默认值 '2000-01-01 00:00:00' 代替 '0000-00-00 00:00:00',Java 层的 PrePersist 回调会在插入新记录时设置真实的创建时间戳。

🔧 建议的修复方案
-    `createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
-    `lastOpDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
+    `createDate` TIMESTAMP NOT NULL DEFAULT '2000-01-01 00:00:00',
+    `lastOpDate` TIMESTAMP NOT NULL DEFAULT '2000-01-01 00:00:00' ON UPDATE CURRENT_TIMESTAMP,

Based on learnings: In ZStack MySQL upgrade scripts under conf/db/upgrade/*.sql, if a table already contains a TIMESTAMP column defined with ON UPDATE CURRENT_TIMESTAMP (e.g., lastOpDate), then any second TIMESTAMP column (e.g., createDate) must NOT use DEFAULT CURRENT_TIMESTAMP. This repository's CI/validated environment uses MySQL 5.7 with explicit_defaults_for_timestamp=OFF, which can trigger MySQL Error 1293 (only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT/ON UPDATE). Use a non-CURRENT_TIMESTAMP sentinel default such as '2000-01-01 00:00:00' (and typically keep it NOT NULL), and rely on ModelServiceRefVO.PrePersist in Java to set the real creation timestamp for new JPA-managed rows.

📝 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
`createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
`lastOpDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
`createDate` TIMESTAMP NOT NULL DEFAULT '2000-01-01 00:00:00',
`lastOpDate` TIMESTAMP NOT NULL DEFAULT '2000-01-01 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@conf/db/upgrade/V5.4.7.1__schema.sql` around lines 9 - 10, 将两个 TIMESTAMP
字段的非法默认值替换为项目哨兵值:把 createDate 和 lastOpDate 当前的 DEFAULT '0000-00-00 00:00:00' 改为
DEFAULT '2000-01-01 00:00:00'(保持 NOT NULL),并保留 lastOpDate 的 ON UPDATE
CURRENT_TIMESTAMP;不要将 createDate 设为 DEFAULT CURRENT_TIMESTAMP,以避免在存在 ON UPDATE
CURRENT_TIMESTAMP 的列时触发 MySQL Error 1293,真实创建时间由 ModelServiceRefVO.PrePersist 在
Java 层填充。

PRIMARY KEY (`id`),
UNIQUE KEY `ukVpcRouterDnsRecordVOuuid` (`uuid`),
INDEX `idxVpcRouterDnsRecordVOvpcRouterUuid` (`vpcRouterUuid`),
INDEX `idxVpcRouterDnsRecordVOvpcHaGroupUuid` (`vpcHaGroupUuid`),
INDEX `idxVpcRouterDnsRecordVOtype` (`type`),
INDEX `idxVpcRouterDnsRecordVOdomain` (`domain`),
CONSTRAINT `fkVpcRouterDnsRecordVOVpcRouterVmVO` FOREIGN KEY (`vpcRouterUuid`) REFERENCES `zstack`.`VpcRouterVmVO` (`uuid`) ON DELETE CASCADE,
CONSTRAINT `fkVpcRouterDnsRecordVOVpcHaGroupVO` FOREIGN KEY (`vpcHaGroupUuid`) REFERENCES `zstack`.`VpcHaGroupVO` (`uuid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
19 changes: 0 additions & 19 deletions conf/db/upgrade/V5.4.7__schema.sql
Original file line number Diff line number Diff line change
@@ -1,19 +0,0 @@
CREATE TABLE IF NOT EXISTS `zstack`.`VpcRouterDnsRecordVO` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`uuid` VARCHAR(32) NOT NULL,
`vpcRouterUuid` VARCHAR(32) DEFAULT NULL,
`vpcHaGroupUuid` VARCHAR(32) DEFAULT NULL,
`type` VARCHAR(16) NOT NULL DEFAULT 'A',
`domain` VARCHAR(255) NOT NULL,
`ip` VARCHAR(255) NOT NULL,
`createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
`lastOpDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `ukVpcRouterDnsRecordVOuuid` (`uuid`),
INDEX `idxVpcRouterDnsRecordVOvpcRouterUuid` (`vpcRouterUuid`),
INDEX `idxVpcRouterDnsRecordVOvpcHaGroupUuid` (`vpcHaGroupUuid`),
INDEX `idxVpcRouterDnsRecordVOtype` (`type`),
INDEX `idxVpcRouterDnsRecordVOdomain` (`domain`),
CONSTRAINT `fkVpcRouterDnsRecordVOVpcRouterVmVO` FOREIGN KEY (`vpcRouterUuid`) REFERENCES `zstack`.`VpcRouterVmVO` (`uuid`) ON DELETE CASCADE,
CONSTRAINT `fkVpcRouterDnsRecordVOVpcHaGroupVO` FOREIGN KEY (`vpcHaGroupUuid`) REFERENCES `zstack`.`VpcHaGroupVO` (`uuid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;