You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bf...@apache.org on 2013/10/16 23:45:29 UTC

[2/8] git commit: updated refs/heads/ui-restyle to 116e06e

CLOUDSTACK-4874: added resource tags to the Service offering object. Tags can be created by using createTag API command; you can list service offerings by tags when pass "resourceTag" parameter to the listServiceOfferings call


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/818e6f98
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/818e6f98
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/818e6f98

Branch: refs/heads/ui-restyle
Commit: 818e6f98fd6bd3732c5867d8b2ae85365f374b95
Parents: b05f19e
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Tue Oct 15 16:57:53 2013 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Tue Oct 15 17:08:55 2013 -0700

----------------------------------------------------------------------
 api/src/com/cloud/server/ResourceTag.java       |  3 +-
 .../org/apache/cloudstack/api/ApiConstants.java |  1 +
 .../user/offering/ListServiceOfferingsCmd.java  | 31 +++++++++++++++-
 .../api/response/ServiceOfferingResponse.java   | 21 ++++++++---
 server/src/com/cloud/api/ApiDBUtils.java        |  4 ++
 .../com/cloud/api/query/QueryManagerImpl.java   | 39 ++++++++++++++++++--
 .../cloud/api/query/dao/ResourceTagJoinDao.java |  3 ++
 .../api/query/dao/ResourceTagJoinDaoImpl.java   | 25 ++++++++++---
 .../query/dao/ServiceOfferingJoinDaoImpl.java   | 18 ++++++---
 .../cloud/tags/TaggedResourceManagerImpl.java   | 14 ++++---
 .../cloud/uuididentity/dao/IdentityDaoImpl.java |  8 +++-
 11 files changed, 137 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/818e6f98/api/src/com/cloud/server/ResourceTag.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/server/ResourceTag.java b/api/src/com/cloud/server/ResourceTag.java
index 1c16f25..9e166ab 100644
--- a/api/src/com/cloud/server/ResourceTag.java
+++ b/api/src/com/cloud/server/ResourceTag.java
@@ -41,7 +41,8 @@ public interface ResourceTag extends ControlledEntity, Identity, InternalIdentit
         StaticRoute,
         VMSnapshot,
         RemoteAccessVpn,
-        Zone
+        Zone,
+        ServiceOffering
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/818e6f98/api/src/org/apache/cloudstack/api/ApiConstants.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/ApiConstants.java b/api/src/org/apache/cloudstack/api/ApiConstants.java
index f85784b..62eed09 100755
--- a/api/src/org/apache/cloudstack/api/ApiConstants.java
+++ b/api/src/org/apache/cloudstack/api/ApiConstants.java
@@ -518,6 +518,7 @@ public class ApiConstants {
     public static final String ROUTING = "isrouting";
     public static final String MAX_CONNECTIONS = "maxconnections";
     public static final String SERVICE_STATE = "servicestate";
+    public static final String RESOURCE_TAG = "resourcetag";
     public enum HostDetails {
         all, capacity, events, stats, min;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/818e6f98/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java b/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java
index ca16cdc..06aad9d 100644
--- a/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/offering/ListServiceOfferingsCmd.java
@@ -16,10 +16,16 @@
 // under the License.
 package org.apache.cloudstack.api.command.user.offering;
 
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
 import org.apache.cloudstack.api.APICommand;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.BaseListCmd;
 import org.apache.cloudstack.api.Parameter;
+import org.apache.cloudstack.api.BaseCmd.CommandType;
 import org.apache.cloudstack.api.response.DomainResponse;
 import org.apache.cloudstack.api.response.ListResponse;
 import org.apache.cloudstack.api.response.ServiceOfferingResponse;
@@ -27,6 +33,8 @@ import org.apache.cloudstack.api.response.UserVmResponse;
 
 import org.apache.log4j.Logger;
 
+import com.cloud.exception.InvalidParameterValueException;
+
 @APICommand(name = "listServiceOfferings", description="Lists all available service offerings.", responseObject=ServiceOfferingResponse.class)
 public class ListServiceOfferingsCmd extends BaseListCmd {
     public static final Logger s_logger = Logger.getLogger(ListServiceOfferingsCmd.class.getName());
@@ -57,6 +65,9 @@ public class ListServiceOfferingsCmd extends BaseListCmd {
 
     @Parameter(name=ApiConstants.SYSTEM_VM_TYPE, type=CommandType.STRING, description="the system VM type. Possible types are \"consoleproxy\", \"secondarystoragevm\" or \"domainrouter\".")
     private String systemVmType;
+    
+    @Parameter(name = ApiConstants.RESOURCE_TAG, type = CommandType.MAP, description = "List service offerings by resource tags (key/value pairs)", since="4.3")
+    private Map resourceTag;
 
 
     /////////////////////////////////////////////////////
@@ -86,6 +97,25 @@ public class ListServiceOfferingsCmd extends BaseListCmd {
     public String getSystemVmType(){
         return systemVmType;
     }
+    
+    public Map<String, String> getResourceTags() {
+        Map<String, String> tagsMap = null;
+        if (resourceTag != null && !resourceTag.isEmpty()) {
+            tagsMap = new HashMap<String, String>();
+            Collection<?> servicesCollection = resourceTag.values();
+            Iterator<?> iter = servicesCollection.iterator();
+            while (iter.hasNext()) {
+                HashMap<String, String> services = (HashMap<String, String>) iter.next();
+                String key = services.get("key");
+                String value = services.get("value");
+                if (value == null) {
+                    throw new InvalidParameterValueException("No value is passed in for key " + key);
+                }
+                tagsMap.put(key, value);
+            }
+        }
+        return tagsMap;
+    }
 
     /////////////////////////////////////////////////////
     /////////////// API Implementation///////////////////
@@ -98,7 +128,6 @@ public class ListServiceOfferingsCmd extends BaseListCmd {
 
     @Override
     public void execute(){
-
         ListResponse<ServiceOfferingResponse> response = _queryService.searchForServiceOfferings(this);
         response.setResponseName(getCommandName());
         this.setResponseObject(response);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/818e6f98/api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java b/api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java
index 5c5b369..d683840 100644
--- a/api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/ServiceOfferingResponse.java
@@ -17,12 +17,9 @@
 package org.apache.cloudstack.api.response;
 
 import java.util.Date;
-
-
-import com.google.gson.annotations.SerializedName;
-
+import java.util.LinkedHashSet;
 import java.util.Map;
-
+import java.util.Set;
 
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.BaseResponse;
@@ -30,6 +27,7 @@ import org.apache.cloudstack.api.EntityReference;
 
 import com.cloud.offering.ServiceOffering;
 import com.cloud.serializer.Param;
+import com.google.gson.annotations.SerializedName;
 
 @EntityReference(value = ServiceOffering.class)
 public class ServiceOfferingResponse extends BaseResponse {
@@ -108,6 +106,15 @@ public class ServiceOfferingResponse extends BaseResponse {
     @SerializedName(ApiConstants.SERVICE_OFFERING_DETAILS)
     @Param(description = "additional key/value details tied with this service offering", since = "4.2.0")
     private Map<String, String> details;
+    
+    @SerializedName(ApiConstants.RESOURCE_TAG)  @Param(description="the list of resource tags associated with service offering." +
+    		" The resource tags are not used for Volume/VM placement on the specific host.",
+            responseObject = ResourceTagResponse.class, since="4.3")
+    private Set<ResourceTagResponse> resourceTags;
+    
+    public ServiceOfferingResponse(){
+        resourceTags = new LinkedHashSet<ResourceTagResponse>();
+    }
 
     public String getId() {
         return id;
@@ -287,4 +294,8 @@ public class ServiceOfferingResponse extends BaseResponse {
     public void setDetails(Map<String, String> details) {
         this.details = details;
     }
+
+    public void addTag(ResourceTagResponse tag){
+        this.resourceTags.add(tag);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/818e6f98/server/src/com/cloud/api/ApiDBUtils.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java
index 6539289..fa397ed 100755
--- a/server/src/com/cloud/api/ApiDBUtils.java
+++ b/server/src/com/cloud/api/ApiDBUtils.java
@@ -1688,4 +1688,8 @@ public class ApiDBUtils {
     public static boolean isAdmin(Account account) {
         return _accountService.isAdmin(account.getType());
     }
+    
+    public static List<ResourceTagJoinVO> listResourceTagViewByResourceUUID(String resourceUUID, TaggedResourceType resourceType){
+        return  _tagJoinDao.listBy(resourceUUID, resourceType);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/818e6f98/server/src/com/cloud/api/query/QueryManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java
index e65a8b8..b464e9e 100644
--- a/server/src/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/com/cloud/api/query/QueryManagerImpl.java
@@ -26,7 +26,6 @@ import java.util.Set;
 import javax.ejb.Local;
 import javax.inject.Inject;
 
-import com.cloud.network.dao.NetworkDetailsDao;
 import org.apache.cloudstack.acl.ControlledEntity.ACLType;
 import org.apache.cloudstack.affinity.AffinityGroupDomainMapVO;
 import org.apache.cloudstack.affinity.AffinityGroupResponse;
@@ -142,6 +141,7 @@ import com.cloud.exception.PermissionDeniedException;
 import com.cloud.exception.UnsupportedServiceException;
 import com.cloud.ha.HighAvailabilityManager;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.network.dao.NetworkDetailsDao;
 import com.cloud.network.security.SecurityGroupVMMapVO;
 import com.cloud.network.security.dao.SecurityGroupVMMapDao;
 import com.cloud.org.Grouping;
@@ -168,6 +168,8 @@ import com.cloud.storage.VMTemplateVO;
 import com.cloud.storage.Volume;
 import com.cloud.storage.dao.VMTemplateDao;
 import com.cloud.storage.dao.VolumeDetailsDao;
+import com.cloud.tags.ResourceTagVO;
+import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.template.VirtualMachineTemplate.TemplateFilter;
 import com.cloud.user.Account;
 import com.cloud.user.AccountManager;
@@ -179,6 +181,7 @@ import com.cloud.utils.Pair;
 import com.cloud.utils.Ternary;
 import com.cloud.utils.component.ManagerBase;
 import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.JoinBuilder;
 import com.cloud.utils.db.SearchBuilder;
 import com.cloud.utils.db.SearchCriteria;
 import com.cloud.utils.db.SearchCriteria.Func;
@@ -335,6 +338,9 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
 
     @Inject
     NetworkDetailsDao _networkDetailsDao;
+    
+    @Inject
+    ResourceTagDao _resourceTagDao;
 
     /*
      * (non-Javadoc)
@@ -2375,8 +2381,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
         isAscending = (isAscending == null ? true : isAscending);
         Filter searchFilter = new Filter(ServiceOfferingJoinVO.class, "sortKey", isAscending, cmd.getStartIndex(),
                 cmd.getPageSizeVal());
-        SearchCriteria<ServiceOfferingJoinVO> sc = _srvOfferingJoinDao.createSearchCriteria();
-
+        
         Account caller = CallContext.current().getCallingAccount();
         Object name = cmd.getServiceOfferingName();
         Object id = cmd.getId();
@@ -2385,6 +2390,22 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
         Long domainId = cmd.getDomainId();
         Boolean isSystem = cmd.getIsSystem();
         String vmTypeStr = cmd.getSystemVmType();
+        Map<String, String> resourceTags = cmd.getResourceTags();
+        
+        SearchBuilder<ServiceOfferingJoinVO> sb = _srvOfferingJoinDao.createSearchBuilder();
+        if (resourceTags != null && !resourceTags.isEmpty()) {
+            SearchBuilder<ResourceTagVO> tagSearch = _resourceTagDao.createSearchBuilder();
+            for (int count=0; count < resourceTags.size(); count++) {
+                tagSearch.or().op("key" + String.valueOf(count), tagSearch.entity().getKey(), SearchCriteria.Op.EQ);
+                tagSearch.and("value" + String.valueOf(count), tagSearch.entity().getValue(), SearchCriteria.Op.EQ);
+                tagSearch.cp();
+            }
+            tagSearch.and("resourceType", tagSearch.entity().getResourceType(), SearchCriteria.Op.EQ);
+            sb.groupBy(sb.entity().getId());
+            sb.join("tagSearch", tagSearch, sb.entity().getId(), tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER);
+        }
+        
+        SearchCriteria<ServiceOfferingJoinVO> sc = sb.create();
 
         if (caller.getType() != Account.ACCOUNT_TYPE_ADMIN && isSystem) {
             throw new InvalidParameterValueException("Only ROOT admins can access system's offering");
@@ -2483,9 +2504,19 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
         if (vmTypeStr != null) {
             sc.addAnd("vm_type", SearchCriteria.Op.EQ, vmTypeStr);
         }
+        
+        
+        if (resourceTags != null && !resourceTags.isEmpty()) {
+            int count = 0;
+            sc.setJoinParameters("tagSearch", "resourceType", TaggedResourceType.ServiceOffering.toString());
+            for (String key : resourceTags.keySet()) {
+                sc.setJoinParameters("tagSearch", "key" + String.valueOf(count), key);
+                sc.setJoinParameters("tagSearch", "value" + String.valueOf(count), resourceTags.get(key));
+                count++;
+            }
+        }
 
         return _srvOfferingJoinDao.searchAndCount(sc, searchFilter);
-
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/818e6f98/server/src/com/cloud/api/query/dao/ResourceTagJoinDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/ResourceTagJoinDao.java b/server/src/com/cloud/api/query/dao/ResourceTagJoinDao.java
index 57fc130..627033c 100644
--- a/server/src/com/cloud/api/query/dao/ResourceTagJoinDao.java
+++ b/server/src/com/cloud/api/query/dao/ResourceTagJoinDao.java
@@ -22,6 +22,7 @@ import org.apache.cloudstack.api.response.ResourceTagResponse;
 
 import com.cloud.api.query.vo.ResourceTagJoinVO;
 import com.cloud.server.ResourceTag;
+import com.cloud.server.ResourceTag.TaggedResourceType;
 import com.cloud.utils.db.GenericDao;
 
 public interface ResourceTagJoinDao extends GenericDao<ResourceTagJoinVO, Long> {
@@ -31,4 +32,6 @@ public interface ResourceTagJoinDao extends GenericDao<ResourceTagJoinVO, Long>
     ResourceTagJoinVO newResourceTagView(ResourceTag vr);
 
     List<ResourceTagJoinVO> searchByIds(Long... ids);
+    
+    List<ResourceTagJoinVO> listBy(String resourceUUID, TaggedResourceType resourceType);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/818e6f98/server/src/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java
index 06821db..f0ddaa6 100644
--- a/server/src/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/ResourceTagJoinDaoImpl.java
@@ -24,16 +24,17 @@ import javax.inject.Inject;
 
 import org.apache.cloudstack.api.response.ResourceTagResponse;
 import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
-
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
 import com.cloud.api.ApiResponseHelper;
 import com.cloud.api.query.vo.ResourceTagJoinVO;
 import com.cloud.server.ResourceTag;
+import com.cloud.server.ResourceTag.TaggedResourceType;
 import com.cloud.utils.db.GenericDaoBase;
 import com.cloud.utils.db.SearchBuilder;
 import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.SearchCriteria.Op;
 
 @Component
 @Local(value={ResourceTagJoinDao.class})
@@ -46,6 +47,9 @@ public class ResourceTagJoinDaoImpl extends GenericDaoBase<ResourceTagJoinVO, Lo
     private final SearchBuilder<ResourceTagJoinVO> tagSearch;
 
     private final SearchBuilder<ResourceTagJoinVO> tagIdSearch;
+    
+    private final SearchBuilder<ResourceTagJoinVO> AllFieldsSearch;
+
 
     protected ResourceTagJoinDaoImpl() {
 
@@ -58,12 +62,14 @@ public class ResourceTagJoinDaoImpl extends GenericDaoBase<ResourceTagJoinVO, Lo
         tagIdSearch.done();
 
         this._count = "select count(distinct id) from resource_tag_view WHERE ";
+        
+        AllFieldsSearch = createSearchBuilder();
+        AllFieldsSearch.and("resourceId", AllFieldsSearch.entity().getResourceId(), Op.EQ);
+        AllFieldsSearch.and("uuid", AllFieldsSearch.entity().getResourceUuid(), Op.EQ);
+        AllFieldsSearch.and("resourceType", AllFieldsSearch.entity().getResourceType(), Op.EQ);
+        AllFieldsSearch.done();
     }
 
-
-
-
-
     @Override
     public ResourceTagResponse newResourceTagResponse(ResourceTagJoinVO resourceTag, boolean keyValueOnly) {
         ResourceTagResponse response = new ResourceTagResponse();
@@ -86,6 +92,15 @@ public class ResourceTagJoinDaoImpl extends GenericDaoBase<ResourceTagJoinVO, Lo
 
         return response;
     }
+    
+    
+    @Override
+    public List<ResourceTagJoinVO> listBy(String resourceUUID, TaggedResourceType resourceType) {
+        SearchCriteria<ResourceTagJoinVO> sc = AllFieldsSearch.create();
+        sc.setParameters("uuid", resourceUUID);
+        sc.setParameters("resourceType", resourceType);
+        return listBy(sc);
+    }
 
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/818e6f98/server/src/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java b/server/src/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java
index 945e67b..8c32be3 100644
--- a/server/src/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/ServiceOfferingJoinDaoImpl.java
@@ -17,22 +17,22 @@
 package com.cloud.api.query.dao;
 
 import java.util.List;
-import java.util.Map;
 
 import javax.ejb.Local;
 
+import org.apache.cloudstack.api.response.ResourceTagResponse;
+import org.apache.cloudstack.api.response.ServiceOfferingResponse;
 import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
 
 import com.cloud.api.ApiDBUtils;
+import com.cloud.api.query.vo.ResourceTagJoinVO;
 import com.cloud.api.query.vo.ServiceOfferingJoinVO;
-import org.apache.cloudstack.api.response.ServiceOfferingResponse;
-
 import com.cloud.offering.ServiceOffering;
-import com.cloud.offering.NetworkOffering.Detail;
+import com.cloud.server.ResourceTag.TaggedResourceType;
 import com.cloud.utils.db.GenericDaoBase;
 import com.cloud.utils.db.SearchBuilder;
 import com.cloud.utils.db.SearchCriteria;
-import org.springframework.stereotype.Component;
 
 @Component
 @Local(value={ServiceOfferingJoinDao.class})
@@ -48,7 +48,7 @@ public class ServiceOfferingJoinDaoImpl extends GenericDaoBase<ServiceOfferingJo
         sofIdSearch.and("id", sofIdSearch.entity().getId(), SearchCriteria.Op.EQ);
         sofIdSearch.done();
 
-        this._count = "select count(distinct id) from service_offering_view WHERE ";
+        this._count = "select count(distinct service_offering_view.id) from service_offering_view WHERE ";
     }
 
 
@@ -84,6 +84,12 @@ public class ServiceOfferingJoinDaoImpl extends GenericDaoBase<ServiceOfferingJo
         offeringResponse.setIopsWriteRate(offering.getIopsWriteRate());
         offeringResponse.setDetails(ApiDBUtils.getServiceOfferingDetails(offering.getId()));
         offeringResponse.setObjectName("serviceoffering");
+        
+        // update tag information
+        List<ResourceTagJoinVO> resourceTags = ApiDBUtils.listResourceTagViewByResourceUUID(offering.getUuid(), TaggedResourceType.ServiceOffering);
+        for (ResourceTagJoinVO resourceTag : resourceTags) {            
+            ResourceTagResponse tagResponse = ApiDBUtils.newResourceTagResponse(resourceTag, false);
+            offeringResponse.addTag(tagResponse);        }
 
         return offeringResponse;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/818e6f98/server/src/com/cloud/tags/TaggedResourceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java
index 795a970..79aba63 100644
--- a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java
+++ b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java
@@ -25,16 +25,12 @@ import javax.ejb.Local;
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
 
-import com.cloud.dc.dao.DataCenterDao;
-import com.cloud.vm.dao.NicDao;
-import com.cloud.network.vpc.NetworkACLItemDao;
-
+import org.apache.cloudstack.context.CallContext;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
-import org.apache.cloudstack.context.CallContext;
-
 import com.cloud.api.query.dao.ResourceTagJoinDao;
+import com.cloud.dc.dao.DataCenterDao;
 import com.cloud.domain.Domain;
 import com.cloud.event.ActionEvent;
 import com.cloud.event.EventTypes;
@@ -47,12 +43,14 @@ import com.cloud.network.dao.NetworkDao;
 import com.cloud.network.dao.RemoteAccessVpnDao;
 import com.cloud.network.rules.dao.PortForwardingRulesDao;
 import com.cloud.network.security.dao.SecurityGroupDao;
+import com.cloud.network.vpc.NetworkACLItemDao;
 import com.cloud.network.vpc.dao.StaticRouteDao;
 import com.cloud.network.vpc.dao.VpcDao;
 import com.cloud.projects.dao.ProjectDao;
 import com.cloud.server.ResourceTag;
 import com.cloud.server.ResourceTag.TaggedResourceType;
 import com.cloud.server.TaggedResourceService;
+import com.cloud.service.dao.ServiceOfferingDao;
 import com.cloud.storage.dao.SnapshotDao;
 import com.cloud.storage.dao.VMTemplateDao;
 import com.cloud.storage.dao.VolumeDao;
@@ -70,6 +68,7 @@ import com.cloud.utils.db.SearchCriteria;
 import com.cloud.utils.db.Transaction;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.uuididentity.dao.IdentityDao;
+import com.cloud.vm.dao.NicDao;
 import com.cloud.vm.dao.UserVmDao;
 import com.cloud.vm.snapshot.dao.VMSnapshotDao;
 
@@ -128,6 +127,8 @@ public class TaggedResourceManagerImpl extends ManagerBase implements TaggedReso
     NetworkACLItemDao _networkACLItemDao;
     @Inject
     DataCenterDao _dataCenterDao;
+    @Inject
+    ServiceOfferingDao _serviceOffDao;
 
 
     @Override
@@ -151,6 +152,7 @@ public class TaggedResourceManagerImpl extends ManagerBase implements TaggedReso
         _daoMap.put(TaggedResourceType.VMSnapshot, _vmSnapshotDao);
         _daoMap.put(TaggedResourceType.RemoteAccessVpn, _vpnDao);
         _daoMap.put(TaggedResourceType.Zone, _dataCenterDao);
+        _daoMap.put(TaggedResourceType.ServiceOffering, _serviceOffDao);
 
         return true;
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/818e6f98/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java b/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java
index c6fd8c1..18b7d8b 100644
--- a/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java
+++ b/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java
@@ -110,7 +110,9 @@ public class IdentityDaoImpl extends GenericDaoBase<IdentityVO, Long> implements
                 pstmt.setLong(1, identityId);
                 ResultSet rs = pstmt.executeQuery();
                 if (rs.next()) {
-                    domainId = rs.getLong(1);
+                    if (rs.getLong(1) != 0) {
+                        domainId = rs.getLong(1);
+                    }
                 }
             } catch (SQLException e) {
             }
@@ -125,7 +127,9 @@ public class IdentityDaoImpl extends GenericDaoBase<IdentityVO, Long> implements
                 pstmt.setLong(1, identityId);
                 ResultSet rs = pstmt.executeQuery();
                 if (rs.next()) {
-                    accountId = rs.getLong(1);
+                    if (rs.getLong(1) != 0) {
+                        accountId = rs.getLong(1);
+                    }
                 }
             } catch (SQLException e) {
             }