MI Queue timestamp changes affecting data queues and user queues

MI queue timestamps might no longer be unique.

To avoid potential performance scaling issues, the time an entry is sent to a queue is changing to no longer use the uniqueness bits and the time a queue was last modified is changing to only use uniqueness bits some of the time. The granularity of timestamps are not changing but bits 52-63 of the timestamps might no longer provide uniqueness, in which case they are set to zero. Since the granularity of the timestamps is not changing, users of functions such as the Retrieve Object Description (QUSROBJD) API, the Display Object Description (DSPOBJD) command, and the Retrieve Object Description (RTVOBJD) command will see no noticeable change. The change is noticeable in the following places where the timestamp is returned in Standard Time Format:
  • Timestamp of enqueue of message field that is returned by the Dequeue (DEQ) MI instruction
  • Message enqueue time field that is returned by the Materialize Queue Messages (MATQMSG) MI instruction
  • Timestamp of last modification field that is returned by the Materialize System Object (MATSOBJ) MI instruction when a queue is materialized
  • Message enqueue date and time field that is returned by the Retrieve Data Queue Message (QMHRDQM) API
  • Change date and time field that is returned by the List Objects (QUSLOBJ) API when a data queue or user queue is listed
  • Change date and time field that is returned by the Open List of Objects (QGYOLOBJ) API when a data queue or user queue is listed
The above 8-byte timestamps might no longer have the uniqueness bits set. For example, in the Dequeue (DEQ) MI instruction, the Standard Time Format is defined as a 64-bit (8-byte) unsigned binary value as follows:
   Offset 	
         Dec  Hex 	Field Name		           Data Type and Length
         0    0 	Standard Time Format           UBin(8)
         0    0 	    Time		          Bits 0-51
         0    0 	    Uniqueness bits               Bits 52-63
         8    8 	--- End --- 

The time field is a binary number, which can be interpreted as a time value in units of 1 microsecond. A binary 1 in bit 51 is equal to 1 microsecond.

The uniqueness bits field might contain any combination of binary 1s and 0s. These bits do not provide extra granularity for a time value; they merely allow unique 64-bit values to be returned, such as when the value of the time-of-day (TOD) clock is materialized. When the uniqueness bits all contain binary 0s, then the 64-bit value that is returned is not unique.

The create and last reclaim timestamps that are returned by functions such as the Retrieve Data Queue Description (QMHQRDQD) API and the MATSOBJ MI instruction remain unchanged.