Configuration Guide

Transport TCP Operation Options

# Reference <-

## transport_session_maximum_buffer (source) <-

  Value used to control the maximum amount of data buffered in UM for the transport session used for the topic.

  For the normal multiple receiver behavior, this value represents the total buffered by all TCP receivers. For the bounded_latency and source_paced multiple receiver behavior, this value represents the individual receiver buffered amount. This option affects the transport session underlying the source rather than the source itself. The transport session uses the value from the first source created on the session and ignores subsequent sources' configuration.

  Refer to Source Object for additional information.

  Scope: | source
  Type: | lbm_ulong_t
  Units: | bytes
  Default value: | 65536
  When to Set: | Can only be set during object initialization.

## transport_tcp_activity_method (receiver) <-

  The type of timeout method to use for TCP receivers to detect half-open TCP connections.

  For TCP sessions only.

  This defines how transport_tcp_activity_timeout (receiver) is interpreted. (Note that transport_tcp_activity_timeout (receiver) defaults to 0 (disabled), meaning that half-open TCP connections may not be detected in a timely way.)

  See TCP Disconnections for more information.

  Scope: | receiver
  Type: | int
  When to Set: | Can only be set during object initialization.
  Version: | This option was implemented in LBM 3.3.8/UME 2.0.6.

  String value | Integer value | Description
  --- | --- | ---
  "timer" | LBM_RCV_TOPIC_ATTR_TCP_ACTIVITY_TIMEOUT_TIMER | Timer method that requires new TCP session data to be sent to determine if the connection is alive. This TCP session data might be in the form of application messages, in which case it is the application's responsibility to ensure that messages are sent frequently enough to prevent timeouts, or could be TSNIs. Default for all.
  "SO_KEEPALIVE" | LBM_RCV_TOPIC_ATTR_TCP_ACTIVITY_TIMEOUT_SO_KEEPALIVE | Set SO_KEEPALIVE on the TCP connection which uses the TCP keepalive support in the operating system to determine if the connection is alive. For Linux and Windows only. Note that although the "timer" method is the default, Informatica recommends the use of "SO_KEEPALIVE" for operating systems that support it.

## transport_tcp_activity_timeout (receiver) <-

  A timeout used by a receiver to close a TCP transport session that has no activity.

  For TCP sessions only.

  If transport_tcp_activity_method (receiver) is set to "SO_KEEPALIVE" (recommended), this timeout value must be either 0 (to disable the feature) or greater than or equal to 20,000 (20 seconds). Note that the time specified is only approximate; the operating system has wide discretion for deciding exactly when to disconnect a connection, and the actual time can be more than a factor of 2 different from this configured value.

  If transport_tcp_activity_method (receiver) is set to "timer", this timeout value must be either 0 (to disable the feature) or greater than or equal to 3 (milliseconds).

  Normally, when a source transport session is deleted by the publishing application, the TCP connection is closed, which the receiver detects within a few milliseconds. However, there can be situations where a temporary network outage or a stateful firewall prevents the receiver from detecting the closing of the connection, resulting in a half-open connection. This situation can prevent the receiver from detecting a broken connection for an unbounded time.

  This configuration option can be used to detect and close half-open connections.

  Scope: | receiver
  Type: | lbm_ulong_t
  Units: | milliseconds
  Default value: | 0
  When to Set: | Can only be set during object initialization.

## transport_tcp_activity_timeout (source) <-

  This timeout option enables a source to use SO_KEEPALIVE to detect when a receiver does not cleanly disconnect or is no longer reachable from the source.

  For TCP sessions only.

  This timeout value must be either 0 (to disable the feature) or greater than or equal to 20,000 (20 seconds). Note that the time specified is only approximate; the operating system has wide discretion for deciding exactly when to disconnect a connection, and the actual time can be more than a factor of 2 different from this configured value.

  See TCP Disconnections for more information.

  Scope: | source
  Type: | lbm_ulong_t
  Units: | milliseconds
  Default value: | 0
  When to Set: | Can only be set during object initialization.

## transport_tcp_coalesce_threshold (source) <-

  UM passes implicitly batched messages to the Operating System sendmsg() as a set unless the size of the set exceeds the coalescing threshold at which point the messages are coalesced and passed to the O/S as one copy.

  This option accommodates the different number of iovecs supported by different O/Ss. Tuning this option balances the efficiency of less iovecs handled by the OS vs. the expense of an additional copy operation of the messages before sending. The default values are also the maximum allowable values.

  Scope: | source
  Type: | int
  Units: | number of individual messages
  Default value: | 1024 for Linux, Microsoft Windows, Darwin; 16 for Solaris, AIX, HPUX
  When to Set: | Can only be set during object initialization.
  Version: | This option was implemented in LBM 3.6/UME 2.3.

## transport_tcp_datagram_max_size (context) <-

  The maximum datagram size that can be generated for a TCP transport session. While TCP does not use UDP datagrams, this option limits the size of the UM message which is given to the underlying transport type, including all UM headers and overhead. It does not include TCP, IP, or packet overhead added by the network stack. The default value is 65535, the minimum is 500 bytes, and the maximum is 65535.

  See Message Fragmentation and Reassembly for more information.

  Informatica does not recommend setting datagram max size options to the network MTU. See Datagram Max Size and Network MTU.

Warning
  When the DRO is in use, it is recommended that all UM applications and components (including the DRO and Persistent Store) share the same maximum datagram size setting. See Protocol Conversion.

  Users of kernel-bypass drivers should also see Dynamic Fragmentation Reduction.

  Scope: | context
  Type: | lbm_uint_t
  Units: | bytes
  Default value: | 65535
  When to Set: | Can only be set during object initialization.
  Version: | This option was implemented in LBM 4.1/UME 3.1/UMQ 1.1

## transport_tcp_dro_loss_recovery_timeout (receiver) <-

  For TCP transport sessions originating from a DRO endpoint portal, delay declaring as unrecoverable a lost message.

  Message streams traversing a DRO can have the message order changed. If the DRO's outgoing transport session uses the TCP protocol, these out-of-order messages will normally trigger immediate unrecoverable loss. This timeout allows an opportunity for the messages to be re-ordered properly.

  The value 0 disables this delay (i.e. receivers immediately declare unrecoverable loss).

  See DRO Reliable Loss for more information.

  Scope: | receiver
  Type: | lbm_ulong_t
  Units: | milliseconds
  Default value: | 0
  When to Set: | Can only be set during object initialization.
  Version: | This option was implemented in LBM 6.12

## transport_tcp_exclusiveaddr (source) <-

  Indicate whether the TCP session should set SO_EXCLUSIVEADDRUSE or not before it binds.

  Applicable only to Windows. The default setting in Windows allows multiple binds to the same port. By default, UM will set SO_EXCLUSIVEADDRUSE to minimize port sharing. Refer to Microsoft's web site for more information on SO_EXCLUSIVEADDRUSE.

  Scope: | source
  Type: | int
  When to Set: | Can only be set during object initialization.

  Value | Description
  --- | ---
  1 | Set SO_EXCLUSIVEADDRUSE. Default for Windows.
  0 | Do not set SO_EXCLUSIVEADDRUSE.

## transport_tcp_listen_backlog (source) <-

  The backlog used in the TCP listen() call to set the queue length for incoming connections.

  If 20 or more receivers will be joining this source, it may be beneficial to increase this number.

  Scope: | source
  Type: | int
  Units: | number of queued connections
  Default value: | 5
  When to Set: | Can only be set during object initialization.

## transport_tcp_multiple_receiver_behavior (source) <-

  This option determines the flow control behavior of a TCP source.

  In particular, it addresses the scenario where some receivers are consuming messages more slowly than the source is sending. With normal receiver-pacing, the slowest receiver connected to the source will limit the maximum send rate for the source. I.e. if the source is sending faster than the receiver can process and the socket buffers fill up, the next call to "send" will either block or will return -1 with the error code LBM_EWOULDBLOCK. (But see TCP Flow Control Restrictions.)

  With source-paced behavior, a source send will drop messages for receivers whose socket buffers are full. I.e. fast receivers might get all messages, but slow receivers can see unrecoverable loss.

  See Source Object for additional information.

  FYI - the purpose of this option has evolved over time, and its name is no longer very descriptive of its function.

  Scope: | source
  Type: | int
  When to Set: | Can only be set during object initialization.

  String value | Integer value | Description
  --- | --- | ---
  "normal" | LBM_SRC_TOPIC_ATTR_TCP_MULTI_RECV_NORMAL | Source will block for full socket buffers. Default for all.
  "source_paced" | LBM_SRC_TOPIC_ATTR_TCP_MULTI_RECV_SOURCE_PACED | Source will drop messages for full socket buffers, resulting in unrecoverable loss for the slow receiver.
  "bounded_latency" | LBM_SRC_TOPIC_ATTR_TCP_MULTI_RECV_BOUNDED_LATENCY | The application sends as fast as the fastest receiver can consume data even if recent data headed for slower receivers must be discarded. DEPRECATED since UM 6.9.

## transport_tcp_multiple_receiver_send_order (source) <-

  In the case of multiple receivers, this option determines whether datagrams are sent to each receiver in the established order of receivers, or if receivers are selected in random order for each datagram transmission.

  Using random ordering can avoid giving one receiver a consistent latency advantage, at the expense of slightly higher per-message processing (calculating the random number).

  Scope: | source
  Type: | int
  When to Set: | Can only be set during object initialization.

  String value | Integer value | Description
  --- | --- | ---
  "serial" | LBM_SRC_TOPIC_ATTR_TCP_MULTI_RECV_SEND_ORDER_SERIAL | Select receivers to receive a datagram based on current established order. Default for all.
  "random" | LBM_SRC_TOPIC_ATTR_TCP_MULTI_RECV_SEND_ORDER_RANDOM | For each datagram sent, select receivers in random order, for the sake of "fairness". Note that this option adds a small amount of CPU overhead.

## transport_tcp_nodelay (source) <-

  Controls whether the context sets TCP_NODELAY before it binds to the source port.

  Setting TCP_NODELAY disables Nagle's algorithm, which somewhat decreases the efficiency and throughput of TCP, but decreases the latency of individual messages.

  Scope: | source
  Type: | int
  When to Set: | Can only be set during object initialization.

  Value | Description
  --- | ---
  1 | TCP transport sockets should set TCP_NODELAY (disable Nagle). Default for all.
  0 | TCP transport sockets should not set TCP_NODELAY (leave Nagle enabled).

## transport_tcp_receiver_socket_buffer (context) <-

  Value used to set the SO_RCVBUF socket option for the TCP receiving socket.

  In some cases the OS will not allow all of this value to be used.

  A value of 0 instructs UM to use the default OS values. See Socket Buffer Sizes for platform-dependent information.

  Scope: | context
  Type: | lbm_ulong_t
  Units: | bytes
  Default value: | 0 (use TCP autotuning)
  When to Set: | Can only be set during object initialization.

## transport_tcp_reuseaddr (source) <-

  Whether the TCP session should set SO_REUSEADDR or not before it binds.

Warning
  This option is not recommended for Microsoft Windows users because the SO_REUSEADDR socket option in Windows allows a socket to forcibly bind to a port in use by another socket. Multiple sockets using the same port results in indeterminate behavior.

  Scope: | source
  Type: | int
  When to Set: | Can only be set during object initialization.

  Value | Description
  --- | ---
  1 | Set SO_REUSEADDR.
  0 | Do not set SO_REUSEADDR. Default for all.

## transport_tcp_sender_socket_buffer (source) <-

  Value used to set the SO_SNDBUF socket option for the TCP sending socket.

  In some cases the OS will not allow all of this value to be used.

  A value of 0 instructs UM to use the OS defaults. See Socket Buffer Sizes for platform-dependent information.

  Scope: | source
  Type: | lbm_ulong_t
  Units: | bytes
  Default value: | 0 (use TCP autotuning)
  When to Set: | Can only be set during object initialization.

## transport_tcp_use_session_id (source) <-

  Control whether a session ID is used for TCP Transport sessions.

  This option should be set to 0 if a version 6.0 (and beyond) TCP source must interoperate with a version pre-6.0 receiver.

  Scope: | source
  Type: | int
  When to Set: | Can only be set during object initialization.
  Version: | This option was implemented in UM 6.0

  Value | Description
  --- | ---
  1 | Indicates the application desires TCP to use a session ID. Default for all.
  0 | Indicates the application does not desire TCP to use a session ID. For use when version pre-6.0 receivers must be used with TCP sources that are version 6.0 and beyond.