You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by pr...@apache.org on 2013/07/26 00:53:54 UTC
[1/2] git commit: updated refs/heads/4.2 to f59947c
Updated Branches:
refs/heads/4.2 35dcc4d6f -> f59947c32
CLOUDSTACK-3491 delete host resulting NPE; Exception caught while handling disconnect: java.lang.NullPointerException
Changes:
- During host deletion, host entry in databse gets removed prior to the disconnect task getting processed.
- This causes the disconnect task to get NPE while trying to do the host state transition
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/6a7d7f6d
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/6a7d7f6d
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/6a7d7f6d
Branch: refs/heads/4.2
Commit: 6a7d7f6d62add905c9dd2fb9aa86e73b7e1d03bf
Parents: 35dcc4d
Author: Prachi Damle <pr...@cloud.com>
Authored: Thu Jul 25 15:23:14 2013 -0700
Committer: Prachi Damle <pr...@cloud.com>
Committed: Thu Jul 25 15:25:08 2013 -0700
----------------------------------------------------------------------
.../src/com/cloud/host/dao/HostDaoImpl.java | 72 +++++++++++---------
1 file changed, 39 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6a7d7f6d/engine/schema/src/com/cloud/host/dao/HostDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/host/dao/HostDaoImpl.java b/engine/schema/src/com/cloud/host/dao/HostDaoImpl.java
index a84527e..dd26941 100755
--- a/engine/schema/src/com/cloud/host/dao/HostDaoImpl.java
+++ b/engine/schema/src/com/cloud/host/dao/HostDaoImpl.java
@@ -36,11 +36,8 @@ import org.springframework.stereotype.Component;
import com.cloud.cluster.agentlb.HostTransferMapVO;
import com.cloud.cluster.agentlb.dao.HostTransferMapDao;
-import com.cloud.cluster.agentlb.dao.HostTransferMapDaoImpl;
import com.cloud.dc.ClusterVO;
-import com.cloud.dc.HostPodVO;
import com.cloud.dc.dao.ClusterDao;
-import com.cloud.dc.dao.ClusterDaoImpl;
import com.cloud.host.Host;
import com.cloud.host.Host.Type;
import com.cloud.host.HostTagVO;
@@ -120,12 +117,12 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
protected GenericSearchBuilder<HostVO, Long> ClustersForHostsNotOwnedByAnyMSSearch;
protected GenericSearchBuilder<ClusterVO, Long> AllClustersSearch;
protected SearchBuilder<HostVO> HostsInClusterSearch;
-
+
protected Attribute _statusAttr;
protected Attribute _resourceStateAttr;
protected Attribute _msIdAttr;
protected Attribute _pingTimeAttr;
-
+
@Inject protected HostDetailsDao _detailsDao;
@Inject protected HostTagsDao _hostTagsDao;
@Inject protected HostTransferMapDao _hostTransferDao;
@@ -163,7 +160,7 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
TypeDcSearch.and("type", TypeDcSearch.entity().getType(), SearchCriteria.Op.EQ);
TypeDcSearch.and("dc", TypeDcSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
TypeDcSearch.done();
-
+
SecondaryStorageVMSearch = createSearchBuilder();
SecondaryStorageVMSearch.and("type", SecondaryStorageVMSearch.entity().getType(), SearchCriteria.Op.EQ);
SecondaryStorageVMSearch.and("dc", SecondaryStorageVMSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
@@ -236,7 +233,7 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
StatusSearch = createSearchBuilder();
StatusSearch.and("status", StatusSearch.entity().getStatus(), SearchCriteria.Op.IN);
StatusSearch.done();
-
+
ResourceStateSearch = createSearchBuilder();
ResourceStateSearch.and("resourceState", ResourceStateSearch.entity().getResourceState(), SearchCriteria.Op.IN);
ResourceStateSearch.done();
@@ -284,7 +281,7 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
ClusterManagedSearch.and("managed", ClusterManagedSearch.entity().getManagedState(), SearchCriteria.Op.EQ);
UnmanagedDirectConnectSearch.join("ClusterManagedSearch", ClusterManagedSearch, ClusterManagedSearch.entity().getId(), UnmanagedDirectConnectSearch.entity().getClusterId(), JoinType.INNER);
UnmanagedDirectConnectSearch.done();
-
+
DirectConnectSearch = createSearchBuilder();
DirectConnectSearch.and("resource", DirectConnectSearch.entity().getResource(), SearchCriteria.Op.NNULL);
@@ -334,7 +331,7 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
ManagedRoutingServersSearch.and("server", ManagedRoutingServersSearch.entity().getManagementServerId(), SearchCriteria.Op.NNULL);
ManagedRoutingServersSearch.and("type", ManagedRoutingServersSearch.entity().getType(), SearchCriteria.Op.EQ);
ManagedRoutingServersSearch.done();
-
+
RoutingSearch = createSearchBuilder();
RoutingSearch.and("type", RoutingSearch.entity().getType(), SearchCriteria.Op.EQ);
RoutingSearch.done();
@@ -582,20 +579,20 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
@Override @DB
public List<HostVO> findAndUpdateApplianceToLoad(long lastPingSecondsAfter, long managementServerId) {
Transaction txn = Transaction.currentTxn();
-
+
txn.start();
SearchCriteria<HostVO> sc = UnmanagedApplianceSearch.create();
sc.setParameters("lastPinged", lastPingSecondsAfter);
sc.setParameters("types", Type.ExternalDhcp, Type.ExternalFirewall, Type.ExternalLoadBalancer, Type.BaremetalDhcp, Type.BaremetalPxe, Type.TrafficMonitor, Type.L2Networking);
List<HostVO> hosts = lockRows(sc, null, true);
-
+
for (HostVO host : hosts) {
host.setManagementServerId(managementServerId);
update(host.getId(), host);
}
-
+
txn.commit();
-
+
return hosts;
}
@@ -622,7 +619,7 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
ub = getUpdateBuilder(host);
update(ub, sc, null);
}
-
+
@Override
public List<HostVO> listByHostTag(Host.Type type, Long clusterId, Long podId, long dcId, String hostTag) {
@@ -655,8 +652,8 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
return listBy(sc);
}
-
-
+
+
@Override
public List<HostVO> listAllUpAndEnabledNonHAHosts(Type type, Long clusterId, Long podId, long dcId, String haTag) {
SearchBuilder<HostTagVO> hostTagSearch = null;
@@ -666,42 +663,42 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
hostTagSearch.or("tagNull", hostTagSearch.entity().getTag(), SearchCriteria.Op.NULL);
hostTagSearch.cp();
}
-
+
SearchBuilder<HostVO> hostSearch = createSearchBuilder();
-
+
hostSearch.and("type", hostSearch.entity().getType(), SearchCriteria.Op.EQ);
hostSearch.and("clusterId", hostSearch.entity().getClusterId(), SearchCriteria.Op.EQ);
hostSearch.and("podId", hostSearch.entity().getPodId(), SearchCriteria.Op.EQ);
hostSearch.and("zoneId", hostSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
hostSearch.and("status", hostSearch.entity().getStatus(), SearchCriteria.Op.EQ);
hostSearch.and("resourceState", hostSearch.entity().getResourceState(), SearchCriteria.Op.EQ);
-
+
if (haTag != null && !haTag.isEmpty()) {
hostSearch.join("hostTagSearch", hostTagSearch, hostSearch.entity().getId(), hostTagSearch.entity().getHostId(), JoinBuilder.JoinType.LEFTOUTER);
}
SearchCriteria<HostVO> sc = hostSearch.create();
-
+
if (haTag != null && !haTag.isEmpty()) {
sc.setJoinParameters("hostTagSearch", "tag", haTag);
}
-
+
if (type != null) {
sc.setParameters("type", type);
}
-
+
if (clusterId != null) {
sc.setParameters("clusterId", clusterId);
}
-
+
if (podId != null) {
sc.setParameters("podId", podId);
}
-
+
sc.setParameters("zoneId", dcId);
sc.setParameters("status", Status.Up);
sc.setParameters("resourceState", ResourceState.Enabled);
-
+
return listBy(sc);
}
@@ -748,7 +745,7 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
}
return result;
}
-
+
@Override
public void saveDetails(HostVO host) {
Map<String, String> details = host.getDetails();
@@ -873,6 +870,15 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
@Override
public boolean updateState(Status oldStatus, Event event, Status newStatus, Host vo, Object data) {
HostVO host = findById(vo.getId());
+ if(host == null){
+ if(event == Event.Remove && newStatus == Status.Removed){
+ host = findByIdIncludingRemoved(vo.getId());
+ }
+ }
+
+ if(host == null){
+ return false;
+ }
long oldPingTime = host.getLastPinged();
SearchBuilder<HostVO> sb = createSearchBuilder();
@@ -941,10 +947,10 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
msg.append("; new update count = " + newUpdateCount + "]");
status_logger.debug(msg.toString());
}
-
+
return result > 0;
}
-
+
@Override
public boolean updateResourceState(ResourceState oldState, ResourceState.Event event, ResourceState newState, Host vo) {
HostVO host = (HostVO)vo;
@@ -952,17 +958,17 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
sb.and("resource_state", sb.entity().getResourceState(), SearchCriteria.Op.EQ);
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
sb.done();
-
+
SearchCriteria<HostVO> sc = sb.create();
sc.setParameters("resource_state", oldState);
sc.setParameters("id", host.getId());
-
+
UpdateBuilder ub = getUpdateBuilder(host);
ub.set(host, _resourceStateAttr, newState);
int result = update(ub, sc, null);
assert result <= 1 : "How can this update " + result + " rows? ";
-
+
if (state_logger.isDebugEnabled() && result == 0) {
HostVO ho = findById(host.getId());
assert ho != null : "How how how? : " + host.getId();
@@ -983,10 +989,10 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
msg.append("; new state = " + newState + "]");
state_logger.debug(msg.toString());
}
-
+
return result > 0;
}
-
+
@Override
public HostVO findByTypeNameAndZoneId(long zoneId, String name, Host.Type type) {
SearchCriteria<HostVO> sc = TypeNameZoneSearch.create();
[2/2] git commit: updated refs/heads/4.2 to f59947c
Posted by pr...@apache.org.
CLOUDSTACK-3821 RegisterTemplate URL validation issue
Changes:
- Added validation for the url path
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/f59947c3
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/f59947c3
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/f59947c3
Branch: refs/heads/4.2
Commit: f59947c322b8ae26f0df01027392835bc0655498
Parents: 6a7d7f6
Author: Prachi Damle <pr...@cloud.com>
Authored: Thu Jul 25 15:31:16 2013 -0700
Committer: Prachi Damle <pr...@cloud.com>
Committed: Thu Jul 25 15:31:16 2013 -0700
----------------------------------------------------------------------
.../template/HypervisorTemplateAdapter.java | 56 +++++++++++++++-----
1 file changed, 43 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/f59947c3/server/src/com/cloud/template/HypervisorTemplateAdapter.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/HypervisorTemplateAdapter.java b/server/src/com/cloud/template/HypervisorTemplateAdapter.java
index 6531838..4b3cade 100755
--- a/server/src/com/cloud/template/HypervisorTemplateAdapter.java
+++ b/server/src/com/cloud/template/HypervisorTemplateAdapter.java
@@ -16,6 +16,8 @@
// under the License.
package com.cloud.template;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.util.List;
import java.util.concurrent.ExecutionException;
@@ -111,7 +113,29 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase {
public TemplateProfile prepare(RegisterTemplateCmd cmd) throws ResourceAllocationException {
TemplateProfile profile = super.prepare(cmd);
String url = profile.getUrl();
+ String path = null;
+ try {
+ URL str = new URL(url);
+ path = str.getPath();
+ } catch (MalformedURLException ex) {
+ throw new InvalidParameterValueException("Please specify a valid URL. URL:" + url + " is invalid");
+ }
+
+ try {
+ checkFormat(cmd.getFormat(), url);
+ } catch (InvalidParameterValueException ex) {
+ checkFormat(cmd.getFormat(), path);
+ }
+ UriUtils.validateUrl(url);
+ profile.setUrl(url);
+ // Check that the resource limit for secondary storage won't be exceeded
+ _resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(cmd.getEntityOwnerId()),
+ ResourceType.secondary_storage, UriUtils.getRemoteSize(url));
+ return profile;
+ }
+
+ private void checkFormat(String format, String url) {
if((!url.toLowerCase().endsWith("vhd"))&&(!url.toLowerCase().endsWith("vhd.zip"))
&&(!url.toLowerCase().endsWith("vhd.bz2"))&&(!url.toLowerCase().endsWith("vhd.gz"))
&&(!url.toLowerCase().endsWith("qcow2"))&&(!url.toLowerCase().endsWith("qcow2.zip"))
@@ -121,25 +145,31 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase {
&&(!url.toLowerCase().endsWith("tar"))&&(!url.toLowerCase().endsWith("tar.zip"))
&&(!url.toLowerCase().endsWith("tar.bz2"))&&(!url.toLowerCase().endsWith("tar.gz"))
&&(!url.toLowerCase().endsWith("img"))&&(!url.toLowerCase().endsWith("raw"))){
- throw new InvalidParameterValueException("Please specify a valid "+ cmd.getFormat().toLowerCase());
+ throw new InvalidParameterValueException("Please specify a valid " + format.toLowerCase());
}
- if ((cmd.getFormat().equalsIgnoreCase("vhd") && (!url.toLowerCase().endsWith("vhd") && !url.toLowerCase().endsWith("vhd.zip") && !url.toLowerCase().endsWith("vhd.bz2") && !url.toLowerCase().endsWith("vhd.gz") ))
- || (cmd.getFormat().equalsIgnoreCase("qcow2") && (!url.toLowerCase().endsWith("qcow2") && !url.toLowerCase().endsWith("qcow2.zip") && !url.toLowerCase().endsWith("qcow2.bz2") && !url.toLowerCase().endsWith("qcow2.gz") ))
- || (cmd.getFormat().equalsIgnoreCase("ova") && (!url.toLowerCase().endsWith("ova") && !url.toLowerCase().endsWith("ova.zip") && !url.toLowerCase().endsWith("ova.bz2") && !url.toLowerCase().endsWith("ova.gz")))
- || (cmd.getFormat().equalsIgnoreCase("tar") && (!url.toLowerCase().endsWith("tar") && !url.toLowerCase().endsWith("tar.zip") && !url.toLowerCase().endsWith("tar.bz2") && !url.toLowerCase().endsWith("tar.gz")))
- || (cmd.getFormat().equalsIgnoreCase("raw") && (!url.toLowerCase().endsWith("img") && !url.toLowerCase().endsWith("raw")))) {
- throw new InvalidParameterValueException("Please specify a valid URL. URL:" + url + " is an invalid for the format " + cmd.getFormat().toLowerCase());
+ if ((format.equalsIgnoreCase("vhd") && (!url.toLowerCase().endsWith("vhd")
+ && !url.toLowerCase().endsWith("vhd.zip") && !url.toLowerCase().endsWith("vhd.bz2") && !url
+ .toLowerCase().endsWith("vhd.gz")))
+ || (format.equalsIgnoreCase("qcow2") && (!url.toLowerCase().endsWith("qcow2")
+ && !url.toLowerCase().endsWith("qcow2.zip") && !url.toLowerCase().endsWith("qcow2.bz2") && !url
+ .toLowerCase().endsWith("qcow2.gz")))
+ || (format.equalsIgnoreCase("ova") && (!url.toLowerCase().endsWith("ova")
+ && !url.toLowerCase().endsWith("ova.zip") && !url.toLowerCase().endsWith("ova.bz2") && !url
+ .toLowerCase().endsWith("ova.gz")))
+ || (format.equalsIgnoreCase("tar") && (!url.toLowerCase().endsWith("tar")
+ && !url.toLowerCase().endsWith("tar.zip") && !url.toLowerCase().endsWith("tar.bz2") && !url
+ .toLowerCase().endsWith("tar.gz")))
+ || (format.equalsIgnoreCase("raw") && (!url.toLowerCase().endsWith("img") && !url.toLowerCase()
+ .endsWith("raw")))) {
+ throw new InvalidParameterValueException("Please specify a valid URL. URL:" + url
+ + " is an invalid for the format " + format.toLowerCase());
}
- UriUtils.validateUrl(url);
- profile.setUrl(url);
- // Check that the resource limit for secondary storage won't be exceeded
- _resourceLimitMgr.checkResourceLimit(_accountMgr.getAccount(cmd.getEntityOwnerId()),
- ResourceType.secondary_storage, UriUtils.getRemoteSize(url));
- return profile;
+
}
+
@Override
public VMTemplateVO create(TemplateProfile profile) {
// persist entry in vm_template, vm_template_details and template_zone_ref tables, not that entry at template_store_ref is not created here, and created in createTemplateAsync.