PMDF System Manager's Guide


Previous Contents Index

24.6 Backoff retries for undeliverable messages

Note

The following discussion does not apply to channels marked with either the slave or periodic channel keywords.

As described in Section 1.4, when a message is first enqueued, an immediate message delivery job attempts to deliver the message.3 Should that delivery attempt fail, then the message will either be returned to the sender or retained for subsequent delivery attempts if, respectively, the failure was permanent or temporary in nature. When the message is retained, periodic delivery jobs will attempt to redeliver any messages which have yet to be delivered.

For some channels, however, it can not be deemed desirable to wait for the next periodic delivery job before another delivery attempt is made. With the BACKOFF channel option and mapping table, it is possible to schedule an immediate message delivery job to attempt a subsequent delivery of a message

Each entry in the BACKOFF mapping table has the format (note the use of the vertical bar character, |)


channel|n        time
where channel is the name of the channel, and where n is an integer given by the formula
n = (number of delivery attempts so far - 1) / BACKOFF with BACKOFF the value specified by the BACKOFF option in the channel's option file. time is an unsigned integer number of seconds to wait before making another delivery attempt.


On OpenVMS, there is an alternate format for specifying the time value. If the time value is an unsigned integer, it will be interpreted as described above, as the number of seconds to wait before making the next delivery attempt. Alternatively, the value can be specified as an absolute, delta, or combination time specifying when the next delivery attempt should be made.

When the BACKOFF option specifies a value greater than zero, then for each message which cannot be delivered, the BACKOFF mapping table will be consulted. If the table exists and a matching entry is found (i.e., an entry which matches the channel name and n), then a delivery job to attempt redelivery for that message will be queued to run at the time specified by time. If the table does not exist or no matching entry is found, then no immediate job will be queued and the message will be retried when the next periodic delivery job runs.4

For example, suppose that BACKOFF=5 has been specified and that the channel name is dpd_pmdf. Then the following BACKOFF mapping table,


BACKOFF 
 
  dpd_pmdf|0      300 
  dpd_pmdf|1      600 
or on OpenVMS the alternate specification


BACKOFF 
 
  dpd_pmdf|0      +00:05:00 
  dpd_pmdf|1      +00:10:00 
requests that redelivery attempts should be made every 5 minutes for the first five attempts [n=0=(1-1)/5, (2-1)/5, (3-1)/5, (4-1)/5, (5-1)/5], and every 10 minutes for the next five attempts [n=1=(6-1)/5, ..., (10-1)/5]. All further attempts will be handled by periodic delivery jobs.

Note

3 Unless, of course, the channel is marked slave or periodic.

4 Note that as long as the message is still waiting to be delivered, the periodic delivery jobs will attempt to deliver it irrespective of any pending immediate delivery job.


Previous Next Contents Index