You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@qpid.apache.org by Fraser Adams <fr...@blueyonder.co.uk> on 2013/01/20 11:13:26 UTC

ManagementAgent query response for _object_id not setting _update_ts, _create_ts and _delete_ts

Hi All
I've just noticed this during some testing of my QMF REST API, so I've 
been going a getObjects call with an ObjectId as a parameter which 
should return the most recent state of that object.

More precisely I first did getObjects("broker") to retrieve the broker 
objects and having got the _object_id from that I used that as the 
parameter to getObjects() to prove things were getting correctly updated.

What I noticed was that my _update_ts, _create_ts and _delete_ts all get 
updated in the response and they are all the same value.

As it happens (for better or for worse) my QMF API QmfConsoleData 
constructor sets these three timestamps to the current time if the 
properties aren't present in the response and it looks like it's doing 
that because I've used

         long currentTime = System.currentTimeMillis()*1000000l;

which has a lower resolution than the nanosecond resolution sent in the 
getObjects("broker") response.

However as I say when I do getObjects("broker") the timestamps in the 
response are correct and that part of the code is identical irrespective 
of whether I do an _object_id or __schema_id query so I'm fairly sure 
it's not something stupid I'm doing...... (famous last words :-)).

I've taken a look in ManagementAgent.cpp the code involved is in:

void ManagementAgent::handleGetQueryLH(const string& body, const string& 
rte, const string& rtk, const string& cid, bool viaLocal)

what I've noticed is that although the block following "i = 
inMap.find("_object_id");" does do

             if (object->getConfigChanged() || object->getInstChanged())
                 object->setUpdateTime();

which would seem to indicate that the update time at least should be OK, 
however for the class based result I noticed:


                     if (object->getConfigChanged() || 
object->getInstChanged())
                         object->setUpdateTime();

                     object->writeTimestamps(map_);

The "object->writeTimestamps(map_);" being the interesting bit and  
missing from the _object_id call.


I've got a hunch about this. I *suspect* that the 
"object->setUpdateTime();" call actually relates to the QMF1 binary 
protocol timestamp setting but the "object->writeTimestamps(map_);" 
relates to the QMF2 Map Message protocol.


So I've fairly sure that this is a bug/omission. I've only looked at 
Qpid 0.12 as I'm stuck on that at the moment, so it may have been fixed, 
but it's a bit "down in the noise" on a fairly uncommon call, so I 
suspect I may be quite unusual actually calling that block :-)

If you agree that it looks like a bug let me know and I'll raise a Jira.

Regards,
Frase







---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org
For additional commands, e-mail: users-help@qpid.apache.org