
<!--
  Sample file that defines a number of stacks, used by the multiplexer
  Author: Bela Ban
  Version: $Id: stacks.xml,v 1.35.2.10 2010/02/08 07:18:11 belaban Exp $
-->
<protocol_stacks>
    <stack name="udp"
           description="Default: IP multicast based stack, with flow control and message bundling">
        <config>
            <UDP
                 mcast_addr="${jgroups.udp.mcast_addr:228.10.10.10}"
                 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"
                 use_incoming_packet_handler="true"
                 ip_ttl="${jgroups.udp.ip_ttl:2}"
                 enable_bundling="true"
                 
                 use_concurrent_stack="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" shun="true"/>
            <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="400000"/>
            <pbcast.GMS print_local_addr="true" join_timeout="5000"  
                        shun="false"
                        view_bundling="true"/>
            <FC max_credits="2000000"
                min_threshold="0.10"/>
            <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_addr="${jgroups.udp.mcast_addr:229.10.10.10}"
                 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"
                 use_incoming_packet_handler="true"
                 ip_ttl="${jgroups.udp.ip_ttl:2}"
                 enable_bundling="true"
                 
                 use_concurrent_stack="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" shun="true"/>
            <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="400000"/>
            <pbcast.GMS print_local_addr="true" join_timeout="5000"  
                        shun="false"
                        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 start_port="7800"
                 loopback="true"
                 recv_buf_size="20000000"
                 send_buf_size="640000"
                 discard_incompatible_packets="true"
                 max_bundle_size="64000"
                 max_bundle_timeout="30"
                 use_incoming_packet_handler="true"
                 enable_bundling="true"
                 use_send_queues="false"
                 sock_conn_timeout="300"
                 skip_suspected_members="true"
                 
                 use_concurrent_stack="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"/>
		         
            <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"   shun="true"/>
            <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="400000"/>
            <pbcast.GMS print_local_addr="true" join_timeout="5000"  
                        shun="false"
                        view_bundling="true"/>
            <FC max_credits="2000000"
                min_threshold="0.10"/>
            <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 start_port="7900"
                 loopback="true"
                 recv_buf_size="20000000"
                 send_buf_size="640000"
                 discard_incompatible_packets="true"
                 max_bundle_size="64000"
                 max_bundle_timeout="30"
                 use_incoming_packet_handler="true"
                 enable_bundling="true"
                 use_send_queues="false"
                 sock_conn_timeout="300"
                 skip_suspected_members="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"/>
		         
            <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"   shun="true"/>
            <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="400000"/>
            <pbcast.GMS print_local_addr="true" join_timeout="5000"  
                        shun="false"
                        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]
           We currently require use_incoming_packet_handler=true (release 2.4 will support use_incoming_packet_handler=false
           due to threadless stack support).">
        <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"
                     use_incoming_packet_handler="true"
                     enable_bundling="true"
                     start_port="7800"
                     use_send_queues="false"
                     sock_conn_timeout="300" skip_suspected_members="true"
                     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" shun="true"/>
            <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="400000"/>
            <pbcast.GMS print_local_addr="true" join_timeout="5000"  
                        shun="false"
                        view_bundling="true"/>
            <FC max_credits="2000000"
                min_threshold="0.10"/>
            <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"
                     use_incoming_packet_handler="true"
                     enable_bundling="true"
                     start_port="7900"
                     use_send_queues="false"
                     sock_conn_timeout="300" skip_suspected_members="true"
                     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"   shun="true"/>
            <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="400000"/>
            <pbcast.GMS print_local_addr="true" join_timeout="5000"  
                        shun="false"
                        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="${jgroups.tunnel.router_port:12001}" router_host="${jgroups.tunnel.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" shun="true"/>
            <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="400000"/>
            <pbcast.GMS print_local_addr="true" join_timeout="5000"  
                        shun="false"
                        view_bundling="true"
                        view_ack_collection_timeout="5000"/>
            <FC max_credits="2000000"
                min_threshold="0.10"/>
            <FRAG2 frag_size="60000"  />
            <!-- <pbcast.STREAMING_STATE_TRANSFER/> -->
	        <pbcast.STATE_TRANSFER/>
	        <pbcast.FLUSH timeout="0"/>
        </config>
    </stack>


</protocol_stacks>


