From af5896a160644ec4404231b7db28a1384af8aee7 Mon Sep 17 00:00:00 2001 From: "Nelson R. Perez" Date: Thu, 8 Nov 2018 17:59:01 -0500 Subject: [PATCH] Replaced the PriorityQueue by the PriorityBlockingQueue in the LatencyNodeProvider class due to the fact that multiple threads can access the same provider --- .../network/LatencyNodeProvider.java | 25 +++++++------------ 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/graphenej/src/main/java/cy/agorise/graphenej/network/LatencyNodeProvider.java b/graphenej/src/main/java/cy/agorise/graphenej/network/LatencyNodeProvider.java index 8531936..92bf2c5 100644 --- a/graphenej/src/main/java/cy/agorise/graphenej/network/LatencyNodeProvider.java +++ b/graphenej/src/main/java/cy/agorise/graphenej/network/LatencyNodeProvider.java @@ -2,18 +2,15 @@ package cy.agorise.graphenej.network; import java.util.ArrayList; import java.util.Collections; -import java.util.HashSet; import java.util.List; -import java.util.PriorityQueue; +import java.util.concurrent.PriorityBlockingQueue; public class LatencyNodeProvider implements NodeProvider { - private HashSet mRemovedNodeURLs; - private PriorityQueue mFullNodeHeap; + private PriorityBlockingQueue mFullNodeHeap; public LatencyNodeProvider(){ - mFullNodeHeap = new PriorityQueue<>(); - mRemovedNodeURLs = new HashSet<>(); + mFullNodeHeap = new PriorityBlockingQueue<>(); } @Override @@ -24,13 +21,12 @@ public class LatencyNodeProvider implements NodeProvider { @Override public void addNode(FullNode fullNode) { mFullNodeHeap.add(fullNode); - mRemovedNodeURLs.remove(fullNode.getUrl()); } @Override public boolean updateNode(FullNode fullNode) { - if (!mRemovedNodeURLs.contains(fullNode.getUrl())) { - mFullNodeHeap.remove(fullNode); + boolean existed = mFullNodeHeap.remove(fullNode); + if(existed){ return mFullNodeHeap.offer(fullNode); } return false; @@ -44,19 +40,16 @@ public class LatencyNodeProvider implements NodeProvider { * @return True if the node priority was updated successfully */ public boolean updateNode(FullNode fullNode, int latency){ - if(!mRemovedNodeURLs.contains(fullNode.getUrl()) && mFullNodeHeap.remove(fullNode)){ - fullNode.addLatencyValue(latency); + boolean existed = mFullNodeHeap.remove(fullNode); + if(existed){ return mFullNodeHeap.add(fullNode); - }else{ - return false; } + return false; } @Override public void removeNode(FullNode fullNode) { - if (mFullNodeHeap.remove(fullNode)) { - mRemovedNodeURLs.add(fullNode.getUrl()); - } + mFullNodeHeap.remove(fullNode); } @Override