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
51 changes: 47 additions & 4 deletions compute/src/main/java/org/zstack/compute/vm/VmDownloadIsoFlow.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import org.zstack.header.image.ImageInventory;
import org.zstack.header.image.ImageStatus;
import org.zstack.header.message.MessageReply;
import org.zstack.header.storage.backup.BackupStorageStatus;
import org.zstack.header.storage.primary.DownloadIsoToPrimaryStorageMsg;
import org.zstack.header.storage.primary.DownloadIsoToPrimaryStorageReply;
import org.zstack.header.storage.primary.PrimaryStorageConstant;
Expand All @@ -24,7 +25,11 @@
import org.zstack.utils.CollectionUtils;
import org.zstack.utils.function.Function;

import javax.persistence.Tuple;
import javax.persistence.TypedQuery;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import static org.zstack.core.Platform.operr;
import static org.zstack.utils.clouderrorcode.CloudOperationsErrorCode.*;
Expand All @@ -41,6 +46,38 @@ public class VmDownloadIsoFlow extends NoRollbackFlow {
@Autowired
private ErrorFacade errf;

private String getImageBackupStorageInfo(String imageUuid) {
String sql = "select bs.name, bs.status" +
" from BackupStorageVO bs, ImageBackupStorageRefVO ref" +
" where bs.uuid = ref.backupStorageUuid" +
" and ref.imageUuid = :imageUuid";
TypedQuery<Tuple> q = dbf.getEntityManager().createQuery(sql, Tuple.class);
q.setParameter("imageUuid", imageUuid);
Comment on lines +54 to +55
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, let's find and examine the specific file
fd -t f "VmDownloadIsoFlow.java" --exec wc -l {} \;

Repository: MatheMatrix/zstack

Length of output: 134


🏁 Script executed:

# Read the file content, focusing on lines around 54-55 and 70-71
fd -t f "VmDownloadIsoFlow.java" --exec cat -n {} \; | head -100

Repository: MatheMatrix/zstack

Length of output: 5244


🏁 Script executed:

# Search for TypedQuery usage patterns in the codebase to understand if it's discouraged
rg "TypedQuery" -t java --max-count 20 -B 2 -A 2

Repository: MatheMatrix/zstack

Length of output: 50375


🏁 Script executed:

# Look for repository query encapsulation patterns
rg "repository|Repository" -t java compute/src/main/java/org/zstack/compute/vm/ --max-count 10 -A 3

Repository: MatheMatrix/zstack

Length of output: 44


🏁 Script executed:

# Search for repository or query helper patterns in compute module
rg "Query.*Tuple|repository.*query" compute/src/main/java/org/zstack/compute/ -t java -A 3 --max-count 15

Repository: MatheMatrix/zstack

Length of output: 10417


🏁 Script executed:

# Look for alternative query patterns - checking how similar data fetching is done
rg "BackupStorage|getEntityManager.*createQuery" compute/src/main/java/org/zstack/compute/vm/ -t java -B 2 -A 2

Repository: MatheMatrix/zstack

Length of output: 50374


🏁 Script executed:

# Check if there are repository classes or query builders for BackupStorageVO
fd -t f ".*Repository.*|.*Query.*" compute/src/main/java/org/zstack/compute/ --exec basename {} \;

Repository: MatheMatrix/zstack

Length of output: 44


🏁 Script executed:

# Search for how multiple field selection queries are handled elsewhere
rg "select.*from.*where.*and.*status|name.*status" storage/src/main/java/ -t java --max-count 5 -B 1 -A 3

Repository: MatheMatrix/zstack

Length of output: 11670


避免在新增代码中直接使用 TypedQuery

第 54-55 行与第 70-71 行新增了 TypedQuery<Tuple> 的直接使用。建议改用统一的数据库查询封装方式(如仓库模式),以保持代码风格一致。

Also applies to: 70-71

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@compute/src/main/java/org/zstack/compute/vm/VmDownloadIsoFlow.java` around
lines 54 - 55, The new code in VmDownloadIsoFlow creates a TypedQuery<Tuple>
directly (dbf.getEntityManager().createQuery(sql, Tuple.class) and
q.setParameter("imageUuid", imageUuid)); replace these direct TypedQuery usages
with the project's unified DB query wrapper (e.g., SimpleQuery/SQLBatch or the
DbFacade helper methods used elsewhere) so queries follow the repository/DB
facade pattern: locate the sql and imageUuid usage in VmDownloadIsoFlow and
rewrite the two query sites (the Tuple-typed query at both additions) to use the
project's standard query helper (passing the SQL and parameter map) instead of
instantiating TypedQuery directly.

List<Tuple> tuples = q.getResultList();
if (tuples.isEmpty()) {
return "none";
}
return tuples.stream()
.map(t -> String.format("%s(%s)", t.get(0, String.class), t.get(1, BackupStorageStatus.class)))
.collect(Collectors.joining(", ", "[", "]"));
}

private String getZoneBackupStorageInfo(String zoneUuid) {
String sql = "select bs.name, bs.status" +
" from BackupStorageVO bs, BackupStorageZoneRefVO ref" +
" where bs.uuid = ref.backupStorageUuid" +
" and ref.zoneUuid = :zoneUuid";
TypedQuery<Tuple> q = dbf.getEntityManager().createQuery(sql, Tuple.class);
q.setParameter("zoneUuid", zoneUuid);
List<Tuple> tuples = q.getResultList();
if (tuples.isEmpty()) {
return "none";
}
return tuples.stream()
.map(t -> String.format("%s(%s)", t.get(0, String.class), t.get(1, BackupStorageStatus.class)))
.collect(Collectors.joining(", ", "[", "]"));
}

@Override
public void run(final FlowTrigger trigger, Map data) {
final VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString());
Expand All @@ -59,10 +96,16 @@ public void run(final FlowTrigger trigger, Map data) {
final String bsUuid = selector.select();

if (bsUuid == null) {
throw new OperationFailureException(operr(ORG_ZSTACK_COMPUTE_VM_10084, "cannot find the iso[uuid:%s] in any connected backup storage attached to the zone[uuid:%s]. check below:\n" +
"1. if the backup storage is attached to the zone where the VM[name: %s, uuid:%s] is running\n" +
"2. if the backup storage is in connected status, if not, try reconnecting it",
iso.getUuid(), host.getZoneUuid(), spec.getVmInventory().getName(), spec.getVmInventory().getUuid())
String isoBsInfo = getImageBackupStorageInfo(iso.getUuid());
String zoneBsInfo = getZoneBackupStorageInfo(host.getZoneUuid());
throw new OperationFailureException(operr(ORG_ZSTACK_COMPUTE_VM_10084,
"cannot find the iso[name:%s, uuid:%s] in any connected backup storage" +
" attached to the zone[uuid:%s]." +
"\nISO is on backup storage: %s" +
"\nzone attached backup storage: %s" +
"\nsuggestion: attach the ISO's backup storage to the zone," +
" or ensure the backup storage is connected.",
iso.getName(), iso.getUuid(), host.getZoneUuid(), isoBsInfo, zoneBsInfo)
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import org.zstack.header.image.ImageBackupStorageRefInventory;
import org.zstack.header.image.ImageConstant.ImageMediaType;
import org.zstack.header.image.ImageStatus;
import org.zstack.header.storage.backup.BackupStorageStatus;
import org.zstack.header.storage.primary.*;
import org.zstack.header.vm.VmInstanceConstant;
import org.zstack.header.vm.VmInstanceConstant.VmOperation;
Expand All @@ -22,11 +23,14 @@
import org.zstack.utils.DebugUtils;
import org.zstack.utils.function.Function;

import javax.persistence.Tuple;
import javax.persistence.TypedQuery;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

import static org.zstack.core.Platform.operr;
import static org.zstack.core.progress.ProgressReportService.taskProgress;
Expand Down Expand Up @@ -76,17 +80,27 @@ private String findBackupStorage(VmInstanceSpec spec, String imageUuid) {
}
}

String imageName = spec.getImageSpec().getInventory().getName();
String imageBsInfo = getImageBackupStorageInfo(imageUuid);
if (spec.getVmInventory().getZoneUuid() != null) {
throw new OperationFailureException(operr(ORG_ZSTACK_COMPUTE_VM_10085, "cannot find the image[uuid:%s] in any connected backup storage attached to the zone[uuid:%s]. check below:\n" +
"1. if the backup storage is attached to the zone where the VM[name: %s, uuid:%s] is in\n" +
"2. if the backup storage is in connected status, if not, try reconnecting it",
imageUuid, spec.getVmInventory().getZoneUuid(), spec.getVmInventory().getName(), spec.getVmInventory().getUuid())
String zoneUuid = spec.getVmInventory().getZoneUuid();
String zoneBsInfo = getZoneBackupStorageInfo(zoneUuid);
throw new OperationFailureException(operr(ORG_ZSTACK_COMPUTE_VM_10085,
"cannot find the image[name:%s, uuid:%s] in any connected backup storage" +
" attached to the zone[uuid:%s]." +
"\nimage is on backup storage: %s" +
"\nzone attached backup storage: %s" +
"\nsuggestion: attach the image's backup storage to the zone," +
" or sync the image to an attached and connected backup storage.",
imageName, imageUuid, zoneUuid, imageBsInfo, zoneBsInfo)
);
} else {
throw new OperationFailureException(operr(ORG_ZSTACK_COMPUTE_VM_10086, "cannot find the image[uuid:%s] in any connected backup storage. check below:\n" +
"1. if the backup storage is attached to the zone where the VM[name: %s, uuid:%s] is in\n" +
"2. if the backup storage is in connected status, if not, try reconnecting it",
imageUuid, spec.getVmInventory().getName(), spec.getVmInventory().getUuid())
throw new OperationFailureException(operr(ORG_ZSTACK_COMPUTE_VM_10086,
"cannot find the image[name:%s, uuid:%s] in any connected backup storage." +
"\nimage is on backup storage: %s" +
"\nsuggestion: ensure the backup storage is connected," +
" or sync the image to a connected backup storage.",
imageName, imageUuid, imageBsInfo)
);
}
}
Expand Down Expand Up @@ -126,13 +140,58 @@ private String findIsoBsUuidInTheZone(final String isoImageUuid, final String zo
q.setMaxResults(1);
List<String> ret = q.getResultList();
if (ret.isEmpty()) {
throw new OperationFailureException(operr(ORG_ZSTACK_COMPUTE_VM_10087, "no backup storage attached to the zone[uuid:%s] contains the ISO[uuid:%s]",
zoneUuid, isoImageUuid));
String isoName = Optional.ofNullable((String) Q.New(org.zstack.header.image.ImageVO.class)
.eq(org.zstack.header.image.ImageVO_.uuid, isoImageUuid)
.select(org.zstack.header.image.ImageVO_.name)
.findValue()).orElse(isoImageUuid);
String isoBsInfo = getImageBackupStorageInfo(isoImageUuid);
String zoneBsInfo = getZoneBackupStorageInfo(zoneUuid);
throw new OperationFailureException(operr(ORG_ZSTACK_COMPUTE_VM_10087,
"no backup storage attached to the zone[uuid:%s] contains the ISO[name:%s, uuid:%s]." +
"\nISO is on backup storage: %s" +
"\nzone attached backup storage: %s" +
"\nsuggestion: attach the ISO's backup storage to the zone," +
" or sync the ISO to an attached backup storage.",
zoneUuid, isoName, isoImageUuid, isoBsInfo, zoneBsInfo));
}

return ret.get(0);
}

@Transactional(readOnly = true)
private String getImageBackupStorageInfo(String imageUuid) {
String sql = "select bs.name, bs.status" +
" from BackupStorageVO bs, ImageBackupStorageRefVO ref" +
" where bs.uuid = ref.backupStorageUuid" +
" and ref.imageUuid = :imageUuid";
TypedQuery<Tuple> q = dbf.getEntityManager().createQuery(sql, Tuple.class);
q.setParameter("imageUuid", imageUuid);
Comment on lines +167 to +168
Copy link

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:

# First, check if the file exists and read the relevant lines
if [ -f "compute/src/main/java/org/zstack/compute/vm/VmImageSelectBackupStorageFlow.java" ]; then
  echo "=== File exists, checking lines 160-195 for context ==="
  sed -n '160,195p' compute/src/main/java/org/zstack/compute/vm/VmImageSelectBackupStorageFlow.java
else
  echo "File not found at specified path"
  find . -name "VmImageSelectBackupStorageFlow.java" 2>/dev/null
fi

Repository: MatheMatrix/zstack

Length of output: 1719


🏁 Script executed:

# Search for Q and QueryMore usage patterns in the project
echo "=== Searching for Q usage pattern ==="
rg "new Q\(" --type java -B 2 -A 2 | head -50

echo -e "\n=== Searching for QueryMore usage pattern ==="
rg "QueryMore" --type java -B 2 -A 2 | head -50

Repository: MatheMatrix/zstack

Length of output: 3651


🏁 Script executed:

# Check for TypedQuery usage patterns to understand current practice
echo "=== Checking TypedQuery usage in codebase ==="
rg "TypedQuery" --type java | head -20

echo -e "\n=== Checking for similar query patterns in compute module ==="
rg "dbf\.getEntityManager\(\)" compute/ --type java | head -10

Repository: MatheMatrix/zstack

Length of output: 4596


🏁 Script executed:

# Check QueryMore implementation for select/projection support
echo "=== Checking QueryMore for select method ==="
rg "public.*select" core/src/main/java/org/zstack/core/db/QueryMore.java -A 3

echo -e "\n=== Checking for Tuple usage with Q/QueryMore ==="
rg "QueryMore.*select" --type java -B 2 -A 3 | head -40

echo -e "\n=== Check Q usage examples with multiple columns ==="
rg "Q\.New.*select|QueryMore.*list\|find" --type java -B 2 -A 5 | head -60

Repository: MatheMatrix/zstack

Length of output: 11052


🏁 Script executed:

# Check how to construct queries with Q/QueryMore for Tuple-like results
echo "=== Checking QueryMore source for select method signature ==="
sed -n '1,100p' core/src/main/java/org/zstack/core/db/QueryMore.java | grep -A 10 "select"

Repository: MatheMatrix/zstack

Length of output: 554


🏁 Script executed:

# Check how QueryMore.list() returns results when multiple columns are selected
echo "=== Checking QueryMore.list() method signature and return type ==="
rg "public.*list\(\)" core/src/main/java/org/zstack/core/db/QueryMore.java -A 5

echo -e "\n=== Check examples of multi-attribute selects with list/find methods ==="
rg "\.select\([^)]*,\s*[^)]*\)" --type java -B 2 -A 5 | head -80

Repository: MatheMatrix/zstack

Length of output: 9535


🏁 Script executed:

# Check if there are examples using QueryMore to select multiple attributes
echo "=== Search for QueryMore usage with 2+ select parameters ==="
grep -r "select(" compute/ --include="*.java" -A 5 | head -40

Repository: MatheMatrix/zstack

Length of output: 4845


🏁 Script executed:

# Check the QueryMore list method to understand return type
sed -n '1,500p' core/src/main/java/org/zstack/core/db/QueryMore.java | grep -A 15 "public.*List.*list()"

Repository: MatheMatrix/zstack

Length of output: 768


避免使用 TypedQuery,改用项目统一查询封装 Q/QueryMore

第 167-168 行和第 184-185 行的新增查询直接使用了 TypedQuery,违反了编码规范要求。应改为项目统一的 Q/QueryMore 查询框架,以保持一致性。

参考示例:

Q.New(BackupStorageVO.class, ImageBackupStorageRefVO.class)
    .select(BackupStorageVO_.name, BackupStorageVO_.status)
    // 添加关联条件
    .listTuple();
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@compute/src/main/java/org/zstack/compute/vm/VmImageSelectBackupStorageFlow.java`
around lines 167 - 168, Replace the direct JPA TypedQuery usage (the local
variable q created with dbf.getEntityManager().createQuery and
q.setParameter("imageUuid", ...)) inside VmImageSelectBackupStorageFlow with the
project's Q/QueryMore query API; build a query starting from
Q.New(BackupStorageVO.class, ImageBackupStorageRefVO.class) (or equivalent
QueryMore) to add the join/filter on ImageBackupStorageRefVO.imageUuid, select
the same columns (or tuples) previously requested, and call listTuple() (or the
QueryMore equivalent) to fetch results—remove the TypedQuery instantiation and
parameter binding and mirror the original selection/where logic using
Q/QueryMore methods.

List<Tuple> tuples = q.getResultList();
if (tuples.isEmpty()) {
return "none";
}
return tuples.stream()
.map(t -> String.format("%s(%s)", t.get(0, String.class), t.get(1, BackupStorageStatus.class)))
.collect(Collectors.joining(", ", "[", "]"));
}

@Transactional(readOnly = true)
private String getZoneBackupStorageInfo(String zoneUuid) {
String sql = "select bs.name, bs.status" +
" from BackupStorageVO bs, BackupStorageZoneRefVO ref" +
" where bs.uuid = ref.backupStorageUuid" +
" and ref.zoneUuid = :zoneUuid";
TypedQuery<Tuple> q = dbf.getEntityManager().createQuery(sql, Tuple.class);
q.setParameter("zoneUuid", zoneUuid);
List<Tuple> tuples = q.getResultList();
if (tuples.isEmpty()) {
return "none";
}
return tuples.stream()
.map(t -> String.format("%s(%s)", t.get(0, String.class), t.get(1, BackupStorageStatus.class)))
.collect(Collectors.joining(", ", "[", "]"));
}

@Override
public void run(FlowTrigger trigger, Map data) {
VmInstanceSpec spec = (VmInstanceSpec) data.get(VmInstanceConstant.Params.VmInstanceSpec.toString());
Expand Down
5 changes: 4 additions & 1 deletion conf/i18n/globalErrorCodeMapping/global-error-de-DE.json
Original file line number Diff line number Diff line change
Expand Up @@ -3560,7 +3560,10 @@
"ORG_ZSTACK_COMPUTE_VM_10078": "Alle VM[UUID:%s] CD-ROMs haben ISO-Images eingebunden",
"ORG_ZSTACK_COMPUTE_VM_10090": "Volume konnte nicht instantiiert werden, da der VM-Host [UUID: %s] und der zugewiesene Primärspeicher [UUID: %s] nicht verbunden sind.",
"ORG_ZSTACK_COMPUTE_VM_10088": "Aktueller VM-Status[%s], Virtio-Modifikation erfordert VM-Status[%s]",
"ORG_ZSTACK_COMPUTE_VM_10084": "ISO [UUID:%s] kann in keinem verbundenen Backup-Speicher gefunden werden, der der Zone [UUID:%s] zugeordnet ist. Bitte überprüfen Sie Folgendes:",
"ORG_ZSTACK_COMPUTE_VM_10084": "ISO[Name:%s, UUID:%s] kann in keinem verbundenen Backup-Speicher der Zone[UUID:%s] gefunden werden.\nISO befindet sich auf Backup-Speicher: %s\nZone-Backup-Speicher: %s\nVorschlag: Hängen Sie den Backup-Speicher des ISO an die Zone an, oder stellen Sie sicher, dass der Backup-Speicher verbunden ist.",
"ORG_ZSTACK_COMPUTE_VM_10085": "Image[Name:%s, UUID:%s] kann in keinem verbundenen Backup-Speicher der Zone[UUID:%s] gefunden werden.\nImage befindet sich auf Backup-Speicher: %s\nZone-Backup-Speicher: %s\nVorschlag: Hängen Sie den Backup-Speicher des Image an die Zone an, oder synchronisieren Sie das Image zu einem angehängten und verbundenen Backup-Speicher.",
"ORG_ZSTACK_COMPUTE_VM_10086": "Image[Name:%s, UUID:%s] kann in keinem verbundenen Backup-Speicher gefunden werden.\nImage befindet sich auf Backup-Speicher: %s\nVorschlag: Stellen Sie sicher, dass der Backup-Speicher verbunden ist, oder synchronisieren Sie das Image zu einem verbundenen Backup-Speicher.",
"ORG_ZSTACK_COMPUTE_VM_10087": "Kein Backup-Speicher der Zone[UUID:%s] enthält das ISO[Name:%s, UUID:%s].\nISO befindet sich auf Backup-Speicher: %s\nZone-Backup-Speicher: %s\nVorschlag: Hängen Sie den Backup-Speicher des ISO an die Zone an, oder synchronisieren Sie das ISO zu einem angehängten Backup-Speicher.",
"ORG_ZSTACK_COMPUTE_VM_10083": "Keiner der angegebenen Primärspeicher%s ist verfügbar",
"ORG_ZSTACK_COMPUTE_VM_10081": "Erstellung basiert auf Image-Cache[uuid:%s, located ps uuids: [%s]], kann nicht woanders erstellt werden.",
"ORG_ZSTACK_KVM_HYPERVISOR_10000": "Host-Virtualisierungsinformationen konnten nicht gesammelt werden",
Expand Down
5 changes: 4 additions & 1 deletion conf/i18n/globalErrorCodeMapping/global-error-en_US.json
Original file line number Diff line number Diff line change
Expand Up @@ -3651,7 +3651,10 @@
"ORG_ZSTACK_COMPUTE_VM_10078": "All VM[UUID:%s] CD-ROMs have mounted ISO images",
"ORG_ZSTACK_COMPUTE_VM_10090": "Failed to instantiate volume because the VM\u0027s host [UUID: %s] and allocated primary storage [UUID: %s] are not connected.",
"ORG_ZSTACK_COMPUTE_VM_10088": "vm current state[%s], modifying virtio requires vm to be in state[%s]",
"ORG_ZSTACK_COMPUTE_VM_10084": "cannot find ISO [UUID:%s] in any connected backup storage associated with the zone [UUID:%s]. Please verify the following:\n1. Ensure the backup storage is attached to the correct zone where the VM [NAME: %s, UUID:%s] is running.\n2. Confirm the backup storage is in an active state; if not, attempt to reconnect it.",
"ORG_ZSTACK_COMPUTE_VM_10084": "cannot find the ISO[name:%s, uuid:%s] in any connected backup storage attached to the zone[uuid:%s].\nISO is on backup storage: %s\nzone attached backup storage: %s\nsuggestion: attach the ISO's backup storage to the zone, or ensure the backup storage is connected.",
"ORG_ZSTACK_COMPUTE_VM_10085": "cannot find the image[name:%s, uuid:%s] in any connected backup storage attached to the zone[uuid:%s].\nimage is on backup storage: %s\nzone attached backup storage: %s\nsuggestion: attach the image's backup storage to the zone, or sync the image to an attached and connected backup storage.",
"ORG_ZSTACK_COMPUTE_VM_10086": "cannot find the image[name:%s, uuid:%s] in any connected backup storage.\nimage is on backup storage: %s\nsuggestion: ensure the backup storage is connected, or sync the image to a connected backup storage.",
"ORG_ZSTACK_COMPUTE_VM_10087": "no backup storage attached to the zone[uuid:%s] contains the ISO[name:%s, uuid:%s].\nISO is on backup storage: %s\nzone attached backup storage: %s\nsuggestion: attach the ISO's backup storage to the zone, or sync the ISO to an attached backup storage.",
"ORG_ZSTACK_COMPUTE_VM_10083": "none of the specified primary storage%s are available",
"ORG_ZSTACK_COMPUTE_VM_10081": "creation relies on image cache[uuid:%s, located ps uuids: [%s]], cannot create elsewhere.",
"ORG_ZSTACK_KVM_HYPERVISOR_10000": "Failed to collect host virtualization information",
Expand Down
5 changes: 4 additions & 1 deletion conf/i18n/globalErrorCodeMapping/global-error-fr-FR.json
Original file line number Diff line number Diff line change
Expand Up @@ -3650,7 +3650,10 @@
"ORG_ZSTACK_COMPUTE_VM_10078": "tous les CD-ROM de VM[UUID:%s] ont des images ISO montées",
"ORG_ZSTACK_COMPUTE_VM_10090": "Échec de l'instanciation du volume car l'hôte de la VM [UUID: %s] et le stockage primaire alloué [UUID: %s] ne sont pas connectés.",
"ORG_ZSTACK_COMPUTE_VM_10088": "état actuel de la vm[%s], la modification de virtio nécessite que la vm soit dans l'état[%s]",
"ORG_ZSTACK_COMPUTE_VM_10084": "impossible de trouver ISO [UUID:%s] dans un stockage de sauvegarde connecté associé à la zone [UUID:%s]. Veuillez vérifier ce qui suit:",
"ORG_ZSTACK_COMPUTE_VM_10084": "impossible de trouver l'ISO[nom:%s, uuid:%s] dans un stockage de sauvegarde connecté attaché à la zone[uuid:%s].\nL'ISO se trouve sur le stockage de sauvegarde: %s\nstockage de sauvegarde attaché à la zone: %s\nsuggestion: attachez le stockage de sauvegarde de l'ISO à la zone, ou assurez-vous que le stockage est connecté.",
"ORG_ZSTACK_COMPUTE_VM_10085": "impossible de trouver l'image[nom:%s, uuid:%s] dans un stockage de sauvegarde connecté attaché à la zone[uuid:%s].\nL'image se trouve sur le stockage de sauvegarde: %s\nstockage de sauvegarde attaché à la zone: %s\nsuggestion: attachez le stockage de sauvegarde de l'image à la zone, ou synchronisez l'image vers un stockage attaché et connecté.",
"ORG_ZSTACK_COMPUTE_VM_10086": "impossible de trouver l'image[nom:%s, uuid:%s] dans un stockage de sauvegarde connecté.\nL'image se trouve sur le stockage de sauvegarde: %s\nsuggestion: assurez-vous que le stockage est connecté, ou synchronisez l'image vers un stockage connecté.",
"ORG_ZSTACK_COMPUTE_VM_10087": "aucun stockage de sauvegarde attaché à la zone[uuid:%s] ne contient l'ISO[nom:%s, uuid:%s].\nL'ISO se trouve sur le stockage de sauvegarde: %s\nstockage de sauvegarde attaché à la zone: %s\nsuggestion: attachez le stockage de sauvegarde de l'ISO à la zone, ou synchronisez l'ISO vers un stockage attaché.",
"ORG_ZSTACK_COMPUTE_VM_10083": "1. Assurez-vous que le stockage de sauvegarde est attaché à la zone correcte où la VM [NOM: %s, UUID:%s] s'exécute.",
"ORG_ZSTACK_COMPUTE_VM_10081": "2. Confirmez que le stockage de sauvegarde est dans un état actif; si ce n'est pas le cas, essayez de le reconnecter.",
"ORG_ZSTACK_KVM_HYPERVISOR_10000": "aucun des stockages primaires%s spécifiés n'est disponible",
Expand Down
5 changes: 4 additions & 1 deletion conf/i18n/globalErrorCodeMapping/global-error-id-ID.json
Original file line number Diff line number Diff line change
Expand Up @@ -3650,7 +3650,10 @@
"ORG_ZSTACK_COMPUTE_VM_10078": "Semua CD-ROM VM[UUID:%s] telah memasang gambar ISO",
"ORG_ZSTACK_COMPUTE_VM_10090": "Gagal membuat instans volume karena host VM [UUID: %s] dan penyimpanan primer yang dialokasikan [UUID: %s] tidak terhubung.",
"ORG_ZSTACK_COMPUTE_VM_10088": "keadaan vm saat ini[%s], mengubah virtio memerlukan vm berada dalam keadaan[%s]",
"ORG_ZSTACK_COMPUTE_VM_10084": "tidak dapat menemukan ISO [UUID:%s] di penyimpanan cadangan terhubung manapun yang terkait dengan zona [UUID:%s]. Harap verifikasi hal berikut:",
"ORG_ZSTACK_COMPUTE_VM_10084": "tidak dapat menemukan ISO[nama:%s, uuid:%s] di penyimpanan cadangan terhubung manapun yang terpasang pada zona[uuid:%s].\nISO berada di penyimpanan cadangan: %s\npenyimpanan cadangan zona: %s\nsaran: pasang penyimpanan cadangan ISO ke zona, atau pastikan penyimpanan cadangan terhubung.",
"ORG_ZSTACK_COMPUTE_VM_10085": "tidak dapat menemukan image[nama:%s, uuid:%s] di penyimpanan cadangan terhubung manapun yang terpasang pada zona[uuid:%s].\nimage berada di penyimpanan cadangan: %s\npenyimpanan cadangan zona: %s\nsaran: pasang penyimpanan cadangan image ke zona, atau sinkronkan image ke penyimpanan cadangan yang terpasang dan terhubung.",
"ORG_ZSTACK_COMPUTE_VM_10086": "tidak dapat menemukan image[nama:%s, uuid:%s] di penyimpanan cadangan terhubung manapun.\nimage berada di penyimpanan cadangan: %s\nsaran: pastikan penyimpanan cadangan terhubung, atau sinkronkan image ke penyimpanan cadangan yang terhubung.",
"ORG_ZSTACK_COMPUTE_VM_10087": "tidak ada penyimpanan cadangan yang terpasang pada zona[uuid:%s] yang berisi ISO[nama:%s, uuid:%s].\nISO berada di penyimpanan cadangan: %s\npenyimpanan cadangan zona: %s\nsaran: pasang penyimpanan cadangan ISO ke zona, atau sinkronkan ISO ke penyimpanan cadangan yang terpasang.",
"ORG_ZSTACK_COMPUTE_VM_10083": "1. Pastikan penyimpanan cadangan terpasang pada zona yang benar tempat VM [NAME: %s, UUID:%s] berjalan.",
"ORG_ZSTACK_COMPUTE_VM_10081": "2. Konfirmasi penyimpanan cadangan dalam keadaan aktif; jika tidak, coba hubungkan kembali.",
"ORG_ZSTACK_KVM_HYPERVISOR_10000": "tidak ada penyimpanan primer yang ditentukan%s tersedia",
Expand Down
Loading