Skip to content

Commit 010b007

Browse files
committed
CLOUDSTACK-5414: With NFS Image Store migrated to S3 an error is thrown
in creation of Virtual Router.
1 parent 78b39bb commit 010b007

3 files changed

Lines changed: 27 additions & 3 deletions

File tree

engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import com.cloud.storage.DataStoreRole;
2626
import com.cloud.storage.VMTemplateStorageResourceAssoc;
27+
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
2728
import com.cloud.utils.db.GenericDao;
2829
import com.cloud.utils.fsm.StateDao;
2930

@@ -50,6 +51,8 @@ public interface TemplateDataStoreDao extends GenericDao<TemplateDataStoreVO, Lo
5051

5152
TemplateDataStoreVO findByTemplateZoneDownloadStatus(long templateId, Long zoneId, VMTemplateStorageResourceAssoc.Status... status);
5253

54+
TemplateDataStoreVO findByTemplateZoneStagingDownloadStatus(long templateId, Long zoneId, Status... status);
55+
5356
TemplateDataStoreVO findByStoreTemplate(long storeId, long templateId);
5457

5558
TemplateDataStoreVO findByStoreTemplate(long storeId, long templateId, boolean lock);

engine/storage/src/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,23 @@ public TemplateDataStoreVO findByTemplateZoneDownloadStatus(long templateId, Lon
301301
return null;
302302
}
303303

304+
@Override
305+
public TemplateDataStoreVO findByTemplateZoneStagingDownloadStatus(long templateId, Long zoneId, Status... status) {
306+
// get all elgible image stores
307+
List<DataStore> cacheStores = _storeMgr.getImageCacheStores(new ZoneScope(zoneId));
308+
if (cacheStores != null) {
309+
for (DataStore store : cacheStores) {
310+
List<TemplateDataStoreVO> sRes = listByTemplateStoreDownloadStatus(templateId, store.getId(),
311+
status);
312+
if (sRes != null && sRes.size() > 0) {
313+
Collections.shuffle(sRes);
314+
return sRes.get(0);
315+
}
316+
}
317+
}
318+
return null;
319+
}
320+
304321
@Override
305322
public TemplateDataStoreVO findByStoreTemplate(long storeId, long templateId) {
306323
SearchCriteria<TemplateDataStoreVO> sc = storeTemplateSearch.create();

server/src/com/cloud/template/TemplateManagerImpl.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
import java.net.URISyntaxException;
2020
import java.util.ArrayList;
2121
import java.util.Date;
22+
import java.util.HashMap;
2223
import java.util.List;
2324
import java.util.Map;
24-
import java.util.HashMap;
2525
import java.util.UUID;
2626
import java.util.concurrent.ExecutionException;
2727
import java.util.concurrent.ExecutorService;
@@ -136,7 +136,6 @@
136136
import com.cloud.storage.StoragePoolStatus;
137137
import com.cloud.storage.TemplateProfile;
138138
import com.cloud.storage.Upload;
139-
import com.cloud.storage.VMTemplateDetailVO;
140139
import com.cloud.storage.VMTemplateHostVO;
141140
import com.cloud.storage.VMTemplateStoragePoolVO;
142141
import com.cloud.storage.VMTemplateStorageResourceAssoc;
@@ -1697,7 +1696,12 @@ public DataStore getImageStore(long zoneId, long tmpltId) {
16971696
public Long getTemplateSize(long templateId, long zoneId) {
16981697
TemplateDataStoreVO templateStoreRef = _tmplStoreDao.findByTemplateZoneDownloadStatus(templateId, zoneId, VMTemplateStorageResourceAssoc.Status.DOWNLOADED);
16991698
if (templateStoreRef == null) {
1700-
throw new CloudRuntimeException("Template " + templateId + " has not been completely downloaded to zone " + zoneId);
1699+
// check if it is ready on image cache stores
1700+
templateStoreRef = _tmplStoreDao.findByTemplateZoneStagingDownloadStatus(templateId, zoneId,
1701+
VMTemplateStorageResourceAssoc.Status.DOWNLOADED);
1702+
if (templateStoreRef == null) {
1703+
throw new CloudRuntimeException("Template " + templateId + " has not been completely downloaded to zone " + zoneId);
1704+
}
17011705
}
17021706
return templateStoreRef.getSize();
17031707

0 commit comments

Comments
 (0)