Marc-Aurèle Brothier created CLOUDSTACK-10320:
-------------------------------------------------

             Summary: Invalid pair for response object breaking response parsing
                 Key: CLOUDSTACK-10320
                 URL: https://issues.apache.org/jira/browse/CLOUDSTACK-10320
             Project: CloudStack
          Issue Type: Bug
      Security Level: Public (Anyone can view this level - this is the default.)
          Components: API
            Reporter: Marc-Aurèle Brothier
            Assignee: Marc-Aurèle Brothier


Under some circumstances, the API is returning an invalid response, for 
simplicity I will expose the JSON case. The API response on a 
listVirtualMachines can be this string:
{code:java}
{ "listvirtualmachinesresponse" :  ] } }{code}
To understand how this is possible, assume you have more than one management 
server and one is processing the destroy of a virtual machine in the account X 
which is the only one it has. Another process is returning the result of 
listVirtualMachines for that same account X. During the listVM command, the 
result set is fetch with a searchAndDistinctCount due to the view 
([https://github.com/apache/cloudstack/blob/master/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java#L1024).]
 This is done through 2 queries in the GenericDao 
[https://github.com/apache/cloudstack/blob/master/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java#L1323]
 and if you encounter the _right_ conditions, the VM will be marked as removed 
in between those 2 queries. This results in having a Pair result with at least 
one object but a count of 0. Then following how is done the serialization of 
the response at 
[https://github.com/apache/cloudstack/blob/master/server/src/main/java/com/cloud/api/response/ApiResponseSerializer.java#L86]
 you will reach the case where your output is the one previously mentioned.

To overcome this issue, there isn't a true fix but only a better pair response 
to ensure a correct response formatting. If the result set contains at least 
something, the count cannot be 0 but we cannot guess the correct answer, but 
only state it has at least one element.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to