[
https://issues.apache.org/jira/browse/GOSSIP-63?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15901229#comment-15901229
]
ASF GitHub Bot commented on GOSSIP-63:
--------------------------------------
Github user edwardcapriolo commented on a diff in the pull request:
https://github.com/apache/incubator-gossip/pull/41#discussion_r104914004
--- Diff: src/main/java/org/apache/gossip/crdt/GrowOnlyCounter.java ---
@@ -0,0 +1,94 @@
+package org.apache.gossip.crdt;
+
+
+import java.lang.annotation.ElementType;
+import java.util.HashMap;
+import java.util.Map;
+
+public class GrowOnlyCounter implements CrdtCounter<Long, GrowOnlyCounter>
{
+
+
+ private final Map<String, Long> counters = new HashMap<>();
+ private final String myID;
+
+ public GrowOnlyCounter(String myID) {
+ this.myID = myID;
+ counters.putIfAbsent(myID, 0L);
+ }
+
+ private GrowOnlyCounter(String myID, Long count) {
+ this.myID = myID;
+ counters.putIfAbsent(myID, count);
+ }
+
+ private GrowOnlyCounter(String myID, Map<String, Long> counters) {
+ this.myID = myID;
+ this.counters.putAll(counters);
+ }
+
+
+ @Override
+ public GrowOnlyCounter merge(GrowOnlyCounter other) {
+ //System.out.println(other);
+ this.counters.putIfAbsent(other.myID,
other.counters.get(other.myID));
+ Map<String , Long> updatedCounter = new HashMap<>();
+ for (Map.Entry<String, Long> entry : this.counters.entrySet()) {
+ String key = entry.getKey();
+ Long value = entry.getValue();
+
+ if(other.counters.containsKey(key)){
+ Long newValue = Math.max(value,other.counters.get(key));
+ updatedCounter.put(key,newValue);
+ }else {
+ updatedCounter.put(key,value);
+ }
+
+ }
+
+ return new GrowOnlyCounter(myID,updatedCounter);
+ }
+
+ @Override
+ public Long value() {
+ Long globalCount = 0L;
+ for (Long increment : counters.values()) {
+ globalCount += increment;
+ }
+ return globalCount;
+ }
+
+ @Override
+ public GrowOnlyCounter optimize() {
+ return new GrowOnlyCounter(myID, counters.get(myID));
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+
+ GrowOnlyCounter other = (GrowOnlyCounter) obj;
+
+ return value().longValue() == other.value().longValue();
+ }
+
+ public void increase() {
+ counters.replace(myID, counters.get(myID) + 1);
+ }
+
+ public void increaseBy(int count) {
--- End diff --
Type should be immutable remove this.
> Implement Crdt G-Counter
> ------------------------
>
> Key: GOSSIP-63
> URL: https://issues.apache.org/jira/browse/GOSSIP-63
> Project: Gossip
> Issue Type: New Feature
> Reporter: Edward Capriolo
>
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)