[ 
https://issues.apache.org/jira/browse/CLOUDSTACK-2126?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13637564#comment-13637564
 ] 

ASF subversion and git services commented on CLOUDSTACK-2126:
-------------------------------------------------------------

Commit 23dd00b04a92926c937adc51f3af24c36a91d1b0 in branch 
refs/heads/marvin_refactor from [~tsp]
[ https://git-wip-us.apache.org/repos/asf?p=cloudstack.git;h=23dd00b ]

Working around CLOUDSTACK-2126

Marvin deserializes by matching attributes of the response with the
responseObject expected. In case the object's attributes don't mirror
the response Marvin assumes the response is invalid and can't return a
proper first class entity. This makes it difficult for tests to
reference the object's attributes in a sensible way.

Signed-off-by: Prasanna Santhanam <[email protected]>

                
> Response objects of some entities contain job related information
> -----------------------------------------------------------------
>
>                 Key: CLOUDSTACK-2126
>                 URL: https://issues.apache.org/jira/browse/CLOUDSTACK-2126
>             Project: CloudStack
>          Issue Type: Bug
>      Security Level: Public(Anyone can view this level - this is the 
> default.) 
>          Components: API
>    Affects Versions: 4.1.0, 4.2.0
>            Reporter: Prasanna Santhanam
>            Priority: Critical
>             Fix For: 4.1.0, 4.2.0
>
>
> Response objects of various entities seem to have introduced jobstatus, 
> jobid, jobuuid into their responses. These belong to the 
> queryAsyncJobResponse and not the response of the entity itself:
> Eg: deployVirtualMachineResponse:
> https://gist.github.com/vogxn/5429546
> Snippet:
> {
>     "queryasyncjobresultresponse": {
>         "accountid": "50b6647e-a8ca-11e2-8a60-0c06fde16e85",
>         "userid": "50b68bde-a8ca-11e2-8a60-0c06fde16e85",
>         "cmd": "org.apache.cloudstack.api.command.user.vm.DestroyVMCmd",
>         "jobstatus": 1,
>         "jobprocstatus": 0,
>         "jobresultcode": 0,
>         "jobresulttype": "object",
>         "jobresult": {
>             "virtualmachine": {
>                 "id": "649663f7-3c8d-4e0d-b693-4b1ea6085a84",
>                 "name": "649663f7-3c8d-4e0d-b693-4b1ea6085a84",
>                 "account": "QX7KKV",
>                 "domainid": "50b6593e-a8ca-11e2-8a60-0c06fde16e85",
>                 "domain": "ROOT",
>                 "created": "2013-04-21T18:36:58+0530",
>                 "state": "Destroyed",
>                 "haenable": false,
>                 "zoneid": "6e301be1-8010-4b57-9638-c90761e40dc9",
>                 "zonename": "Sandbox-simulator",
>                 "templateid": "570c6828-a8ca-11e2-8a60-0c06fde16e85",
>                 "templatename": "CentOS 5.3(64-bit) no GUI (Simulator)",
>                 "templatedisplaytext": "CentOS 5.3(64-bit) no GUI 
> (Simulator)",
>                 "passwordenabled": false,
>                 "serviceofferingid": "b1ab015a-2e8e-4f42-a6c2-f652d097fbf6",
>                 "serviceofferingname": "SmallServiceOffering0W2VOH",
>                 "cpunumber": 1,
>                 "cpuspeed": 100,
>                 "memory": 100,
>                 "guestosid": "5026c2c4-a8ca-11e2-8a60-0c06fde16e85",
>                 "rootdeviceid": 0,
>                 "rootdevicetype": "ROOT",
>                 "securitygroup": [],
>                 "nic": [
>                     {
>                         "id": "11517c3a-da75-4743-b4f5-2271dd919df9",
>                         "networkid": "7f7278dc-0352-44e6-b50d-56e59a7d19f3",
>                         "networkname": "QX7KKV-network",
>                         "netmask": "255.255.255.0",
>                         "gateway": "10.1.1.1",
>                         "ipaddress": "10.1.1.2",
>                         "traffictype": "Guest",
>                         "type": "Isolated",
>                         "isdefault": true,
>                         "macaddress": "02:00:3e:2e:00:01"
>                     }
>                 ],
>                 "hypervisor": "Simulator",
>                 "instancename": "i-232-35-QA",
>                 "tags": [],
>                 "affinitygroup": [],
>                 "jobstatus": 0 ####INVALID ENTRY INSIDE VIRTUALMACHINE####
>             }
>         },
>         "created": "2013-04-21T18:37:04+0530",
>         "jobid": "340120e2-632b-4a03-b416-21c23b4e95d1"
>     }
> }
> This seems to have come through during the api refactoring. Ideally response 
> should stick to what is exposed by the docs and the associated response 
> class: In the case of DeployVM there is no response attribute for jobstatus. 
> jobstatus attribute makes no sense for virtualmachine. 
> This breaks deserializing the object into a VirtualMachine response when 
> consumed by Marvin.
> Other entities that have similar issues:
> server/src/com/cloud/api/query/dao/AccountJoinDaoImpl.java:        
> accountResponse.setJobStatus(account.getJobStatus());
> server/src/com/cloud/api/query/dao/AsyncJobJoinDaoImpl.java:        
> jobResponse.setJobStatus(job.getStatus());
> server/src/com/cloud/api/query/dao/DomainRouterJoinDaoImpl.java:        
> routerResponse.setJobStatus(router.getJobStatus());
> server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java:        
> hostResponse.setJobStatus(host.getJobStatus());
> server/src/com/cloud/api/query/dao/HostJoinDaoImpl.java:        
> hostResponse.setJobStatus(host.getJobStatus());
> server/src/com/cloud/api/query/dao/SecurityGroupJoinDaoImpl.java:        
> sgResponse.setJobStatus(vsg.getJobStatus());
> server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java:        
> poolResponse.setJobStatus(pool.getJobStatus());
> server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java:        
> poolResponse.setJobStatus(pool.getJobStatus());
> server/src/com/cloud/api/query/dao/UserAccountJoinDaoImpl.java:        
> userResponse.setJobStatus(usr.getJobStatus());
> server/src/com/cloud/api/query/dao/UserVmJoinDaoImpl.java:        
> userVmResponse.setJobStatus(userVm.getJobStatus());
> server/src/com/cloud/api/query/dao/VolumeJoinDaoImpl.java:        
> volResponse.setJobStatus(volume.getJobStatus());
> server/src/com/cloud/api/query/vo/AccountJoinVO.java:    public void 
> setJobStatus(int jobStatus) {
> server/src/com/cloud/api/query/vo/DomainRouterJoinVO.java:    public void 
> setJobStatus(int jobStatus) {
> server/src/com/cloud/api/query/vo/HostJoinVO.java:    public void 
> setJobStatus(int jobStatus) {
> server/src/com/cloud/api/query/vo/SecurityGroupJoinVO.java:    public void 
> setJobStatus(int jobStatus) {
> server/src/com/cloud/api/query/vo/StoragePoolJoinVO.java:    public void 
> setJobStatus(int jobStatus) {
> server/src/com/cloud/api/query/vo/UserAccountJoinVO.java:    public void 
> setJobStatus(int jobStatus) {
> server/src/com/cloud/api/query/vo/UserVmJoinVO.java:    public void 
> setJobStatus(int jobStatus) {
> server/src/com/cloud/api/query/vo/VolumeJoinVO.java:    public void 
> setJobStatus(int jobStatus) {
> The associated views contain the response as well which is where they seem to 
> be coming from:
> | job_id                | bigint(20) unsigned | YES  |     | 0       |       |
> | job_uuid              | varchar(40)         | YES  |     | NULL    |       |
> | job_status            | int(1)              | YES  |     | NULL    |       |
> | job_account_id        | bigint(20) unsigned | YES  |     | NULL    |       |
> +-----------------------+---------------------+------+-----+---------+-------+

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to