@Override public ModelNode execute(JChannel channel) { return new ModelNode(channel.getAddressAsString()); } },
public void startTest() throws Exception { System.out.println("Start testing..."); createJChannel(); sendMessages(); awaitUntilAllMessagesAreReceived(); String filePath = jChannel.getAddressAsString() + OUTPUT_FILE_SUFFIX; System.out.println("Writing messages in " + filePath); FileWriter fileWriter = new FileWriter(filePath); for (String s : receiver.getMessageList()) { fileWriter.write(s); fileWriter.write("\n"); } fileWriter.flush(); fileWriter.close(); System.out.println("All done!"); awaitUntilAllFinishes(); printSenderInfo(); receiver.printReceiverInfo(); printJMXStats(); }
private void sendMessages() throws Exception { System.out.println("Start sending messages..."); String address = jChannel.getAddressAsString(); List<Address> mbrs = jChannel.getView().getMembers(); start = System.nanoTime(); for (int i = 0; i < numberOfMessages; ++i) { AnycastAddress dst = getDestinations(mbrs); Message message = new Message().dest(dst); DataMessage dataMessage = new DataMessage(); dataMessage.type = DataMessage.DATA; dataMessage.data = address + ":" + i; message.setObject(dataMessage); jChannel.send(message); sentBytes += (dataMessage.data.getBytes().length + 1); sentMessages++; } stop = System.nanoTime(); System.out.println("Finish sending messages..."); }
log.info("Received request to inject view %s", newView); String[] perNode = newView.split(NODE_VIEWS_SEPARATOR); String thisNodeAddress = getProtocolStack().getChannel().getAddressAsString();
@Override public ModelNode execute(JChannel channel) { return new ModelNode(channel.getAddressAsString()); } },
@Override public ModelNode execute(JChannel channel) { return new ModelNode(channel.getAddressAsString()); } },
@Override public String getAddressAsString() { if (isClustered()) { return channel.getAddressAsString(); } else { return "localhost"; } }
@Override public List<String> getOtherMembersAsString() { return getMembersAsString().stream().filter(a -> !a.equalsIgnoreCase(this.channel.getAddressAsString())).collect(Collectors.toList()); }
public List<Address> getOtherMembers() { return getMembers().stream().filter(a -> !a.toString().equalsIgnoreCase(this.channel.getAddressAsString())).collect(Collectors.toList()); }
public <K, V> AsyncMap<K, V> createAsyncMap(String name) { logDebug(() -> String.format("method createAsyncMap address[%s] name[%s]", channel.getAddressAsString(), name)); Map<K, V> map = mapService.<K, V>mapCreate(name); return new AsyncMapWrapper<>(name, map, executorService); }
public <K, V> Map<K, V> createSyncMap(String name) { logDebug(() -> String.format("method createSyncMap address[%s] name[%s]", channel.getAddressAsString(), name)); Map<K, V> map = mapService.<K, V>mapCreate(name); return new SyncMapWrapper<>(name, map, executorService); }
public <K, V> AsyncMultiMap<K, V> createAsyncMultiMap(String name) { logDebug(() -> String.format("method createAsyncMultiMap address[%s] name[%s]", channel.getAddressAsString(), name)); MultiMap<K, V> map = multiMapService.<K, V>multiMapCreate(name); return new AsyncMultiMapWrapper<>(name, map, executorService); }
public void startTest() throws Exception { System.out.println("Start testing..."); createJChannel(); sendMessages(); awaitUntilAllMessagesAreReceived(); String filePath = jChannel.getAddressAsString() + OUTPUT_FILE_SUFFIX; System.out.println("Writing messages in " + filePath); FileWriter fileWriter = new FileWriter(filePath); for (String s : receiver.getMessageList()) { fileWriter.write(s); fileWriter.write("\n"); } fileWriter.flush(); fileWriter.close(); System.out.println("All done!"); awaitUntilAllFinishes(); printSenderInfo(); receiver.printReceiverInfo(); printJMXStats(); }
public void redeliverMessage(final String other, ClusterMessage clusterMessage) { if (isClustered()) { try { final Optional<Address> address = getOtherMembers().stream() .filter(member -> other.equalsIgnoreCase(member.toString())) .findFirst(); if (address.isPresent()) { log.info("Redeliver message with id: {}, of type:{} to {} from {}", clusterMessage.getId(), clusterMessage.getType(), address, channel.getAddressAsString()); MessageDeliveryStatus status = ensureMessageDeliveryMap.getIfPresent(clusterMessage.getId()); channel.send(address.get(), clusterMessage); clusterNodeSummary.messageSent(clusterMessage.getType()); if (status != null) { status.redeliveredTo(address.toString()); } } else { throw new IllegalArgumentException("Cluster node does not exist: " + other); } } catch (final Exception e) { log.error("Unable to redeliver message of type: {} to: {}, ", clusterMessage.getType(), other, e.getMessage(), e); } } }
@Override public void sendMessageToOther(final String other, final String type, final Serializable message) { if (isClustered()) { try { final Optional<Address> address = getOtherMembers().stream() .filter(member -> other.equalsIgnoreCase(member.toString())) .findFirst(); if (address.isPresent()) { String id = newMessageId(); log.info("Sending message with id: {}, of type:{} to {} from {}", id, type, address, channel.getAddressAsString()); ClusterMessage clusterMessage = new StandardClusterMessage(id, type, message); MessageDeliveryStatus status = new DefaultMessageDeliveryStatus(clusterMessage); if (sendAcknowledgementMessage) { ensureMessageDeliveryMap.put(clusterMessage.getId(), status); } channel.send(address.get(), clusterMessage); clusterNodeSummary.messageSent(type); status.sentTo(address.toString()); } else { throw new IllegalArgumentException("Cluster node does not exist: " + other); } } catch (final Exception e) { log.error("Unable to send message of type: {} to other node:{}, {} ", type, other, e.getMessage(), e); } } }
/** * All messages are converted to a ClusterMessage * * @param message a message to send */ @Override public void sendMessage(String type, Serializable message) { if (isClustered()) { try { String id = newMessageId(); log.info("Sending message with id: {}, of type:{} to ALL from {}", id, type, channel.getAddressAsString()); ClusterMessage clusterMessage = new StandardClusterMessage(id, type, message); MessageDeliveryStatus status = new DefaultMessageDeliveryStatus(clusterMessage, new HashSet<String>(getMembersAsString())); if (sendAcknowledgementMessage) { //store this message id in the acknowledgement map ensureMessageDeliveryMap.put(clusterMessage.getId(), status); } channel.send(null, clusterMessage); } catch (Exception e) { log.error("Unable to send message of type: {} to other nodes: {} ", type, e.getMessage(), e); } } }
private void sendMessages() throws Exception { System.out.println("Start sending messages..."); String address = jChannel.getAddressAsString(); List<Address> mbrs = jChannel.getView().getMembers(); start = System.nanoTime(); for (int i = 0; i < numberOfMessages; ++i) { AnycastAddress dst = getDestinations(mbrs); Message message = new Message().dest(dst); DataMessage dataMessage = new DataMessage(); dataMessage.type = DataMessage.DATA; dataMessage.data = address + ":" + i; message.setObject(dataMessage); jChannel.send(message); sentBytes += (dataMessage.data.getBytes().length + 1); sentMessages++; } stop = System.nanoTime(); System.out.println("Finish sending messages..."); }
@Override public void sendMessageToOthers(String type, Serializable message) { if (isClustered()) { try { clusterNodeSummary.messageSent(type); String id = newMessageId(); ClusterMessage clusterMessage = new StandardClusterMessage(id, type, message); MessageDeliveryStatus status = new DefaultMessageDeliveryStatus(clusterMessage); if (sendAcknowledgementMessage) { ensureMessageDeliveryMap.put(clusterMessage.getId(), status); } for (Address address : getOtherMembers()) { log.info("Sending message with id:{} of type:{} to {} from {} ", id, type, address, this.channel.getAddressAsString()); channel.send(address, clusterMessage); status.sentTo(address.toString()); } } catch (Exception e) { log.error("Unable to send message of type: {} to other nodes: {} ", type, e.getMessage(), e); } } }
/** * Start a channel on the cluster */ @Override public void start() throws Exception { if (channel != null) { log.info("Kylo cluster has already been started"); } else if (StringUtils.isNotBlank(jgroupsConfigFile)) { try { channel = new JChannel(jgroupsConfigFile); String name = Util.generateLocalName(); channel.setName(name); channel.setReceiver(this); channel.addChannelListener(new Listener()); channel.enableStats(true); // do this before connecting, once connected messages may be in flight and methods in clusterSummary will be called clusterNodeSummary = new DefaultClusterNodeSummary(channel.getAddressAsString()); channel.connect(CLUSTER_NAME); clusterNodeSummary.connected(); } catch (FileNotFoundException e) { log.error("Unable to find the jgroups cluster configuration file {}. Kylo is not clustered ", jgroupsConfigFile); } } }
@Override public void join(Handler<AsyncResult<Void>> handler) { vertx.executeBlocking((future) -> { synchronized (lock) { if (!active) { try { if (! customChannel) { try (InputStream stream = getConfigStream()) { channel = new JChannel(stream); } } topologyListener = new TopologyListener(vertx); channel.setReceiver(topologyListener); channel.connect(CLUSTER_NAME); address = channel.getAddressAsString(); logInfo(() -> String.format("Node id [%s] join the cluster", this.getNodeID())); counterService = new CounterService(channel); lockService = new LockService(channel); cacheManager = new CacheManager(vertx, channel); cacheManager.start(); active = true; } catch (Exception e) { future.fail(e); return; } } future.complete(); } }, handler); }