[ https://issues.apache.org/jira/browse/GOSSIP-41?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16143745#comment-16143745 ]
ASF GitHub Bot commented on GOSSIP-41: -------------------------------------- Github user edwardcapriolo commented on a diff in the pull request: https://github.com/apache/incubator-gossip/pull/68#discussion_r135516447 --- Diff: gossip-base/src/main/java/org/apache/gossip/manager/AbstractActiveGossiper.java --- @@ -92,22 +102,59 @@ public final void sendSharedData(LocalMember me, LocalMember member){ UdpSharedDataMessage message = new UdpSharedDataMessage(); message.setUuid(UUID.randomUUID().toString()); message.setUriFrom(me.getId()); - message.setExpireAt(innerEntry.getValue().getExpireAt()); - message.setKey(innerEntry.getValue().getKey()); - message.setNodeId(innerEntry.getValue().getNodeId()); - message.setTimestamp(innerEntry.getValue().getTimestamp()); - message.setPayload(innerEntry.getValue().getPayload()); - message.setReplicable(innerEntry.getValue().getReplicable()); + copySharedDataMessage(innerEntry.getValue(), message); gossipCore.sendOneWay(message, member.getUri()); } - sharedDataHistogram.update(System.currentTimeMillis() - startTime); } - + + /** Send shared data by batching together several entries. */ + private void sendSharedDataInBulkInternal(LocalMember me, LocalMember member) { + UdpSharedDataBulkMessage udpMessage = new UdpSharedDataBulkMessage(); + udpMessage.setUuid(UUID.randomUUID().toString()); + udpMessage.setUriFrom(me.getId()); + for (Entry<String, SharedDataMessage> innerEntry : gossipCore.getSharedData().entrySet()) { + if (innerEntry.getValue().getReplicable() != null && !innerEntry.getValue().getReplicable() + .shouldReplicate(me, member, innerEntry.getValue())) { + continue; + } + SharedDataMessage message = new SharedDataMessage(); + copySharedDataMessage(innerEntry.getValue(), message); + udpMessage.addMessage(message); + if (udpMessage.getMessages().size() == gossipSettings.getBulkTransferSize()) { + gossipCore.sendOneWay(udpMessage, member.getUri()); + udpMessage = new UdpSharedDataBulkMessage(); + udpMessage.setUuid(UUID.randomUUID().toString()); + udpMessage.setUriFrom(me.getId()); + } + } + if (udpMessage.getMessages().size() > 0) { + gossipCore.sendOneWay(udpMessage, member.getUri()); + } + } + + private void copySharedDataMessage(SharedDataMessage original, SharedDataMessage copy) { + copy.setExpireAt(original.getExpireAt()); + copy.setKey(original.getKey()); + copy.setNodeId(original.getNodeId()); + copy.setTimestamp(original.getTimestamp()); + copy.setPayload(original.getPayload()); + copy.setReplicable(original.getReplicable()); + } + public final void sendPerNodeData(LocalMember me, LocalMember member){ if (member == null){ return; } long startTime = System.currentTimeMillis(); + if (gossipSettings.isBulkTransfer()) { + sendPerNodeDataInBulkInternal(me, member); + } else --- End diff -- same deal use { } even for one line if > Transfer gossip data in bulk > ---------------------------- > > Key: GOSSIP-41 > URL: https://issues.apache.org/jira/browse/GOSSIP-41 > Project: Gossip > Issue Type: Improvement > Reporter: Edward Capriolo > Assignee: Pooya Salehi > > Currently the process that transfers shared data and per node data iterates a > map transmitting a single datum at a time using one way communication. We > could transmit more key values at once by simply saying if keys < 100 > transfer all at once, or by collecting keys and sending in groups of 100. > This would greatly lower chatter communicating data. -- This message was sent by Atlassian JIRA (v6.4.14#64029)