SWIFT: fixed error handling

This commit is contained in:
anthony 2011-12-13 16:47:52 -08:00
parent a7b9f00a71
commit 2413eae6a5
4 changed files with 49 additions and 44 deletions

View File

@ -235,12 +235,23 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
command.add("cd " + lDir + ";/usr/bin/python /usr/local/cloud/systemvm/scripts/storage/secondary/swift -A "
+ swift.getUrl() + " -U " + swift.getAccount() + ":" + swift.getUserName() + " -K " + swift.getKey()
+ " upload " + container + " " + lFilename);
String result = command.execute();
OutputInterpreter.AllLinesParser parser = new OutputInterpreter.AllLinesParser();
String result = command.execute(parser);
if (result != null) {
String errMsg = "swiftUpload failed , err=" + result;
s_logger.warn(errMsg);
return errMsg;
}
if (parser.getLines() != null) {
String[] lines = parser.getLines().split("\\n");
for (String line : lines) {
if (line.contains("Errno")) {
String errMsg = "swiftUpload failed , err=" + lines.toString();
s_logger.warn(errMsg);
return errMsg;
}
}
}
return null;
}
@ -259,7 +270,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
String errMsg = "swiftList failed , err=" + result;
s_logger.warn(errMsg);
} else {
String errMsg = "swiftList, no lines returns";
String errMsg = "swiftList failed, no lines returns";
s_logger.warn(errMsg);
}
}
@ -272,12 +283,23 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
command.add("/usr/bin/python /usr/local/cloud/systemvm/scripts/storage/secondary/swift -A "
+ swift.getUrl() + " -U " + swift.getAccount() + ":" + swift.getUserName() + " -K " + swift.getKey()
+ " delete " + container + " " + rFilename);
String result = command.execute();
OutputInterpreter.AllLinesParser parser = new OutputInterpreter.AllLinesParser();
String result = command.execute(parser);
if (result != null) {
String errMsg = "swiftDelete failed , err=" + result;
s_logger.warn(errMsg);
return errMsg;
}
if (parser.getLines() != null) {
String[] lines = parser.getLines().split("\\n");
for (String line : lines) {
if (line.contains("Errno")) {
String errMsg = "swiftDelete failed , err=" + lines.toString();
s_logger.warn(errMsg);
return errMsg;
}
}
}
return null;
}

View File

@ -62,7 +62,6 @@ import com.cloud.storage.SwiftVO;
import com.cloud.storage.VMTemplateHostVO;
import com.cloud.storage.VMTemplateStorageResourceAssoc;
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
import com.cloud.storage.VMTemplateSwiftVO;
import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.VMTemplateZoneVO;
import com.cloud.storage.dao.StoragePoolHostDao;
@ -141,6 +140,7 @@ public class DownloadMonitorImpl implements DownloadMonitor {
private HostDao _hostDao;
@Inject
private ResourceManager _resourceMgr;
@Inject
private SwiftDao _swiftDao;
private String _name;
@ -501,18 +501,12 @@ public class DownloadMonitorImpl implements DownloadMonitor {
@Override
public void handleTemplateSync(Long dcId) {
if ( dcId != null ) {
List<HostVO> ssHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dcId);
for ( HostVO ssHost : ssHosts ) {
if (dcId != null) {
List<HostVO> ssHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dcId);
for (HostVO ssHost : ssHosts) {
handleTemplateSync(ssHost);
}
}
if (_swiftMgr.isSwiftEnabled()) {
List<SwiftVO> swifts = _swiftDao.listAll();
for (SwiftVO swift : swifts) {
handleTemplateSync(swift);
}
}
}
private Map<String, TemplateInfo> listTemplate(HostVO ssHost) {
@ -547,37 +541,6 @@ public class DownloadMonitorImpl implements DownloadMonitor {
return null;
}
public void handleTemplateSync(SwiftVO swift) {
if (swift == null) {
s_logger.warn("Huh? swift is null");
return;
}
Map<String, TemplateInfo> templateInfos = listTemplate(swift);
if (templateInfos == null) {
return;
}
List<VMTemplateVO> allTemplates = _templateDao.listAll();
for (VMTemplateVO tmplt : allTemplates) {
String uniqueName = tmplt.getUniqueName();
VMTemplateSwiftVO tmpltSwift = _vmTemplateSwiftlDao.findBySwiftTemplate(swift.getId(), tmplt.getId());
if (templateInfos.containsKey(uniqueName)) {
TemplateInfo tmpltInfo = templateInfos.remove(uniqueName);
if (tmpltSwift != null) {
s_logger.info("Template Sync found " + uniqueName + " already in the template swift table");
continue;
} else {
tmpltSwift = new VMTemplateSwiftVO(swift.getId(), tmplt.getId(), new Date(), tmpltInfo.getSize(), tmpltInfo.getPhysicalSize());
_vmTemplateSwiftlDao.persist(tmpltSwift);
s_logger.info("Template Sync added " + uniqueName + " to the template swift table");
}
}
}
for (TemplateInfo tmpltInfo : templateInfos.values()) {
s_logger.warn("Template Sync found template " + tmpltInfo.getInstallPath() + " in Swift description, but not in template table, please");
}
}
@Override
public void handleTemplateSync(HostVO ssHost) {
if (ssHost == null) {
@ -590,6 +553,7 @@ public class DownloadMonitorImpl implements DownloadMonitor {
s_logger.warn("Huh? Agent id " + sserverId + " is not secondary storage host");
return;
}
Map<String, TemplateInfo> templateInfos = listTemplate(ssHost);
if (templateInfos == null) {
return;
@ -715,6 +679,11 @@ public class DownloadMonitorImpl implements DownloadMonitor {
}
}
if (availHypers.contains(tmplt.getHypervisorType())) {
if (_swiftMgr.isSwiftEnabled()) {
if (_swiftMgr.isTemplateInstalled(tmplt.getId())) {
continue;
}
}
s_logger.debug("Template " + tmplt.getName() + " needs to be downloaded to " + ssHost.getName());
downloadTemplateToStorage(tmplt, ssHost);
}

View File

@ -40,4 +40,6 @@ public interface SwiftManager extends Manager {
List<? extends Swift> addSwift(AddSwiftCmd cmd) throws DiscoveryException;
boolean isSwiftEnabled();
public boolean isTemplateInstalled(Long templateId);
}

View File

@ -40,9 +40,13 @@ import com.cloud.configuration.dao.ConfigurationDao;
import com.cloud.exception.DiscoveryException;
import com.cloud.storage.Swift;
import com.cloud.storage.SwiftVO;
import com.cloud.storage.VMTemplateSwiftVO;
import com.cloud.storage.dao.SwiftDao;
import com.cloud.storage.dao.VMTemplateSwiftDao;
import com.cloud.utils.component.Inject;
import com.cloud.utils.db.SearchCriteria.Op;
import com.cloud.utils.db.SearchCriteria2;
import com.cloud.utils.db.SearchCriteriaService;
@ -79,6 +83,14 @@ public class SwiftManagerImpl implements SwiftManager {
return false;
}
@Override
public boolean isTemplateInstalled(Long templateId) {
SearchCriteriaService<VMTemplateSwiftVO, VMTemplateSwiftVO> sc = SearchCriteria2.create(VMTemplateSwiftVO.class);
sc.addAnd(sc.getEntity().getTemplateId(), Op.EQ, templateId);
return !sc.list().isEmpty();
}
@Override
public List<? extends Swift> addSwift(AddSwiftCmd cmd) throws DiscoveryException {
if (!isSwiftEnabled()) {