Skip to content
Open
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
122 changes: 122 additions & 0 deletions conf/db/upgrade/V5.5.12__schema.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
-- ZSTAC-75319: Add normalizedModelName column for GPU spec dedup
CALL ADD_COLUMN('GpuDeviceSpecVO', 'normalizedModelName', 'VARCHAR(255)', 1, NULL);
CALL CREATE_INDEX('GpuDeviceSpecVO', 'idx_gpu_spec_normalized_model', 'normalizedModelName');

-- Add totalScore and endTime columns to ModelEvaluationTaskVO for ZQL sorting support
-- Previously these values were only stored inside the opaque JSON TEXT field,
-- making them invisible to ZQL ORDER BY queries.
CALL ADD_COLUMN('ModelEvaluationTaskVO', 'totalScore', 'DOUBLE', 1, NULL);
CALL ADD_COLUMN('ModelEvaluationTaskVO', 'endTime', 'DATETIME', 1, NULL);

-- Add indexes to support efficient sorting
CALL CREATE_INDEX('ModelEvaluationTaskVO', 'idx_ModelEvaluationTaskVO_totalScore', 'totalScore');
CALL CREATE_INDEX('ModelEvaluationTaskVO', 'idx_ModelEvaluationTaskVO_endTime', 'endTime');

-- Backfill totalScore from opaque JSON for existing completed tasks
-- Uses Json_getKeyValue defined in beforeMigrate.sql for MySQL 5.5+ compatibility
UPDATE `zstack`.`ModelEvaluationTaskVO`
SET `totalScore` = CAST(Json_getKeyValue(`opaque`, 'total_score') AS DECIMAL(20,6))
WHERE `opaque` IS NOT NULL
AND `totalScore` IS NULL
AND Json_getKeyValue(`opaque`, 'total_score') IS NOT NULL;

-- Backfill endTime from opaque JSON for existing completed/failed tasks
-- end_time format from Python agent: "MMM dd, yyyy hh:mm:ss a" (e.g. "Jan 01, 2025 10:30:00 AM")
UPDATE `zstack`.`ModelEvaluationTaskVO`
SET `endTime` = STR_TO_DATE(
Json_getKeyValue(`opaque`, 'end_time'),
'%b %d, %Y %h:%i:%s %p'
)
WHERE `opaque` IS NOT NULL
AND `endTime` IS NULL
AND Json_getKeyValue(`opaque`, 'end_time') IS NOT NULL
AND Json_getKeyValue(`opaque`, 'end_time') != '';

-- dGPU (TensorFusion) support tables

CREATE TABLE IF NOT EXISTS `zstack`.`DGpuProfileVO` (
`uuid` VARCHAR(32) NOT NULL,
`gpuSpecUuid` VARCHAR(32) NOT NULL,
`memorySize` BIGINT UNSIGNED NOT NULL,
`shmemSize` BIGINT UNSIGNED NOT NULL DEFAULT 268435456,
`createDate` TIMESTAMP NOT NULL,
`lastOpDate` TIMESTAMP NOT NULL,
PRIMARY KEY (`uuid`),
UNIQUE KEY `uk_dgpu_profile` (`gpuSpecUuid`, `memorySize`),
CONSTRAINT `fk_dgpu_profile_spec`
FOREIGN KEY (`gpuSpecUuid`) REFERENCES `zstack`.`GpuDeviceSpecVO`(`uuid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `zstack`.`DGpuDeviceVO` (
`uuid` VARCHAR(32) NOT NULL,
`name` VARCHAR(255) NOT NULL,
`parentGpuUuid` VARCHAR(32) NOT NULL,
`gpuSpecUuid` VARCHAR(32) NOT NULL,
`hostUuid` VARCHAR(32) NOT NULL,
`vmInstanceUuid` VARCHAR(32) DEFAULT NULL,
`allocatedMemory` BIGINT UNSIGNED NOT NULL,
`shmemSize` BIGINT UNSIGNED NOT NULL DEFAULT 268435456,
`smPercentLimit` INT NOT NULL DEFAULT 0,
`protocol` VARCHAR(16) NOT NULL DEFAULT 'shmem',
`status` VARCHAR(32) NOT NULL,
`vendorId` VARCHAR(64) DEFAULT NULL,
`vendor` VARCHAR(255) DEFAULT NULL,
`createDate` TIMESTAMP NOT NULL,
`lastOpDate` TIMESTAMP NOT NULL,
PRIMARY KEY (`uuid`),
INDEX `idx_dgpu_device_parent` (`parentGpuUuid`),
INDEX `idx_dgpu_device_spec` (`gpuSpecUuid`),
INDEX `idx_dgpu_device_host` (`hostUuid`),
INDEX `idx_dgpu_device_vm` (`vmInstanceUuid`),
CONSTRAINT `fk_dgpu_device_parent`
FOREIGN KEY (`parentGpuUuid`) REFERENCES `zstack`.`PciDeviceVO`(`uuid`) ON DELETE CASCADE,
CONSTRAINT `fk_dgpu_device_spec`
FOREIGN KEY (`gpuSpecUuid`) REFERENCES `zstack`.`GpuDeviceSpecVO`(`uuid`) ON DELETE RESTRICT,
CONSTRAINT `fk_dgpu_device_host`
FOREIGN KEY (`hostUuid`) REFERENCES `zstack`.`HostEO`(`uuid`) ON DELETE CASCADE,
CONSTRAINT `fk_dgpu_device_vm`
FOREIGN KEY (`vmInstanceUuid`) REFERENCES `zstack`.`VmInstanceEO`(`uuid`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `zstack`.`VmInstanceDGpuStrategyVO` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`vmInstanceUuid` VARCHAR(32) NOT NULL,
`gpuSpecUuid` VARCHAR(32) NOT NULL,
`memorySize` BIGINT UNSIGNED NOT NULL,
`shmemSize` BIGINT UNSIGNED NOT NULL DEFAULT 268435456,
`gpuDeviceUuid` VARCHAR(32) DEFAULT NULL,
`chooser` VARCHAR(16) NOT NULL,
`autoDetachOnStop` TINYINT(1) NOT NULL DEFAULT 1,
`createDate` TIMESTAMP NOT NULL,
`lastOpDate` TIMESTAMP NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_vm_dgpu_strategy` (`vmInstanceUuid`),
INDEX `idx_vm_dgpu_strategy_spec` (`gpuSpecUuid`),
CONSTRAINT `fk_vm_dgpu_strategy_vm`
FOREIGN KEY (`vmInstanceUuid`) REFERENCES `zstack`.`VmInstanceEO`(`uuid`) ON DELETE CASCADE,
CONSTRAINT `fk_vm_dgpu_strategy_spec`
FOREIGN KEY (`gpuSpecUuid`) REFERENCES `zstack`.`GpuDeviceSpecVO`(`uuid`) ON DELETE CASCADE,
CONSTRAINT `fk_vm_dgpu_strategy_device`
FOREIGN KEY (`gpuDeviceUuid`) REFERENCES `zstack`.`PciDeviceVO`(`uuid`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ZSTAC-83157: VM model mount feature
CREATE TABLE IF NOT EXISTS `zstack`.`VmModelMountVO` (
`uuid` VARCHAR(32) NOT NULL,
`vmInstanceUuid` VARCHAR(32) NOT NULL,
`modelUuid` VARCHAR(32) NOT NULL,
`modelName` VARCHAR(256) DEFAULT NULL,
`mountPath` VARCHAR(512) NOT NULL,
`sourcePath` VARCHAR(1024) NOT NULL,
`status` VARCHAR(32) NOT NULL,
`hostUuid` VARCHAR(32) DEFAULT NULL,
`accountUuid` VARCHAR(32) DEFAULT NULL,
`createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
`lastOpDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`uuid`),
UNIQUE KEY `uk_vm_mountpath` (`vmInstanceUuid`, `mountPath`(255)),
CONSTRAINT `fk_vm_model_mount_vm`
FOREIGN KEY (`vmInstanceUuid`) REFERENCES `zstack`.`VmInstanceEO`(`uuid`) ON DELETE CASCADE,
CONSTRAINT `fk_vm_model_mount_model`
FOREIGN KEY (`modelUuid`) REFERENCES `zstack`.`ModelVO`(`uuid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
21 changes: 21 additions & 0 deletions conf/db/upgrade/V5.5.16__schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -344,3 +344,24 @@ CREATE TABLE IF NOT EXISTS `zstack`.`VmInstanceDGpuStrategyVO` (
FOREIGN KEY (`gpuDeviceUuid`) REFERENCES `zstack`.`PciDeviceVO`(`uuid`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ZSTAC-83157: VM model mount feature
CREATE TABLE IF NOT EXISTS `zstack`.`VmModelMountVO` (
`uuid` VARCHAR(32) NOT NULL,
`vmInstanceUuid` VARCHAR(32) NOT NULL,
`modelUuid` VARCHAR(32) NOT NULL,
`modelName` VARCHAR(256) DEFAULT NULL,
`mountPath` VARCHAR(512) NOT NULL,
`sourcePath` VARCHAR(1024) NOT NULL,
`status` VARCHAR(32) NOT NULL,
`hostUuid` VARCHAR(32) DEFAULT NULL,
`accountUuid` VARCHAR(32) DEFAULT NULL,
`createDate` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
`lastOpDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`uuid`),
UNIQUE KEY `uk_vm_mountpath` (`vmInstanceUuid`, `mountPath`(255)),
CONSTRAINT `fk_vm_model_mount_vm`
FOREIGN KEY (`vmInstanceUuid`) REFERENCES `zstack`.`VmInstanceEO`(`uuid`) ON DELETE CASCADE,
CONSTRAINT `fk_vm_model_mount_model`
FOREIGN KEY (`modelUuid`) REFERENCES `zstack`.`ModelVO`(`uuid`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Comment on lines +347 to +366
Copy link
Copy Markdown

@coderabbitai coderabbitai bot Apr 15, 2026

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# 只读核验:检查两个升级脚本里 VmModelMountVO 的约束是否一致
rg -n "VmModelMountVO|uk_vm_mountpath|uk_vm_model" conf/db/upgrade/V5.5.12__schema.sql conf/db/upgrade/V5.5.16__schema.sql

Repository: MatheMatrix/zstack

Length of output: 575


🏁 Script executed:

#!/bin/bash
# 查看 V5.5.12 到 V5.5.16 之间的所有升级脚本,检查是否有 DROP/ALTER 语句处理 uk_vm_model
fd -e sql "V5\.5\.(1[2-5]|16)__schema\.sql" conf/db/upgrade/ | sort
echo "---"
# 搜索所有涉及 uk_vm_model 的操作
rg -n "uk_vm_model|DROP.*CONSTRAINT|ALTER TABLE.*VmModelMountVO" conf/db/upgrade/ | grep -E "V5\.5\.(1[2-6])"

Repository: MatheMatrix/zstack

Length of output: 239


🏁 Script executed:

#!/bin/bash
# 查看 V5.5.12 中 VmModelMountVO 的完整定义
echo "=== V5.5.12__schema.sql (lines 104-120) ==="
sed -n '104,120p' conf/db/upgrade/V5.5.12__schema.sql
echo ""
echo "=== V5.5.16__schema.sql (lines 348-366) ==="
sed -n '348,366p' conf/db/upgrade/V5.5.16__schema.sql

Repository: MatheMatrix/zstack

Length of output: 2167


统一 VmModelMountVO 的唯一约束,避免升级路径行为漂移。

V5.5.12 中该表定义包含 uk_vm_model (vmInstanceUuid, modelUuid)(第 118 行),但在 V5.5.16 中缺失。由于中间没有迁移脚本处理此变化,这会导致不同安装/升级路径产生不同的约束:

  • 从 V5.5.12 升级的系统保留 uk_vm_model
  • 新安装 V5.5.16 的系统缺少 uk_vm_model

若无意移除,请在此处补回 uk_vm_model;若有意移除,需要在 V5.5.13~V5.5.15 中补充显式 DROP 语句处理既有环境。

同时,createDate 字段的时间戳默认值应从 DEFAULT '0000-00-00 00:00:00' 改为 DEFAULT CURRENT_TIMESTAMP,以符合项目编码规范。

建议修复(若保留唯一性)
     PRIMARY KEY (`uuid`),
     UNIQUE KEY `uk_vm_mountpath` (`vmInstanceUuid`, `mountPath`(255)),
+    UNIQUE KEY `uk_vm_model` (`vmInstanceUuid`, `modelUuid`),
     CONSTRAINT `fk_vm_model_mount_vm`
-    `createDate`      TIMESTAMP     NOT NULL DEFAULT '0000-00-00 00:00:00',
+    `createDate`      TIMESTAMP     NOT NULL DEFAULT CURRENT_TIMESTAMP,
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@conf/db/upgrade/V5.5.16__schema.sql` around lines 347 - 366, The
VmModelMountVO table is missing the historical UNIQUE constraint uk_vm_model
(vmInstanceUuid, modelUuid) and its createDate TIMESTAMP uses DEFAULT
'0000-00-00 00:00:00'; restore the uk_vm_model unique key and change createDate
to DEFAULT CURRENT_TIMESTAMP to ensure consistent schema across
installs/upgrades: update the CREATE TABLE for VmModelMountVO to include UNIQUE
KEY `uk_vm_model` (`vmInstanceUuid`, `modelUuid`) and replace `createDate
TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'` with `createDate TIMESTAMP NOT
NULL DEFAULT CURRENT_TIMESTAMP`; if the removal was intentional instead, add
explicit ALTER TABLE ... DROP KEY `uk_vm_model` in the intermediate upgrade
scripts rather than leaving behavior divergent.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Comment from zhong.xian:

已经没有5.5.12版本,所以不存在这个问题

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@zstack-robot-2,感谢 zhong.xian 的说明,了解到 V5.5.12 已不存在,因此 uk_vm_model 约束漂移的问题不适用,我收回该部分建议。

不过,createDate 字段使用 DEFAULT '0000-00-00 00:00:00' 的问题仍然独立存在,违反了项目 SQL 编码规范(Do not use DEFAULT 0000-00-00 00:00:00, use DEFAULT CURRENT_TIMESTAMP instead),请修正:

-    `createDate`      TIMESTAMP     NOT NULL DEFAULT '0000-00-00 00:00:00',
+    `createDate`      TIMESTAMP     NOT NULL DEFAULT CURRENT_TIMESTAMP,

✏️ Learnings added
Learnt from: zstack-robot-2
Repo: MatheMatrix/zstack PR: 3758
File: conf/db/upgrade/V5.5.16__schema.sql:347-366
Timestamp: 2026-04-15T05:55:58.590Z
Learning: In the ZStack project, the upgrade script V5.5.12__schema.sql has been removed and is no longer a valid upgrade path. Schema divergence concerns between V5.5.12 and later versions (e.g., V5.5.16) do not apply.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


🧠 Learnings used
Learnt from: zstack-robot-1
Repo: MatheMatrix/zstack PR: 0
File: :0-0
Timestamp: 2025-08-03T04:10:21.683Z
Learning: ZStack 数据库升级脚本 V4.10.16__schema.sql 中的 UPGRADE_VM_METADATA_TABLES_DIRECT 存储过程使用直接 RENAME TABLE 操作,不具备幂等性。需要通过 information_schema 检查表和约束的存在性来确保脚本可以安全重复执行。

Learnt from: zstack-robot-1
Repo: MatheMatrix/zstack PR: 3307
File: conf/db/zsv/V5.0.0__schema.sql:38-76
Timestamp: 2026-02-10T08:53:52.891Z
Learning: 在 ZStack 项目中,对于 joined-table inheritance 模式(如 KVMHostVO→HostEO, ApplianceVmVO→VmInstanceEO),子表的 uuid 字段不添加到父表的外键约束。ZStack 依赖 Hibernate/JPA 在应用层管理继承关系和级联操作,外键约束仅在数据库层直接删除时才有效,因此不使用。

Learnt from: zstack-robot-2
Repo: MatheMatrix/zstack PR: 3416
File: conf/db/upgrade/V5.5.12__schema.sql:24-35
Timestamp: 2026-03-05T02:13:23.339Z
Learning: In ZStack, the database schema name is fixed as 'zstack'. For SQL upgrade scripts under conf/db/upgrade, continue using TABLE_SCHEMA = 'zstack' and reference tables as zstack.`UsedIpVO` (i.e., qualify with the schema). Do not replace with DATABASE() or remove the schema qualifier for portability. This pattern can be assumed across upgrade scripts in this directory.

Learnt from: ZStack-Robot
Repo: MatheMatrix/zstack PR: 3737
File: compute/src/main/java/org/zstack/compute/vm/devices/VmHostFileCascadeExtension.java:77-113
Timestamp: 2026-04-14T05:45:06.368Z
Learning: In ZStack's VmHostFileCascadeExtension (compute/src/main/java/org/zstack/compute/vm/devices/VmHostFileCascadeExtension.java), deleting ALL VmHostFileVO records for a VM during cascade deletion is correct behavior. VmHostFileVO.vmInstanceUuid has an ON DELETE CASCADE foreign key to VmInstanceEO, so VmHostFileVO records cannot exist independently of the VM's EO record. The 90-day "latest file" retention policy in VmHostFileTracker applies only while VmInstanceEO is in the soft-deleted state — there is no way to preserve a VmHostFileVO record beyond the VM's EO lifecycle. Suggesting to skip the latest record in the cascade extension is incorrect.

Learnt from: ZStack-Robot
Repo: MatheMatrix/zstack PR: 2293
File: conf/db/upgrade/V4.10.16__schema.sql:69-82
Timestamp: 2025-08-03T03:42:34.349Z
Learning: 在 ZStack 项目中进行数据库 DDL 升级时,由于 MySQL/MariaDB 中的 RENAME TABLE、ALTER TABLE 等 DDL 语句会隐式 COMMIT,因此应使用临时表 + 数据复制的方式来确保升级可逆,而不是依赖事务的 ROLLBACK 机制。

Learnt from: MatheMatrix
Repo: MatheMatrix/zstack PR: 2311
File: plugin/sdnController/src/main/java/org/zstack/sdnController/hardwareVxlan/KVMRealizeHardwareVxlanNetworkBackend.java:52-53
Timestamp: 2025-07-22T02:30:46.123Z
Learning: In ZStack, backend realization code (such as KVMRealizeHardwareVxlanNetworkBackend) can safely assume the existence of the VO for the resource being operated on (e.g., HardwareL2VxlanNetworkVO for a given L2NetworkInventory), due to system lifecycle management and strong foreign key constraints in the database schema. Explicit null checks after findByUuid are not required in these contexts.

Learnt from: zstack-robot-1
Repo: MatheMatrix/zstack PR: 0
File: :0-0
Timestamp: 2025-08-03T04:10:21.683Z
Learning: 在 ZStack 数据库升级脚本中,直接使用 RENAME TABLE 不能保证幂等性。应该通过 information_schema.tables 检查表的存在性,只在源表存在且目标表不存在时才执行重命名操作,以确保升级脚本可以安全地重复执行。

Learnt from: MatheMatrix
Repo: MatheMatrix/zstack PR: 3443
File: header/src/main/java/org/zstack/header/core/external/service/ExternalServiceConfigurationVO.java:21-24
Timestamp: 2026-03-10T04:26:24.367Z
Learning: In the ZStack project, JPA entity fields (e.g., `configuration` and `description` in `ExternalServiceConfigurationVO`) do not need explicit `Column(columnDefinition = ...)` or `Column(length = ...)` annotations to match the SQL migration scripts. The project relies on SQL migration scripts as the authoritative schema source rather than Hibernate DDL generation, so schema alignment via annotation attributes is unnecessary.

Learnt from: ZStack-Robot
Repo: MatheMatrix/zstack PR: 3716
File: header/src/main/java/org/zstack/header/keyprovider/EncryptedResourceKeyManager.java:32-35
Timestamp: 2026-04-12T05:42:20.685Z
Learning: In ZStack's KvmTpmExtensions.preReleaseVmResource (plugin/kvm/src/main/java/org/zstack/kvm/tpm/KvmTpmExtensions.java), as of PR `#3716`, the `ResourceKeyResult.refExistedBeforeCreate` field has been removed from `EncryptedResourceKeyManager.ResourceKeyResult`. Rollback behavior is now determined solely by `ResourceKeyResult.isCreatedNewKey()`: when true, the implementation deletes the materialized key-tool secret and removes the `EncryptedResourceKeyRef` row; when false, rollback is a no-op. The previously hardcoded `result.setRefExistedBeforeCreate(true)` in `preReleaseVmResource` has also been removed as part of this redesign.

Learnt from: zstack-robot-1
Repo: MatheMatrix/zstack PR: 2360
File: network/src/main/java/org/zstack/network/l3/L3BasicNetwork.java:449-490
Timestamp: 2025-08-04T04:48:19.103Z
Learning: ZStack项目在cherry-pick操作中,即使发现了性能优化机会(如IP地址批量保存的内存优化),也严格遵循不做额外修改的政策,优先保证cherry-pick的完整性和一致性。


3 changes: 2 additions & 1 deletion conf/i18n/globalErrorCodeMapping/global-error-de-DE.json
Original file line number Diff line number Diff line change
Expand Up @@ -4716,5 +4716,6 @@
"ORG_ZSTACK_SDNCONTROLLER_10025": "SDN-Controller [UUID:%s] nicht gefunden.",
"ORG_ZSTACK_ZBOX_10002": "",
"ORG_ZSTACK_BILLING_10020": "Das Konto[uuid=%s] hat eine Preisliste angehängt",
"ORG_ZSTACK_BAREMETAL2_GATEWAY_10046": "Fehler beim Zerstören des Bereitstellungsnetzwerks im Gateway[uuid:%s], weil %s"
"ORG_ZSTACK_BAREMETAL2_GATEWAY_10046": "Fehler beim Zerstören des Bereitstellungsnetzwerks im Gateway[uuid:%s], weil %s",
"ORG_ZSTACK_AI_10157": "virtiofs ist deaktiviert (ai.virtiofs.enabled=false). Bitte aktivieren Sie es, um Modelle auf VMs einzuhängen: UpdateGlobalConfig category=ai name=virtiofs.enabled value=true"
}
3 changes: 2 additions & 1 deletion conf/i18n/globalErrorCodeMapping/global-error-en_US.json
Original file line number Diff line number Diff line change
Expand Up @@ -4720,5 +4720,6 @@
"ORG_ZSTACK_VPCFIREWALL_10035": "could not add firewall rule[%d] because of a %s error",
"ORG_ZSTACK_DGPU_10010": "Available License not found, please apply addon license for product dGPU.",
"ORG_ZSTACK_DGPU_10011": "Addon license for product dGPU has expired, please renew it.",
"ORG_ZSTACK_DGPU_10012": "Insufficient dGPU GPU number licensed. Your license permits %d GPU, there are %d GPU used, shared: %d, need: %d."
"ORG_ZSTACK_DGPU_10012": "Insufficient dGPU GPU number licensed. Your license permits %d GPU, there are %d GPU used, shared: %d, need: %d.",
"ORG_ZSTACK_AI_10157": "virtiofs is disabled (ai.virtiofs.enabled=false). Please enable it to mount models to VMs: UpdateGlobalConfig category=ai name=virtiofs.enabled value=true"
}
3 changes: 2 additions & 1 deletion conf/i18n/globalErrorCodeMapping/global-error-fr-FR.json
Original file line number Diff line number Diff line change
Expand Up @@ -4716,5 +4716,6 @@
"ORG_ZSTACK_ZWATCH_FUNCTION_10013": "Arguments inconnus détectés. Veuillez vous assurer que tous les paramètres de ligne de commande sont valides et consulter la documentation pour obtenir la liste des arguments acceptés.",
"ORG_ZSTACK_VPCFIREWALL_10034": "impossible d'ajouter la règle de pare-feu[%d] car seul le protocole TCP prend en charge les drapeaux TCP dans cet environnement",
"ORG_ZSTACK_NETWORK_SERVICE_VIRTUALROUTER_VYOS_10007": "impossible d'arrêter le serveur DHCP sur l'instance de routeur virtuel [uuid:%s] car %s",
"ORG_ZSTACK_VPCFIREWALL_10035": "impossible d'ajouter la règle de pare-feu[%d] en raison d'une erreur %s"
"ORG_ZSTACK_VPCFIREWALL_10035": "impossible d'ajouter la règle de pare-feu[%d] en raison d'une erreur %s",
"ORG_ZSTACK_AI_10157": "virtiofs est désactivé (ai.virtiofs.enabled=false). Veuillez l'activer pour monter des modèles sur les VMs : UpdateGlobalConfig category=ai name=virtiofs.enabled value=true"
}
3 changes: 2 additions & 1 deletion conf/i18n/globalErrorCodeMapping/global-error-id-ID.json
Original file line number Diff line number Diff line change
Expand Up @@ -4716,5 +4716,6 @@
"ORG_ZSTACK_ZWATCH_FUNCTION_10013": "Terdeteksi argumen yang tidak diketahui. Harap pastikan semua parameter baris perintah valid dan lihat dokumentasi untuk daftar argumen yang diterima.",
"ORG_ZSTACK_VPCFIREWALL_10034": "tidak dapat menambahkan aturan firewall[%d] karena hanya protokol TCP yang mendukung flag TCP di lingkungan ini",
"ORG_ZSTACK_NETWORK_SERVICE_VIRTUALROUTER_VYOS_10007": "tidak dapat menghentikan server DHCP pada instance router virtual [uuid:%s] karena %s",
"ORG_ZSTACK_VPCFIREWALL_10035": "tidak dapat menambahkan aturan firewall[%d] karena error %s"
"ORG_ZSTACK_VPCFIREWALL_10035": "tidak dapat menambahkan aturan firewall[%d] karena error %s",
"ORG_ZSTACK_AI_10157": "virtiofs dinonaktifkan (ai.virtiofs.enabled=false). Harap aktifkan untuk memasang model ke VM: UpdateGlobalConfig category=ai name=virtiofs.enabled value=true"
}
3 changes: 2 additions & 1 deletion conf/i18n/globalErrorCodeMapping/global-error-ja-JP.json
Original file line number Diff line number Diff line change
Expand Up @@ -4716,5 +4716,6 @@
"ORG_ZSTACK_PCIDEVICE_10063": "PCIデバイス[%s]がすべて使用可能ではありません",
"ORG_ZSTACK_PCIDEVICE_10058": "ホスト [%s] のメンテナンスモードへの移行に失敗しました。PCIデバイスの存在により、VM [%s] は自動移行できません。",
"ORG_ZSTACK_PCIDEVICE_10052": "VM[%s]の他のPCIデバイスを取り外してから、再試行してください",
"ORG_ZSTACK_CRYPTO_SECURITYMACHINE_THIRDPARTY_INFOSEC_10024": "大規模ファイルのHMAC暗号化に失敗しました、コード: %s、詳細: %s"
"ORG_ZSTACK_CRYPTO_SECURITYMACHINE_THIRDPARTY_INFOSEC_10024": "大規模ファイルのHMAC暗号化に失敗しました、コード: %s、詳細: %s",
"ORG_ZSTACK_AI_10157": "virtiofs が無効です (ai.virtiofs.enabled=false)。VM にモデルをマウントするには有効にしてください:UpdateGlobalConfig category=ai name=virtiofs.enabled value=true"
}
3 changes: 2 additions & 1 deletion conf/i18n/globalErrorCodeMapping/global-error-ko-KR.json
Original file line number Diff line number Diff line change
Expand Up @@ -4716,5 +4716,6 @@
"ORG_ZSTACK_COMPUTE_VM_10129": "메시지 %s에서 vmUuid를 검색할 수 없습니다",
"ORG_ZSTACK_COMPUTE_VM_10127": "실행 중인 VM[uuid:%s]의 CPU를 줄일 수 없습니다",
"ORG_ZSTACK_IAM2_ATTRIBUTE_PROJECT_10007": "잘못된 날짜 또는 시간[%s]으로, 현재 타임스탬프[%s]보다 이전일 수 없습니다.",
"ORG_ZSTACK_NETWORK_SERVICE_LB_10077": "세션 쿠키 이름 [%s]이(가) 잘못되었습니다. [%d]자 미만이어야 합니다"
"ORG_ZSTACK_NETWORK_SERVICE_LB_10077": "세션 쿠키 이름 [%s]이(가) 잘못되었습니다. [%d]자 미만이어야 합니다",
"ORG_ZSTACK_AI_10157": "virtiofs가 비활성화되었습니다 (ai.virtiofs.enabled=false). VM에 모델을 마운트하려면 활성화하세요: UpdateGlobalConfig category=ai name=virtiofs.enabled value=true"
}
3 changes: 2 additions & 1 deletion conf/i18n/globalErrorCodeMapping/global-error-ru-RU.json
Original file line number Diff line number Diff line change
Expand Up @@ -4716,5 +4716,6 @@
"ORG_ZSTACK_ZWATCH_FUNCTION_10013": "Обнаружены неизвестные аргументы. Убедитесь, что все параметры командной строки действительны, и обратитесь к документации для получения списка допустимых аргументов.",
"ORG_ZSTACK_VPCFIREWALL_10034": "не удалось добавить правило брандмауэра[%d], так как только протокол TCP поддерживает TCP-флаги в этой среде",
"ORG_ZSTACK_NETWORK_SERVICE_VIRTUALROUTER_VYOS_10007": "не удалось остановить DHCP-сервер на экземпляре виртуального маршрутизатора [uuid:%s], поскольку %s",
"ORG_ZSTACK_VPCFIREWALL_10035": "не удалось добавить правило брандмауэра[%d] из-за ошибки %s"
"ORG_ZSTACK_VPCFIREWALL_10035": "не удалось добавить правило брандмауэра[%d] из-за ошибки %s",
"ORG_ZSTACK_AI_10157": "virtiofs отключён (ai.virtiofs.enabled=false). Пожалуйста, включите для монтирования моделей на ВМ: UpdateGlobalConfig category=ai name=virtiofs.enabled value=true"
}
3 changes: 2 additions & 1 deletion conf/i18n/globalErrorCodeMapping/global-error-th-TH.json
Original file line number Diff line number Diff line change
Expand Up @@ -4716,5 +4716,6 @@
"ORG_ZSTACK_ZWATCH_FUNCTION_10013": "ตรวจพบอาร์กิวเมนต์ที่ไม่รู้จัก โปรดตรวจสอบว่าพารามิเตอร์บรรทัดคำสั่งทั้งหมดถูกต้อง และอ้างอิงเอกสารสำหรับรายการอาร์กิวเมนต์ที่รองรับ",
"ORG_ZSTACK_VPCFIREWALL_10034": "ไม่สามารถเพิ่มกฎไฟร์วอลล์[%d] เนื่องจากมีเพียงโปรโตคอล TCP ที่รองรับ TCP flags ในสภาพแวดล้อมนี้",
"ORG_ZSTACK_NETWORK_SERVICE_VIRTUALROUTER_VYOS_10007": "ไม่สามารถหยุดเซิร์ฟเวอร์ DHCP บนอินสแตนซ์เราเตอร์เสมือน [uuid:%s] เนื่องจาก %s",
"ORG_ZSTACK_VPCFIREWALL_10035": "ไม่สามารถเพิ่มกฎไฟร์วอลล์[%d] เนื่องจากเกิดข้อผิดพลาด %s"
"ORG_ZSTACK_VPCFIREWALL_10035": "ไม่สามารถเพิ่มกฎไฟร์วอลล์[%d] เนื่องจากเกิดข้อผิดพลาด %s",
"ORG_ZSTACK_AI_10157": "virtiofs ถูกปิดใช้งาน (ai.virtiofs.enabled=false) โปรดเปิดใช้งานเพื่อเมานต์โมเดลไปยัง VM: UpdateGlobalConfig category=ai name=virtiofs.enabled value=true"
}
16 changes: 15 additions & 1 deletion conf/i18n/globalErrorCodeMapping/global-error-zh_CN.json
Original file line number Diff line number Diff line change
Expand Up @@ -4720,5 +4720,19 @@
"ORG_ZSTACK_VPCFIREWALL_10035": "无法添加防火墙规则[%d]因为%s",
"ORG_ZSTACK_DGPU_10010": "未找到可用的 dGPU AddOn License,请为 dGPU 产品申请并上传对应授权。",
"ORG_ZSTACK_DGPU_10011": "dGPU 产品的 AddOn License 已过期,请及时续期。",
"ORG_ZSTACK_DGPU_10012": "dGPU 授权 GPU 数量不足。License 允许 %d 个 GPU,当前已使用 %d 个,其他节点共享使用 %d 个,本次还需要 %d 个。"
"ORG_ZSTACK_DGPU_10012": "dGPU 授权 GPU 数量不足。License 允许 %d 个 GPU,当前已使用 %d 个,其他节点共享使用 %d 个,本次还需要 %d 个。",
"ORG_ZSTACK_AI_10138": "虚拟机[uuid:%s]未找到",
"ORG_ZSTACK_AI_10139": "模型[uuid:%s]未找到",
"ORG_ZSTACK_AI_10140": "虚拟机[uuid:%s]必须处于运行状态才能挂载模型,当前状态: %s",
"ORG_ZSTACK_AI_10141": "虚拟机[uuid:%s]未运行在任何主机上",
"ORG_ZSTACK_AI_10142": "模型[uuid:%s]属于账户[%s]但虚拟机[uuid:%s]属于账户[%s],无法跨账户挂载模型",
"ORG_ZSTACK_AI_10143": "模型中心[uuid:%s]未找到",
"ORG_ZSTACK_AI_10144": "挂载路径[%s]已被虚拟机[uuid:%s]上的另一个挂载[uuid:%s]使用",
"ORG_ZSTACK_AI_10145": "挂载路径[%s]不允许,不能挂载到系统目录",
"ORG_ZSTACK_AI_10146": "模型安装路径[%s]无效,预期格式: file:///root/bentoml/models/<path>",
"ORG_ZSTACK_AI_10147": "挂载记录[uuid:%s]未找到",
"ORG_ZSTACK_AI_10148": "挂载记录[uuid:%s]未处于已挂载状态,当前状态: %s",
"ORG_ZSTACK_AI_10149": "挂载模型到虚拟机失败: %s",
"ORG_ZSTACK_AI_10150": "模型[uuid:%s, 名称:%s]已挂载到虚拟机[uuid:%s],挂载路径[%s]。每个模型在每个虚拟机上只能挂载一次",
"ORG_ZSTACK_AI_10157": "virtiofs 已禁用 (ai.virtiofs.enabled=false)。请启用该配置以将模型挂载到虚拟机:UpdateGlobalConfig category=ai name=virtiofs.enabled value=true"
}
3 changes: 2 additions & 1 deletion conf/i18n/globalErrorCodeMapping/global-error-zh_TW.json
Original file line number Diff line number Diff line change
Expand Up @@ -4716,5 +4716,6 @@
"ORG_ZSTACK_ZWATCH_FUNCTION_10013": "未知參數",
"ORG_ZSTACK_VPCFIREWALL_10034": "無法添加防火墙規则[%d],因为只有TCP协议可以使用TCP標誌",
"ORG_ZSTACK_NETWORK_SERVICE_VIRTUALROUTER_VYOS_10007": "無法停止虚拟路由器VM[uuid:%s]上的DHCP服務器,因为%s",
"ORG_ZSTACK_VPCFIREWALL_10035": "無法添加防火墙規则[%d]因为%s"
"ORG_ZSTACK_VPCFIREWALL_10035": "無法添加防火墙規则[%d]因为%s",
"ORG_ZSTACK_AI_10157": "virtiofs 已停用 (ai.virtiofs.enabled=false)。請啟用該設定以將模型掛載到虛擬機器:UpdateGlobalConfig category=ai name=virtiofs.enabled value=true"
}
5 changes: 5 additions & 0 deletions plugin/kvm/src/main/java/org/zstack/kvm/KVMConstant.java
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,11 @@ public interface KVMConstant {
String CLEAN_FIRMWARE_FLASH = "/clean/firmware/flash";
String FSTRIM_VM_PATH = "/vm/fstrim";

// ZSTAC-83157: virtiofs model mount paths
String KVM_VIRTIOFS_ATTACH_PATH = "/virtiofs/attach";
String KVM_VIRTIOFS_DETACH_PATH = "/virtiofs/detach";
String KVM_MODEL_CENTER_MOUNT_PATH = "/modelcenter/mount";

String ISO_TO = "kvm.isoto";
String ANSIBLE_PLAYBOOK_NAME = "kvm.py";
String ANSIBLE_MODULE_PATH = "ansible/kvm";
Expand Down
Loading