[
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)