void writeSharedToDisk(){ try (FileOutputStream fos = new FileOutputStream(sharedPath)){ objectMapper.writeValue(fos, gossipCore.getSharedData()); } catch (IOException e) { LOGGER.warn(e); } }
void runSharedOnce(){ for (Entry<String, SharedDataMessage> entry : gossipCore.getSharedData().entrySet()){ if (entry.getValue().getExpireAt() < clock.currentTimeMillis()){ gossipCore.getSharedData().remove(entry.getKey(), entry.getValue()); } } }
public SharedDataMessage findSharedGossipData(String key){ SharedDataMessage l = gossipCore.getSharedData().get(key); if (l == null){ return null; } if (l.getExpireAt() < clock.currentTimeMillis()){ return null; } else { return l; } }
@SuppressWarnings("rawtypes") public Crdt findCrdt(String key){ SharedDataMessage l = gossipCore.getSharedData().get(key); if (l == null){ return null; } if (l.getExpireAt() < clock.currentTimeMillis()){ return null; } else { return (Crdt) l.getPayload(); } }
/** Send shared data one entry at a time. */ private void sendSharedDataInternal(LocalMember me, LocalMember member) { for (Entry<String, SharedDataMessage> innerEntry : gossipCore.getSharedData().entrySet()){ if (innerEntry.getValue().getReplicable() != null && !innerEntry.getValue().getReplicable() .shouldReplicate(me, member, innerEntry.getValue())) { continue; } UdpSharedDataMessage message = new UdpSharedDataMessage(); message.setUuid(UUID.randomUUID().toString()); message.setUriFrom(me.getId()); copySharedDataMessage(innerEntry.getValue(), message); gossipCore.sendOneWay(message, member.getUri()); } }
/** 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()); } }