
<!--
  Sample file that defines a number of stacks, used by the multiplexer
  Author: Bela Ban
-->
<protocol_stacks>
    <stack name="udp"
           description="Default: IP multicast based stack, with flow control and message bundling">
        <config>
            <UDP
                 mcast_port="${jgroups.udp.mcast_port:45588}"
                 tos="8"
                 ucast_recv_buf_size="20000000"
                 ucast_send_buf_size="640000"
                 mcast_recv_buf_size="25000000"
                 mcast_send_buf_size="640000"
                 loopback="true"
                 discard_incompatible_packets="true"
                 max_bundle_size="64000"
                 max_bundle_timeout="30"
                 ip_ttl="${jgroups.udp.ip_ttl:2}"
                 enable_bundling="true"

		         thread_pool.enabled="true"
		         thread_pool.min_threads="1"
		         thread_pool.max_threads="25"
		         thread_pool.keep_alive_time="5000"
		         thread_pool.queue_enabled="false"
		         thread_pool.queue_max_size="100"
		         thread_pool.rejection_policy="Run"
		
		         oob_thread_pool.enabled="true"
		         oob_thread_pool.min_threads="1"
		         oob_thread_pool.max_threads="8"
		         oob_thread_pool.keep_alive_time="5000"
		         oob_thread_pool.queue_enabled="false"
		         oob_thread_pool.queue_max_size="100"
		         oob_thread_pool.rejection_policy="Run"/>		         
            <PING timeout="2000"
                    num_initial_members="3"/>
            <MERGE2 max_interval="100000"
                      min_interval="20000"/>
            <FD_SOCK/>
            <FD timeout="10000" max_tries="5" />
            <VERIFY_SUSPECT timeout="1500"  />
            <pbcast.NAKACK
                           use_mcast_xmit="false" gc_lag="0"
                           retransmit_timeout="300,600,1200,2400,4800"
                           discard_delivered_msgs="false"/>
            <UNICAST timeout="300,600,1200,2400,3600"/>
            <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
                           max_bytes="4m"/>
            <pbcast.GMS print_local_addr="true" join_timeout="5000"  

                        view_bundling="true"/>
            <UFC max_credits="2M"
                 min_threshold="0.4"/>
            <MFC max_credits="2M"
                 min_threshold="0.4"/>
            <FRAG2 frag_size="60000"  />
			<pbcast.STREAMING_STATE_TRANSFER/>
	        <!-- <pbcast.STATE_TRANSFER/> -->
	        <pbcast.FLUSH timeout="0"/>        
	    </config>
    </stack>



    <stack name="udp-sync"
           description="IP multicast based stack, without flow control and without message bundling. This should be used
           instead of udp if (1) synchronous calls are used and (2) the message volume (rate and size)
            is not that large. Don't use this configuration if you send messages at a high sustained rate, or you might
            run out of memory">
        <config>
            <UDP
                 mcast_port="${jgroups.udp.mcast_port:45599}"
                 tos="8"
                 ucast_recv_buf_size="20000000"
                 ucast_send_buf_size="640000"
                 mcast_recv_buf_size="25000000"
                 mcast_send_buf_size="640000"
                 loopback="true"
                 discard_incompatible_packets="true"
                 max_bundle_size="64000"
                 max_bundle_timeout="30"
                 ip_ttl="${jgroups.udp.ip_ttl:2}"
                 enable_bundling="true"

		         thread_pool.enabled="true"
		         thread_pool.min_threads="1"
		         thread_pool.max_threads="25"
		         thread_pool.keep_alive_time="5000"
		         thread_pool.queue_enabled="false"
		         thread_pool.queue_max_size="100"
		         thread_pool.rejection_policy="Run"
		
		         oob_thread_pool.enabled="true"
		         oob_thread_pool.min_threads="1"
		         oob_thread_pool.max_threads="8"
		         oob_thread_pool.keep_alive_time="5000"
		         oob_thread_pool.queue_enabled="false"
		         oob_thread_pool.queue_max_size="100"
		         oob_thread_pool.rejection_policy="Run"/>		         
            <PING timeout="2000"
                    num_initial_members="3"/>
            <MERGE2 max_interval="100000"
                      min_interval="20000"/>
            <FD_SOCK/>
            <FD timeout="10000" max_tries="5" />
            <VERIFY_SUSPECT timeout="1500"  />
            <pbcast.NAKACK
                           use_mcast_xmit="false" gc_lag="0"
                           retransmit_timeout="300,600,1200,2400,4800"
                           discard_delivered_msgs="false"/>
            <UNICAST timeout="300,600,1200,2400,3600"/>
            <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
                           max_bytes="4m"/>
            <pbcast.GMS print_local_addr="true" join_timeout="5000"  

                        view_bundling="true"/>
            <FRAG2 frag_size="60000"  />
            <pbcast.STREAMING_STATE_TRANSFER/>
	        <!-- <pbcast.STATE_TRANSFER/> -->
	        <pbcast.FLUSH timeout="0"/>
        </config>
    </stack>


    <stack name="tcp"
           description="TCP based stack, with flow control and message bundling. This is usually used when IP
           multicasting cannot be used in a network, e.g. because it is disabled (routers discard multicast).
           Note that TCP.bind_addr and TCPPING.initial_hosts should be set, possibly via system properties, e.g.
           -Djgroups.bind_addr=192.168.5.2 and -Djgroups.tcpping.initial_hosts=192.168.5.2[7800]">
        <config>
            <TCP bind_port="7800"
                 loopback="true"
                 recv_buf_size="20000000"
                 send_buf_size="640000"
                 discard_incompatible_packets="true"
                 max_bundle_size="64000"
                 max_bundle_timeout="30"
                 enable_bundling="true"
                 use_send_queues="true"
                 sock_conn_timeout="300"

		         thread_pool.enabled="true"
		         thread_pool.min_threads="1"
		         thread_pool.max_threads="25"
		         thread_pool.keep_alive_time="5000"
		         thread_pool.queue_enabled="false"
		         thread_pool.queue_max_size="100"
		         thread_pool.rejection_policy="run"
		
		         oob_thread_pool.enabled="true"
		         oob_thread_pool.min_threads="1"
		         oob_thread_pool.max_threads="8"
		         oob_thread_pool.keep_alive_time="5000"
		         oob_thread_pool.queue_enabled="false"
		         oob_thread_pool.queue_max_size="100"
		         oob_thread_pool.rejection_policy="run"/>
		         
            <TCPPING timeout="3000"
                     initial_hosts="${jgroups.tcpping.initial_hosts:localhost[7800],localhost[7801]}"
                     port_range="1"
                     num_initial_members="3"/>
            <MERGE2 max_interval="100000"
                      min_interval="20000"/>
            <FD_SOCK/>
            <FD timeout="10000" max_tries="5"   />
            <VERIFY_SUSPECT timeout="1500"  />
            <pbcast.NAKACK
                           use_mcast_xmit="false" gc_lag="0"
                           retransmit_timeout="300,600,1200,2400,4800"
                           discard_delivered_msgs="false"/>
            <UNICAST timeout="300,600,1200" />
            <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
                           max_bytes="4m"/>
            <pbcast.GMS print_local_addr="true" join_timeout="7000"

                        view_bundling="true"/>
            <UFC max_credits="2M"
                 min_threshold="0.4"/>
            <MFC max_credits="2M"
                 min_threshold="0.4"/>
            <FRAG2 frag_size="60000"  />
            <pbcast.STREAMING_STATE_TRANSFER/>
	        <!-- <pbcast.STATE_TRANSFER/> -->
	        <pbcast.FLUSH timeout="0"/>
        </config>
    </stack>


    <stack name="tcp-sync"
           description="TCP based stack, without flow control and without message bundling. This is usually used when IP
           multicasting cannot be used in a network, e.g. because it is disabled (routers discard multicast). This
           configuration should be used instead of tcp when (1) synchronous calls are used and (2) the message volume
           (rate and size) is not that large">
        <config>
            <TCP bind_port="7900"
                 loopback="true"
                 recv_buf_size="20000000"
                 send_buf_size="640000"
                 discard_incompatible_packets="true"
                 max_bundle_size="64000"
                 max_bundle_timeout="30"
                 enable_bundling="true"
                 use_send_queues="true"
                 sock_conn_timeout="300"

                 thread_pool.enabled="true"
		         thread_pool.min_threads="1"
		         thread_pool.max_threads="25"
		         thread_pool.keep_alive_time="5000"
		         thread_pool.queue_enabled="false"
		         thread_pool.queue_max_size="100"
		         thread_pool.rejection_policy="run"
		
		         oob_thread_pool.enabled="true"
		         oob_thread_pool.min_threads="1"
		         oob_thread_pool.max_threads="8"
		         oob_thread_pool.keep_alive_time="5000"
		         oob_thread_pool.queue_enabled="false"
		         oob_thread_pool.queue_max_size="100"
		         oob_thread_pool.rejection_policy="run"/>
		         
            <TCPPING timeout="3000"
                     initial_hosts="${jgroups.tcpping.initial_hosts:localhost[7900],localhost[7901]}"
                     port_range="1"
                     num_initial_members="3"/>
            <MERGE2 max_interval="100000"
                      min_interval="20000"/>
            <FD_SOCK/>
            <FD timeout="10000" max_tries="5"   />
            <VERIFY_SUSPECT timeout="1500"  />
            <pbcast.NAKACK
                           use_mcast_xmit="false" gc_lag="0"
                           retransmit_timeout="300,600,1200,2400,4800"
                           discard_delivered_msgs="false"/>
            <UNICAST timeout="300,600,1200" />
            <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
                           max_bytes="4m"/>
            <pbcast.GMS print_local_addr="true" join_timeout="7000"  

                        view_bundling="true"/>
            <pbcast.STREAMING_STATE_TRANSFER/>
	        <!-- <pbcast.STATE_TRANSFER/> -->
	        <pbcast.FLUSH timeout="0"/>
        </config>
    </stack>


    <stack name="tcp-nio"
           description="TCP based stack, with flow control and message bundling. This is usually used when IP
           multicasting cannot be used in a network, e.g. because it is disabled (routers discard multicast).
           Note that TCP.bind_addr and TCPPING.initial_hosts should be set, possibly via system properties, e.g.
           -Djgroups.bind_addr=192.168.5.2 and -Djgroups.tcpping.initial_hosts=192.168.5.2[7800]">
        <config>
            <TCP_NIO
                     recv_buf_size="20000000"
                     send_buf_size="640000"
                     loopback="true"
                     discard_incompatible_packets="true"
                     max_bundle_size="64000"
                     max_bundle_timeout="30"
                     enable_bundling="true"
                     bind_port="7800"
                     use_send_queues="true"
                     sock_conn_timeout="300"
                     reader_threads="8"
                     writer_threads="8"
                     processor_threads="8"
                     processor_minThreads="8"
                     processor_maxThreads="8"
                     processor_queueSize="100"
                     processor_keepAliveTime="9223372036854775807"/>
            <TCPPING timeout="3000"
                     initial_hosts="${jgroups.tcpping.initial_hosts:localhost[7800],localhost[7801]}"
                     port_range="1"
                     num_initial_members="3"/>
            <MERGE2 max_interval="100000"
                      min_interval="20000"/>
            <FD_SOCK/>
            <FD timeout="10000" max_tries="5" />
            <VERIFY_SUSPECT timeout="1500"  />
            <pbcast.NAKACK
                           use_mcast_xmit="false" gc_lag="0"
                           retransmit_timeout="300,600,1200,2400,4800"
                           discard_delivered_msgs="false"/>
            <UNICAST timeout="300,600,1200" />
            <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
                           max_bytes="4m"/>
            <pbcast.GMS print_local_addr="true" join_timeout="5000"  

                        view_bundling="true"/>
            <UFC max_credits="2M"
                 min_threshold="0.4"/>
            <MFC max_credits="2M"
                 min_threshold="0.4"/>
            <FRAG2 frag_size="60000"  />
            <pbcast.STREAMING_STATE_TRANSFER/>
	        <!-- <pbcast.STATE_TRANSFER/> -->
	        <pbcast.FLUSH timeout="0"/>
        </config>
    </stack>


    <stack name="tcp-nio-sync"
           description="TCP based stack, without flow control and without message bundling. This is usually used when IP
           multicasting cannot be used in a network, e.g. because it is disabled (routers discard multicast). This
           configuration should be used instead of tcp when (1) synchronous calls are used and (2) the message volume
           (rate and size) is not that large">
        <config>
            <TCP_NIO
                     recv_buf_size="20000000"
                     send_buf_size="640000"
                     loopback="true"
                     discard_incompatible_packets="true"
                     max_bundle_size="64000"
                     max_bundle_timeout="30"
                     enable_bundling="true"
                     bind_port="7900"
                     use_send_queues="true"
                     sock_conn_timeout="300"
                     reader_threads="8"
                     writer_threads="8"
                     processor_threads="8"
                     processor_minThreads="8"
                     processor_maxThreads="8"
                     processor_queueSize="100"
                     processor_keepAliveTime="9223372036854775807"/>
            <TCPPING timeout="3000"
                     initial_hosts="${jgroups.tcpping.initial_hosts:localhost[7900],localhost[7901]}"
                     port_range="1"
                     num_initial_members="3"/>
            <MERGE2 max_interval="100000"
                      min_interval="20000"/>
            <FD_SOCK/>
            <FD timeout="10000" max_tries="5"   />
            <VERIFY_SUSPECT timeout="1500"  />
            <pbcast.NAKACK
                           use_mcast_xmit="false" gc_lag="0"
                           retransmit_timeout="300,600,1200,2400,4800"
                           discard_delivered_msgs="false"/>
            <UNICAST timeout="300,600,1200" />
            <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
                           max_bytes="4m"/>
            <pbcast.GMS print_local_addr="true" join_timeout="5000"  

                        view_bundling="true"/>
            <pbcast.STREAMING_STATE_TRANSFER/>
	        <!-- <pbcast.STATE_TRANSFER/> -->
	        <pbcast.FLUSH timeout="0"/>
        </config>
    </stack>


    <stack name="tunnel"
           description="Used with a GossipRouter">
        <config>
            <TUNNEL router_port="12001" router_host="127.0.0.1"/>
            <PING timeout="2000"
                    num_initial_members="3"
                  gossip_refresh="10000"
                  gossip_host="127.0.0.1"
                  gossip_port="12001"/>
            <MERGE2 max_interval="20000"
                      min_interval="5000"/>            
            <FD timeout="2000" max_tries="3" />
            <VERIFY_SUSPECT timeout="1500"  />
            <pbcast.NAKACK
                           use_mcast_xmit="false" gc_lag="0"
                           retransmit_timeout="300,600,1200,2400,4800"
                           discard_delivered_msgs="false"/>
            <UNICAST timeout="300,600,1200,2400,3600"/>
            <pbcast.STABLE stability_delay="1000" desired_avg_gossip="5000"
                           max_bytes="4m"/>
            <pbcast.GMS print_local_addr="true" join_timeout="5000"  

                        view_bundling="true"
                        view_ack_collection_timeout="5000"/>
            <UFC max_credits="2M"
                 min_threshold="0.4"/>
            <MFC max_credits="2M"
                 min_threshold="0.4"/>
            <FRAG2 frag_size="60000"  />
            <!-- <pbcast.STREAMING_STATE_TRANSFER/> -->
	        <pbcast.STATE_TRANSFER/>
	        <pbcast.FLUSH timeout="0"/>
        </config>
    </stack>


</protocol_stacks>


