Use timers in DataSource applications
Here we explain what timers are used for in a DataSource application, what they’re for, and how to configure them.
Timing out requests to DataSource peers
The global request timeout for data services
This facility isn’t available to Java-based DataSource applications, which don’t support data services. |
If your DataSource application obtains data from peers through data services (which is the recommended way to do it), requests sent to a data service, such as a subscription to a subject, are timed out. If the DataSource peers providing the service don’t respond within the timeout period, the DataSource application assumes the requested item isn’t available, so the subscription to it is discarded.
This timeout is defined by the configuration item service-request-timeout, which applies to all data services defined in the DataSource application.
If you don’t explicitly define a value for service-request-timeout in your application’s configuration, the default timeout of 10 seconds is applied to all the application’s data service requests.
|
Timing out requests to individual data services
This facility isn’t available to Java-based DataSource applications, which don’t support data services. |
You can override the data services global service-request-timeout for a selected data service. Just add a request-timeout option to the add-data-service configuration item for the data serice:
service-request-timeout 12.0 add-data-service service-name fx-prices include-pattern ^/FX/ # # Override service-request-timeout # for the fx-prices service only. # request-timeout 9.0 ... add-source-group ... end-source-group end-data-service
If you don’t want to time out the responses from a particular data service, set the service’s request-timeout
option to -1
:
service-request-timeout 12.0 add-data-service service-name fx-prices include-pattern ^/FX/ # # Disable data service request timeouts # for the fx-prices service only # request-timeout -1 ... add-source-group ... end-source-group end-data-service
If you disable the request timeout on a data service, make sure that you’ve defined a request timeout for each of the peers that supply data for the service, otherwise the DataSource application could wait indefinitely for the service to satisfy a request. See Timing out requests made to individual peers below. |
Retrying a request to a data service
This facility isn’t available to Java-based DataSource applications, which don’t support data services. |
If a DataSource application finds that none of the peers defined by the add-priority options in a data service’s source group have responded to a request, the DataSource application waits for a configurable time before reissuing the request to the group. It repeats this sequence until the master timeout for the service, as defined by service-request-timeout, or the request-timeout option of add-data-service, expires. You set this retry timer with the retry-time option of the add-source-group configuration item:
service-request-timeout 12.0 add-data-service service-name fx-prices include-pattern ^/FX/ # # Override service-request-timeout # for the fx-prices service only. # request-timeout 9.0 ... add-source-group required TRUE # # If none of this service's peers # respond to a request, wait 3.0 seconds # before retrying. # retry-time 3.0 add-priority remote-label fxpriceadapter1 end-priority add-priority remote-label fxpriceadapter2 end-priority end-source-group end-data-service
What happens if I don’t explicitly specify any timers for my data services?
The default timer settings would apply. The default value of service-request-timeout
is 10 seconds, so all data service requests requests would time out after 10 seconds. Since the default setting of retry-time
is 30 seconds, there wouldn’t be any retries, because the service request timeout would take effect well before the DataSource application could reissue the request to the group.
Timing out requests made to individual peers
This facility isn’t available to Java-based DataSource applications. |
The data service request timeouts described above apply to all the peers that belong to a data service. You can also specify a timeout on response to requests sent to a particular peer. This timeout applies to requests sent to the peer from any of the DataSource application’s data services.
Firstly, there’s a global request timeout called source-request-timeout that applies to all the DataSource application’s peers. If you don’t explicitly define it, peer level request timeouts aren’t enabled.
# # Peers configuration # # # Set a timeout on the response to # any request sent to any peer. # source-request-timeout 3.0 add-peer remote-name fxpriceadapter1 ... end-peer add-peer remote-name fxpriceadapter2 ... end-peer # # Data services configuration # service-request-timeout 12.0 add-data-service service-name fx-prices include-pattern ^/FX/ request-timeout 9.0 ... add-source-group required TRUE retry-time 3.0 add-priority remote-label fxpriceadapter1 end-priority add-priority remote-label fxpriceadapter2 end-priority end-source-group end-data-service
You can also set a timeout on the request reponses made by a specific peer, using the request-timeout option of add-peer. This overrides the source-request-timeout
setting for that peer only:
# # Peers configuration # # # Set a timeout on the response to # any request sent to any peer. # source-request-timeout 3.0 add-peer remote-name fxpriceadapter1 # # Set a different request response # timeout for the fxpriceadapter1 # peer only. # request-timeout 2.0 ... end-peer add-peer remote-name fxpriceadapter2 ... end-peer # # Data services configuration # service-request-timeout 12.0 add-data-service service-name fx-prices include-pattern ^/FX/ request-timeout 9.0 ... add-source-group required TRUE retry-time 3.0 add-priority remote-label fxpriceadapter1 end-priority add-priority remote-label fxpriceadapter2 end-priority end-source-group end-data-service
Timing out connections to DataSource peers
When a DataSource application requests to connect to a DataSource peer, the peer may not exist or there might be no current network route to the peer. The operating system will attempt to connect for a time that’s dependent on various operating system parameters; it could typically be up to 4 minutes before the OS gives up and returns a connection error to the application. This delay’s usually too long for a typical Caplin Platform installation, so the DataSource application overrides it, using the connect-timeout option of the add-peer configuration item:
# # Peers configuration # # add-peer remote-name fxpriceadapter1 # # Set a timeout (in seconds) on the # connection request for this peer. # connect-timeout 5 ... end-peer
connect-timeout
has a default value of 10 seconds, so if you don’t explicitly set it in the add-peer
configuration, connection requests to that peer will time out after 10 seconds - rather less than the typical OS default!
You’d typically want to define connect-timeout
s in the configuration of an Integration Adapter that connects to one or more Liberators and/or Transformers, setting the timeout in the add-peer
items that define the Liberator and Transformer connections.
Note that if you’ve set up a list of alternative peers in the add-peer
configuration (see the addr and port options), and the timeout expires when attempting to connect to one of the peers, the DataSource application attempts to fail over to the next peer connection defined in the addr
option’s list and applies the timeout again.
Other data service timeouts
The cleanup-stale-timeout and discard-timeout configuration items aren’t available to Java-based DataSource applications, which don’t support data services.
|
In Timing out requests to DataSource peers, we discussed various timers that apply to requests made to peers through data services. There are also a couple of other timers that apply to data services: cleanup-stale-timeout
and discard-timeout
.
-
Define cleanup-stale-timeout when you want the DataSource application to delete stale objects from its cache.
-
Define the discard-timeout option of add-data-service when you want the DataSource application to discard the data for a subscribed subject once the last client application has unsubscribed from the subject. This option is particularly relevant to Liberator.
See also: