Re: [jgroups-users] JGroups failing to give up on crashed coordinator

Questions/problems related to using JGroups <[email protected]>
Newsgroups gmane.comp.java.javagroups.general
Message-ID <[email protected]>

On 26/01/16 02:51, Questions/problems related to using JGroups wrote:
> This is on 3.6.4 final.
>
> This problem originally occurred as a coincidence with suspect hardware
> but it is  reproducible by resetting/cycling power on multiple nodes
> including the coordinator in quick succession.

I assume not a 'shutdown -r now'?

> If I reset only the  coordinator or if I reset a group of nodes not including the coordinator
> I don't have a problem.

The problem is? What's giving up on a crashed coordinator? Still trying 
to ask a crashed coord for cluster admission? Failing to elect a new coord?

> It also doesn't happen when I killed the
> software processes but don't reset the hardware so the actual loss of
> the wireless network destination is an important contributor to the
> problem.

So can this be reproduced by iptables, mimicking a network loss?

> My expectation would be that JGroups would install a new view
> without the crashed nodes or even a view containing just the individual
> nodes.


So if you have {A,B,C,D} and power down A, then B, C and D should all 
install view {B,C,D}, after roughly 12 seconds. Is this not the case?
Does this happen in a wired network, or only in the wireless network?


>  As best as I can tell the nodes in this stuck state are creating
> a self-perpetuating network problem that never clears most likely due to
> the resulting traffic storm (I see a huge spike in network layer packet
> retransmissions -- to as much as 50% of all traffic).  If I subsequently
> stop JGroups on all nodes I can then restart with no problems.


This shouldn't happen: a powered-down node should get excluded.
I can try to reproduce this in my own environment, but I'm pretty sure 
it will work. So do you have a special env? Do you want me to try?


> I have included some logs captured  on node 11 well after the resets
> occurred.  In this case it was node 7,13, and 14 that I reset where 7
> was coordinator, node 14 was the next node in the view, node 13 was in
> about the middle, and node 11 was near the end.   I have a log in the
> suspect callback that does not ever get generated in this scenario.

I don't see GMS in here, can you enable it? We should see either the 
coord, or the next-in-line to become coord if the coord crashed try to 
install a new view...


> This is what the stack looks like and it seems to work pretty well most
> of the time.  I've tried varying timeouts, removing VERIFY and FD_SOCK,
> increasing bundle and frag sizes and nothing seems to prevent this.
> I've run with abort as the rejection policy to see if maybe I'm
> overflowing my queues but I never saw an abort.

Can you try disabling the queue in all 3 thread pools?
Also, remove the timer section as the default is usually pretty good.

OK, here's how I'd like to proceed. You need to come up with the 
simplest *reproducible* scenario that I can test on my end (with your 
config), e.g. powering down A in {A,B,C,D}.


> <!--
>    Stack which matches the one setup programmatically.
>    Variable substitution is used for cluster/node specific bind
> address/port values.
> -->
>
> <config xmlns="urn:org:jgroups"
>          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>          xsi:schemaLocation="urn:org:jgroups
> http://www.jgroups.org/schema/jgroups.xsd">
>      <UDP
>          enable_diagnostics="true"
>          ip_mcast="true"
>          ip_ttl="8"
>          tos="8"
>          mcast_port="${jgroups.udp.mcast_port:45588}"
>          bind_addr="${jgroups.udp.bind_addr:127.0.0.1}"
>          bind_port="0"
>
>          ucast_recv_buf_size="200000"
>          ucast_send_buf_size="200000"
>          mcast_recv_buf_size="200000"
>          mcast_send_buf_size="200000"
>
>          max_bundle_size="1400"
>          max_bundle_timeout="25"
>
>          thread_naming_pattern="pcl"
>
>          thread_pool_enabled="true"
>          thread_pool_min_threads="1"
>          thread_pool_max_threads="16"
>          thread_pool_keep_alive_time="10000"
>          thread_pool_queue_enabled="true"
>          thread_pool_queue_max_size="50"
>          thread_pool_rejection_policy="discard"
>
>          internal_thread_pool_enabled="true"
>          internal_thread_pool_min_threads="2"
>          internal_thread_pool_max_threads="16"
>          internal_thread_pool_keep_alive_time="10000"
>          internal_thread_pool_queue_enabled="true"
>          internal_thread_pool_queue_max_size="50"
>          internal_thread_pool_rejection_policy="discard"
>
>          oob_thread_pool_enabled="true"
>          oob_thread_pool_min_threads="1"
>          oob_thread_pool_max_threads="32"
>          oob_thread_pool_keep_alive_time="10000"
>          oob_thread_pool_queue_enabled="true"
>          oob_thread_pool_queue_max_size="50"
>          oob_thread_pool_rejection_policy="discard"
>
>          timer_type="new3"
>          timer_min_threads="2"
>          timer_max_threads="8"
>          timer_keep_alive_time="3000"
>          timer_queue_max_size="50"
>          timer_rejection_policy="discard"
>      />
>      <PING />
>      <MERGE3
>          min_interval="2500"
>          max_interval="5000"
>          check_interval="16000"
>      />
>      <FD_SOCK
>           bind_addr="${jgroups.udp.bind_addr:127.0.0.1}"
>      />
>      <FD_ALL
>         interval="3000"
>         timeout="10000"
>         msg_counts_as_heartbeat="false"
>      />
>      <VERIFY_SUSPECT
>          timeout="1500"
>          use_mcast_rsps="false"
>      />
>      <BARRIER />
>      <pbcast.NAKACK2
>          xmit_interval="500"
>          xmit_table_num_rows="100"
>          xmit_table_msgs_per_row="2000"
>          xmit_table_max_compaction_time="30000"
>          max_msg_batch_size="500"
>          use_mcast_xmit="false"
>          discard_delivered_msgs="true"
>      />
>      <UNICAST3
>          conn_expiry_timeout="0"
>          xmit_interval="500"
>          xmit_table_num_rows="100"
>          xmit_table_msgs_per_row="2000"
>          xmit_table_max_compaction_time="60000"
>          max_msg_batch_size="500"
>      />
>      <FRAG2
>          frag_size="1250"
>      />
>      <RSVP
>          ack_on_delivery="false"
>          resend_interval="250"
>          timeout="5000"
>          throw_exception_on_timeout="true"
>      />
>      <pbcast.STABLE
>          stability_delay="1000"
>          desired_avg_gossip="15000"
>          max_bytes="4M"
>          send_stable_msgs_to_coord_only="false"
>      />
>      <pbcast.GMS
>          max_join_attempts="100000"
>          print_local_addr="true"
>          view_bundling="true"
>          join_timeout="15000"
>          leave_timeout="15000"
>          use_flush_if_present="true"
>          use_merger2="true"
>          print_physical_addrs="true"
>          view_ack_collection_timeout="10000"
>          merge_timeout="10000"
>      />
>      <pbcast.STATE
>         buffer_size="10000"
>         max_pool="5"
>         pool_thread_keep_alive="10000"
>      />
> </config>
>
> Any ideas?
>
> Thanks,
> JT



-- 
Bela Ban, JGroups lead (http://www.jgroups.org)


------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.