GOSSIP-59 OrSet implementation
This commit is contained in:
@ -119,14 +119,15 @@ public class GossipCore implements GossipCoreConstants {
|
||||
sharedData.putIfAbsent(message.getKey(), message);
|
||||
} else {
|
||||
if (message.getPayload() instanceof Crdt){
|
||||
SharedGossipDataMessage m = sharedData.get(message.getKey());
|
||||
SharedGossipDataMessage curretnt = sharedData.get(message.getKey());
|
||||
SharedGossipDataMessage merged = new SharedGossipDataMessage();
|
||||
merged.setExpireAt(message.getExpireAt());
|
||||
merged.setKey(m.getKey());
|
||||
merged.setKey(curretnt.getKey());
|
||||
merged.setNodeId(message.getNodeId());
|
||||
merged.setTimestamp(message.getTimestamp());
|
||||
merged.setPayload( ((Crdt) message.getPayload()).merge((Crdt)m.getPayload()));
|
||||
sharedData.put(m.getKey(), merged);
|
||||
Crdt mergedCrdt = ((Crdt) message.getPayload()).merge((Crdt)curretnt.getPayload());
|
||||
merged.setPayload( mergedCrdt );
|
||||
sharedData.put(curretnt.getKey(), merged);
|
||||
} else {
|
||||
if (previous.getTimestamp() < message.getTimestamp()) {
|
||||
sharedData.replace(message.getKey(), previous, message);
|
||||
@ -370,9 +371,10 @@ public class GossipCore implements GossipCoreConstants {
|
||||
copy.setExpireAt(message.getExpireAt());
|
||||
copy.setKey(message.getKey());
|
||||
copy.setNodeId(message.getNodeId());
|
||||
copy.setTimestamp(message.getTimestamp());
|
||||
@SuppressWarnings("unchecked")
|
||||
Crdt merged = ((Crdt) ret.getPayload()).merge((Crdt) message.getPayload());
|
||||
message.setPayload(merged);
|
||||
copy.setPayload(merged);
|
||||
boolean replaced = sharedData.replace(message.getKey(), ret, copy);
|
||||
if (replaced){
|
||||
return merged;
|
||||
|
@ -18,9 +18,11 @@
|
||||
package org.apache.gossip.manager.random;
|
||||
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import com.fasterxml.jackson.core.JsonGenerator.Feature;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.apache.gossip.GossipMember;
|
||||
import org.apache.gossip.GossipSettings;
|
||||
import org.apache.gossip.crdt.CrdtModule;
|
||||
import org.apache.gossip.event.GossipListener;
|
||||
import org.apache.gossip.manager.GossipManager;
|
||||
import org.apache.gossip.manager.handlers.DefaultMessageInvoker;
|
||||
@ -126,6 +128,8 @@ public class RandomGossipManager extends GossipManager {
|
||||
if (objectMapper == null) {
|
||||
objectMapper = new ObjectMapper();
|
||||
objectMapper.enableDefaultTyping();
|
||||
objectMapper.registerModule(new CrdtModule());
|
||||
objectMapper.configure(Feature.WRITE_NUMBERS_AS_STRINGS, false);
|
||||
}
|
||||
if (messageInvoker == null) {
|
||||
messageInvoker = new DefaultMessageInvoker();
|
||||
|
Reference in New Issue
Block a user