From 2940f174d0b698ef70b67e707a642bd40b9cf0cb Mon Sep 17 00:00:00 2001 From: water <672684719@qq.com> Date: Thu, 20 Aug 2026 16:09:38 +0800 Subject: [PATCH] fix: add SNAPSHOT account lookup in DownloadListener.getAccountIdForDataObject Fixes apache/cloudstack#13900: copySnapshot between zones fails with "Timeout waiting for response from storage host" when the account lookup returns null for SNAPSHOT data objects. Signed-off-by: waterWang --- .../java/com/cloud/storage/download/DownloadListener.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/com/cloud/storage/download/DownloadListener.java b/server/src/main/java/com/cloud/storage/download/DownloadListener.java index a35f4391b0a2..71c9cd9ce818 100644 --- a/server/src/main/java/com/cloud/storage/download/DownloadListener.java +++ b/server/src/main/java/com/cloud/storage/download/DownloadListener.java @@ -29,8 +29,10 @@ import com.cloud.resourcelimit.CheckedReservation; import com.cloud.storage.VMTemplateVO; import com.cloud.storage.VolumeVO; +import com.cloud.storage.SnapshotVO; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VolumeDao; +import com.cloud.storage.dao.SnapshotDao; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.ResourceLimitService; @@ -163,6 +165,8 @@ protected void runInContext() { @Inject ReservationDao _reservationDao; + @Inject + private SnapshotDao _snapshotDao; private LazyCache> zoneHypervisorsCache; private List listAvailHypervisorInZone(long zoneId) { @@ -275,7 +279,9 @@ private Long getAccountIdForDataObject() { } else if (DataObjectType.VOLUME.equals(object.getType())) { VolumeVO v = _volumeDao.findById(object.getId()); return v != null ? v.getAccountId() : null; - } + } else if (DataObjectType.SNAPSHOT.equals(object.getType())) { + SnapshotVO s = _snapshotDao.findById(object.getId()); + return s != null ? s.getAccountId() : null; return null; }