blob: 7ffd34a5e616f7625ec9edc53a86ab4c76c09f68 [file] [log] [blame]
.if false
==================================================================================
Copyright (c) 2019 Nokia
Copyright (c) 2018-2019 AT&T Intellectual Property.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
==================================================================================
.fi
.if false
Mnemonic: retry.im
Abstract: Common text for all send operation functions. This should be imbedded by any
function which will ultimately use the internal send_msg funciton which
governs retries in this manner.
Date: 16 July 2019
.fi
&h3(Retries)
The send operations in RMR will retry &ital(soft) send failures until one of three
conditions occurs:
&half_space
&indent
&beg_dlist( 0.3i : ^&bold_font )
&di(1.) The message is sent without error
&half_space
&di(2.) The underlying transport reports a &ital(hard) failure
&half_space
&di(3.) The maximum number of retry loops has been attempted
&end_dlist
&uindent
&space
A retry loop consists of approximately 1000 send attempts &bold(without) any intervening
calls to &ital(sleep()) or &ital(usleep().)
The number of retry loops defaults to 1, thus a maximum of 1000 send attempts is performed
before returning to the user application.
This value can be set at any point after RMr initialisation using the &ital(rmr_set_stimeout())
function allowing the user application to completely disable retires (set to 0), or to
increase the number of retry loops.
&h3(Transport Level Blocking)
The underlying transport mechanism used to send messages is configured in &ital(non-blocking)
mode.
This means that if a message cannot be sent immediately the transport mechanism will &bold(not)
pause with the assumption that the inability to send will clear quickly (within a few milliseconds).
This means that when the retry loop is completely disabled (set to 0), that the failure to
accept a message for sending by the underlying mechanisms (software or hardware) will be
reported immediately to the user application.
&space
It should be noted that depending on the underlying transport mechanism being used, it is
extremely likely that retry conditions will happen during normal operations.
These are completely out of RMR's control, and there is nothing that RMR can do to avoid or mitigate
these other than by allowing RMR to retry the send operation, and even then it is possible
(e.g., during connection reattempts), that a single retry loop is not enough to guarantee a
successful send.