protected RouterStub find(IpAddress router_addr) { for(RouterStub stub: stubs) { IpAddress addr=stub.gossipRouterAddress(); if(Objects.equals(addr, router_addr)) return stub; } return null; }
public void sendToMember(String group, Address dest, Address sender, byte[] data, int offset, int length) throws Exception { try { writeRequest(new GossipData(GossipType.MESSAGE, group, dest, data, offset, length).setSender(sender)); } catch(Exception ex) { throw new Exception(String.format("connection to %s broken. Could not send message to %s: %s", gossipRouterAddress(), dest, ex)); } }
public void sendToAllMembers(final String group, Address sender, final byte[] data, final int offset, final int length) throws Exception { stubManager.forAny( stub -> { try { if(log.isTraceEnabled()) log.trace("sent a message to all members, GR used %s", stub.gossipRouterAddress()); stub.sendToAllMembers(group, sender, data, offset, length); } catch (Exception ex) { log.warn("failed sending a message to all members, router used %s", stub.gossipRouterAddress()); } }); }
/** * Fetches a list of {@link PingData} from the GossipRouter, one for each member in the given group. This call * returns immediately and when the results are available, the * {@link org.jgroups.stack.RouterStub.MembersNotification#members(List)} callback will be invoked. * @param group The group for which we need members information * @param callback The callback to be invoked. */ public void getMembers(final String group, MembersNotification callback) throws Exception { if(callback == null) return; // if(!isConnected()) throw new Exception ("not connected"); synchronized(get_members_map) { List<MembersNotification> set=get_members_map.get(group); if(set == null) get_members_map.put(group, set=new ArrayList<>()); set.add(callback); } try { writeRequest(new GossipData(GossipType.GET_MBRS, group, null)); } catch(Exception ex) { removeResponse(group, callback); throw new Exception(String.format("connection to %s broken. Could not send %s request: %s", gossipRouterAddress(), GossipType.GET_MBRS, ex)); } }
public void sendToSingleMember(final String group, final Address dest, Address sender, final byte[] data, final int offset, final int length) throws Exception { stubManager.forAny( stub -> { try { if(log.isTraceEnabled()) log.trace("sent a message to %s (router used %s)", dest, stub.gossipRouterAddress()); stub.sendToMember(group, dest, sender, data, offset, length); } catch (Exception ex) { log.warn("failed sending a message to %s (router used %s):", dest, stub.gossipRouterAddress(), ex); } }); }
@Override public void findMembers(List<Address> members, boolean initial_discovery, Responses responses) { if(this.cluster_name == null) { log.error(Util.getMessage("ClusternameIsNullCannotGetMembership")); return; } log.trace("fetching members from GossipRouter(s)"); stubManager.forEach( stub -> { try { stub.getMembers(TCPGOSSIP.this.cluster_name, TCPGOSSIP.this); } catch(Throwable t) { log.warn("failed fetching members from %s: %s, cause: %s", stub.gossipRouterAddress(), t, t.getCause()); } }); }
protected RouterStub find(IpAddress router_addr) { for(RouterStub stub: stubs) { IpAddress addr=stub.gossipRouterAddress(); if(Objects.equals(addr, router_addr)) return stub; } return null; }
public void sendToMember(String group, Address dest, Address sender, byte[] data, int offset, int length) throws Exception { try { writeRequest(new GossipData(GossipType.MESSAGE, group, dest, data, offset, length).setSender(sender)); } catch(Exception ex) { throw new Exception(String.format("connection to %s broken. Could not send message to %s: %s", gossipRouterAddress(), dest, ex)); } }
public void sendToAllMembers(final String group, Address sender, final byte[] data, final int offset, final int length) throws Exception { stubManager.forAny( stub -> { try { if(log.isTraceEnabled()) log.trace("sent a message to all members, GR used %s", stub.gossipRouterAddress()); stub.sendToAllMembers(group, sender, data, offset, length); } catch (Exception ex) { log.warn("failed sending a message to all members, router used %s", stub.gossipRouterAddress()); } }); }
public void sendToSingleMember(final String group, final Address dest, Address sender, final byte[] data, final int offset, final int length) throws Exception { stubManager.forAny( stub -> { try { if(log.isTraceEnabled()) log.trace("sent a message to %s (router used %s)", dest, stub.gossipRouterAddress()); stub.sendToMember(group, dest, sender, data, offset, length); } catch (Exception ex) { log.warn("failed sending a message to %s (router used %s):", dest, stub.gossipRouterAddress(), ex); } }); }
/** * Fetches a list of {@link PingData} from the GossipRouter, one for each member in the given group. This call * returns immediately and when the results are available, the * {@link org.jgroups.stack.RouterStub.MembersNotification#members(List)} callback will be invoked. * @param group The group for which we need members information * @param callback The callback to be invoked. */ public void getMembers(final String group, MembersNotification callback) throws Exception { if(callback == null) return; // if(!isConnected()) throw new Exception ("not connected"); synchronized(get_members_map) { List<MembersNotification> set=get_members_map.get(group); if(set == null) get_members_map.put(group, set=new ArrayList<>()); set.add(callback); } try { writeRequest(new GossipData(GossipType.GET_MBRS, group, null)); } catch(Exception ex) { removeResponse(group, callback); throw new Exception(String.format("connection to %s broken. Could not send %s request: %s", gossipRouterAddress(), GossipType.GET_MBRS, ex)); } }
@Override public void findMembers(List<Address> members, boolean initial_discovery, Responses responses) { if(this.cluster_name == null) { log.error(Util.getMessage("ClusternameIsNullCannotGetMembership")); return; } log.trace("fetching members from GossipRouter(s)"); stubManager.forEach( stub -> { try { stub.getMembers(TCPGOSSIP.this.cluster_name, TCPGOSSIP.this); } catch(Throwable t) { log.warn("failed fetching members from %s: %s, cause: %s", stub.gossipRouterAddress(), t, t.getCause()); } }); }