The scenario that leads to the problem involves an application that sends multiple CASes. Immediately after sending each CAS, the application sends a CPC. So the sequence is: CAS1 - CPC - CAS2 - CPC - CASn - CPC.
When UIMA AS client times out waiting for a CAS reply from a service it marks a service as timed out. If a an application sends another CAS, the UIMA AS client detects the state of the service as timed out, sends a GetMeta Ping to a service and places the CAS on a pending list. The control is than returned to the application. If the application calls collectionProcessComplete() method, the UIMA AS client, while still waiting for GetMeta Ping reply, sends a CPC request to a service. When the GetMeta Ping reply finally arrives, the UIMA AS client sends a CAS from a pending list to a service. In this scenario, the CPC ends up in the service queue ahead of a CAS. This is a wrong behaviour. The UIMA AS client should not send a CPC while still waiting for GetMeta Ping reply and certainly not before a pending CAS is sent.