<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You 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.
-->
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">
]>
<document url="cluster-sender.html">

  &project;

  <properties>
    <author email="fhanik@apache.org">Filip Hanik</author>
    <title>The Cluster Sender object</title>
  </properties>

<body>

<section name="Table of Contents">
<toc/>
</section>

<section name="Introduction">
  <p>
  The channel sender component is responsible for delivering outgoing cluster messages over the network.
  In the default implementation, <code>org.apache.catalina.tribes.transport.ReplicationTransmitter</code>,
  the sender is a fairly empty shell with not much logic around a fairly complex <code>&lt;Transport&gt;</code>
  component the implements the actual delivery mechanism.
  </p>
</section>

<section name="Concurrent Parallel Delivery">
  <p>
  In the default <code>transport</code> implementation, <code>org.apache.catalina.tribes.transport.nio.PooledParallelSender</code>,
  Apache Tribes implements what we like to call &quot;Concurrent Parallel Delivery&quot;.
  This means that we can send a message to more than one destination at the same time(parallel), and
  deliver two messages to the same destination at the same time(concurrent). Combine these two and we have
  &quot;Concurrent Parallel Delivery&quot;.
  </p>
  <p>
  When is this useful? The simplest example we can think of is when part of your code is sending a 10MB message,
  like a war file being deployed, and you need to push through a small 10KB message, say a session being replicated,
  you don't have to wait for the 10MB message to finish, as a separate thread will push in the small message
  transmission at the same time. Currently there is no interrupt, pause or priority mechanism available, but check back soon.
  </p>
</section>

<section name="Nested Elements">
 <p>
   The nested element <code>&lt;Transport&gt;</code> is not required, but encouraged, as this is where
   you would set all the socket options for the outgoing messages. Please see its attributes below.
   There are two implementations, in a similar manner to the <a href="cluster-receiver.html">receiver</a>, one is non-blocking
   based and the other is built using blocking IO. <br/>
   <code>org.apache.catalina.tribes.transport.bio.PooledMultiSender</code> is the blocking implementation and
   <code>org.apache.catalina.tribes.transport.nio.PooledParallelSender</code>.
   Parallel delivery is not available for the blocking implementation due to the fact that it is blocking a thread on sending data.
 </p>
</section>

<section name="Attributes">
  <subsection name="Common Sender Attributes">
    <attributes>
      <attribute name="className" required="true">
        Required, only available implementation is <code>org.apache.catalina.tribes.transport.ReplicationTransmitter</code>
      </attribute>
    </attributes>
  </subsection>
  <subsection name="Common Transport Attributes">
    <attributes>
      <attribute name="className" required="true">
        Required, an implementation of the <code>org.apache.catalina.tribes.transport.MultiPointSender</code>.<br/>
        Non-blocking implementation is <code>org.apache.catalina.tribes.transport.nio.PooledParallelSender</code><br/>
        Blocking implementation is <code>org.apache.catalina.tribes.transport.bio.PooledMultiSender</code>
      </attribute>
      <attribute name="rxBufSize" required="false">
        The receive buffer size on the socket.
        Default value is <code>25188</code> bytes.
      </attribute>
      <attribute name="txBufSize" required="false">
       The send buffer size on the socket.
       Default value is <code>43800</code> bytes.
      </attribute>
      <attribute name="udpRxBufSize" required="false">
        The receive buffer size on the datagram socket.
        Default value is <code>25188</code> bytes.
      </attribute>
      <attribute name="udpTxBufSize" required="false">
       The send buffer size on the datagram socket.
       Default value is <code>43800</code> bytes.
      </attribute>
      <attribute name="directBuffer" required="false">
       Possible values are <code>true</code> or <code>false</code>.
       Set to true if you want the receiver to use direct bytebuffers when writing data
       to the sockets. Default value is <code>false</code>
      </attribute>
      <attribute name="keepAliveCount" required="false">
       The number of requests that can go through the socket before the socket is closed, and reopened
       for the next request. The default value is <code>-1</code>, which is unlimited.
      </attribute>
      <attribute name="keepAliveTime" required="false">
       The number of milliseconds a connection is kept open after its been opened.
       The default value is <code>-1</code>, which is unlimited.
      </attribute>
      <attribute name="timeout" required="false">
        Sets the SO_TIMEOUT option on the socket. The value is in milliseconds and the default value is <code>3000</code>
        milliseconds.(3 seconds) This timeout starts when a message send attempt is starting, until the transfer has been completed.
        For the NIO sockets, this will mean, that the caller can guarantee that we will not attempt sending the message
        longer than this timeout value. For the blocking IO implementation, this translated directly to the soTimeout.<br/>
        A timeout will not spawn a retry attempt, in order to guarantee the return of the application thread.
      </attribute>
      <attribute name="maxRetryAttempts" required="false">
        How many times do we retry a failed message, that received a IOException at the socket level.
        The default value is <code>1</code>, meaning we will retry a message that has failed once.
        In other words, we will attempt a message send no more than twice. One is the original send, and one is the
        <code>maxRetryAttempts</code>.
      </attribute>
      <attribute name="ooBInline" required="false">
        Boolean value for the socket OOBINLINE option. Possible values are <code>true</code> or <code>false</code>.
      </attribute>
      <attribute name="soKeepAlive" required="false">
        Boolean value for the socket SO_KEEPALIVE option. Possible values are <code>true</code> or <code>false</code>.
      </attribute>
      <attribute name="soLingerOn" required="false">
        Boolean value to determine whether to use the SO_LINGER socket option.
        Possible values are <code>true</code> or <code>false</code>. Default value is <code>true</code>.
      </attribute>
      <attribute name="soLingerTime" required="false">
        Sets the SO_LINGER socket option time value. The value is in seconds.
        The default value is <code>3</code> seconds.
      </attribute>
      <attribute name="soReuseAddress" required="false">
       Boolean value for the socket SO_REUSEADDR option. Possible values are <code>true</code> or <code>false</code>.
      </attribute>
      <attribute name="soTrafficClass" required="false">
       Sets the traffic class level for the socket, the value is between 0 and 255.
       Default value is <code>int soTrafficClass = 0x04 | 0x08 | 0x010;</code>
       Different values are defined in <a href="http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html#setTrafficClass(int)">
       java.net.Socket#setTrafficClass(int)</a>.
      </attribute>
      <attribute name="tcpNoDelay" required="false">
       Boolean value for the socket TCP_NODELAY option. Possible values are <code>true</code> or <code>false</code>.
       The default value is <code>true</code>
      </attribute>
      <attribute name="throwOnFailedAck" required="false">
       Boolean value, default value is <code>true</code>.
       If set to true, the sender will throw a <code>org.apache.catalina.tribes.RemoteProcessException</code>
       when we receive a negative ack from the remote member.
       Set to false, and Tribes will treat a positive ack the same way as a negative ack, that the message was received.
      </attribute>
    </attributes>
  </subsection>
  <subsection name="Common PooledSender Attributes">
    <attributes>
      <attribute name="poolSize" required="false">
        The maximum number of concurrent connections from A to B.
        The value is based on a per-destination count.
        The default value is <code>25</code>
      </attribute>
      <attribute name="maxWait" required="false">
        The maximum number of milliseconds that the senderPool will wait when
        there are no available senders. The default value is <code>3000</code>
        milliseconds.(3 seconds).
      </attribute>
    </attributes>
  </subsection>
</section>
</body>
</document>
