[jgroups-users] v3->v4: my ReceiverAdapter methods are not being called
Brought to you by:
belaban
From: Questions/problems r. to u. J. <jav...@li...> - 2017-11-03 19:30:08
|
Thank you for previous help with castMessage/handle and serializable->streamable. That all went fine, and I can send messages that way properly now across the cluster. Now I'm seeing a bigger problem, but it's so easy to describe that am hopeful it's a simple RTFM thing (though I've read it several times now). None of my ReceiverAdapter methods are being called. Am trying 4.0.8 now but also tried 4.0.7. I can tell from logs/debugger that nodes are finding each other and joining, are sending messages from one to the other [1], and a getState call is made [2]. I override receive, get/setState, viewAccepted, and suspect, and none of them are called. Note that this same code worked with v3. My base class is declared with "extends ReceiverAdapter implements RequestHandler" and I set up like this (unchanged from v3): jChannel = env.createJChannel(); // tried with name(<string>) also jChannel.setReceiver(this); dispatcher = new MessageDispatcher(jChannel, this); jChannel.connect(<name>, null, 10 * 1000); With channel creation like this: Protocol[] stack = { new TCP() .setValue("bind_addr", InetAddress.getByName(<bind address>)) .setValue("bind_port", <port>) .setValue("thread_pool_min_threads", 1) .setValue("thread_pool_keep_alive_time", 5000) .setValue("send_buf_size", 640000) .setValue("sock_conn_timeout", 300) .setValue("recv_buf_size", 5000000), new TCPPING() .setValue("initial_hosts", <list>) .setValue("send_cache_on_join", true) .setValue("port_range", 0), new MERGE3() .setValue("min_interval", 10000) .setValue("max_interval", 30000), new FD_ALL() .setValue("timeout", <timeout>), new VERIFY_SUSPECT() .setValue("timeout", 1500), new BARRIER(), new NAKACK2() .setValue("use_mcast_xmit", false), new UNICAST3(), new STABLE() .setValue("desired_avg_gossip", 50000) .setValue("max_bytes", 4000000), // createAuthProtocol(), <-- commented for now new GMS() .setValue("join_timeout", 3000), new MFC() .setValue("max_credits", 2000000) .setValue("min_credits", 800000), new FRAG2(), new STATE_TRANSFER()}; return new JChannel(stack); Since *none* of my ReceiverAdapter code is being called, am hoping it's something dumb. I stepped into the receive case to try to figure it out and found here is where the message is being swallowed: RequestCorrelator, called by MessageDispatcher. hdr = null: public void receiveMessageBatch(MessageBatch batch) { for(Message msg : batch) { Header hdr=msg.getHeader(this.corr_id); if(hdr == null || hdr.corrId != this.corr_id) // msg was sent by a different request corr in the same stack continue; if(hdr instanceof MultiDestinationHeader) { [...] } dispatch(msg, hdr); } } There is no header that matches this corr_id (200). The headers are NakAckHeader2 (41) and TpHeader (57). Thanks, Bobby [1] 11/3/17 12:03:56 PM org.jgroups.protocols.TP passBatchUp FINER: localhost-63787: received message batch of 1 messages from localhost-63787 11/3/17 12:03:56 PM org.jgroups.protocols.pbcast.NAKACK2 handleMessages FINER: localhost-63787: received localhost-63787#1-1 (1 messages) [2] 11/3/17 11:51:00 AM org.jgroups.protocols.pbcast.STATE_TRANSFER handleStateReq FINE: localhost-50939: received state request from localhost-28424 |