[ https://issues.apache.org/jira/browse/CLOUDSTACK-7362?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14100656#comment-14100656 ]
ASF subversion and git services commented on CLOUDSTACK-7362: ------------------------------------------------------------- Commit 838a1a8476cfb4308103b3797a281f843e208d38 in cloudstack's branch refs/heads/4.4 from [~weizhou] [ https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;h=838a1a8 ] CLOUDSTACK-7362: fix wrong uuid issue for resource tags > Resource tagging sometimes tags the wrong resource > -------------------------------------------------- > > Key: CLOUDSTACK-7362 > URL: https://issues.apache.org/jira/browse/CLOUDSTACK-7362 > Project: CloudStack > Issue Type: Bug > Security Level: Public(Anyone can view this level - this is the > default.) > Components: API > Affects Versions: 4.4.1 > Reporter: Stephen Hoogendijk > > This problem occurs when the uuid of the resource you are about to tag begins > with a number that actually corresponds to the id field of an entry in the > same resource type table. > Example: > We want to tag security group with UUID 6cb95038-6b76-4905-bdf5-85bf0e0eda51 > which has ID #5. But we also have a security group with ID #6 and UUID > d582e52c-f3c1-4e12-8e86-9dad0a5bd725. What happens is the following: > First it runs this method: > {code:java} > long id = getResourceId(resourceId, resourceType); > {code} > which actually tries to find the entity by its UUID and returns the resource > id (numeric). This process goes off without a hitch. > Next, it actually tries to find the UUID of the resource (because you can > also send in the internal (numeric) identifier): > {code:java} > String resourceUuid = getUuid(resourceId, resourceType) > {code} > Now this is when the magic starts happening, this is what's happening inside > the method: > {code:java} > entity = _entityMgr.findById(clazz, resourceId); > if (entity != null && entity instanceof Identity) { > return ((Identity)entity).getUuid(); > } > {code} > Because our resourceId starts with a numeric 6 the findById method somehow > returns the object that actually has the internal numeric identifier 6. Thus > it ends up tagging the wrong object. > This issue can be resolved by changing the getUUID() method to: > {code:java} > @Override > public String getUuid(String resourceId, ResourceObjectType resourceType) > { > Class<?> clazz = s_typeMap.get(resourceType); > Object entity = _entityMgr.findByUuid(clazz, resourceId); > if (entity != null) { > return ((Identity)entity).getUuid(); > } > entity = _entityMgr.findById(clazz, resourceId); > if (entity != null && entity instanceof Identity) { > return ((Identity)entity).getUuid(); > } > return resourceId; > } > {code} > What i would like to know is if this is a known issue or not? I couldn't find > a bug report here in Jira. If this is an unknown bug then i will go ahead and > submit the patch. -- This message was sent by Atlassian JIRA (v6.2#6252)