From 3ff5ec0b3788cc283873331bb6f2e5a04f124d22 Mon Sep 17 00:00:00 2001 From: Dyrell Chapman Date: Tue, 3 Dec 2019 09:41:41 -0700 Subject: [PATCH] Fix: Correct walker behaviour for alpha == 0 (#1645) * Correct walker behaviour for alpha == 0 * Remove duplicate approver filter code * update comment --- .../tipselection/impl/WalkerAlpha.java | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/iota/iri/service/tipselection/impl/WalkerAlpha.java b/src/main/java/com/iota/iri/service/tipselection/impl/WalkerAlpha.java index ddf9829337..d220813451 100644 --- a/src/main/java/com/iota/iri/service/tipselection/impl/WalkerAlpha.java +++ b/src/main/java/com/iota/iri/service/tipselection/impl/WalkerAlpha.java @@ -127,15 +127,15 @@ private Optional select(Map ratings, Set approversSet List approvers; int approverIndex; - //Check if ratings map is empty. If so, alpha was set to 0 and a random approver will be selected. - if(!Collections.EMPTY_MAP.equals(ratings)) { - //filter based on tangle state when starting the walk - approvers = approversSet.stream().filter(ratings::containsKey).collect(Collectors.toList()); - //After filtering, if no approvers are available, it's a tip. - if (approvers.size() == 0) { - return Optional.empty(); - } + //filter based on tangle state when starting the walk + approvers = approversSet.stream().filter(ratings::containsKey).collect(Collectors.toList()); + //After filtering, if no approvers are available, it's a tip. + if (approvers.size() == 0) { + return Optional.empty(); + } + //Check if alpha was set to 0. If so, weight calculations are skipped and a random approver will be selected. + if(alpha != 0) { //calculate the probabilities List walkRatings = approvers.stream().map(ratings::get).collect(Collectors.toList()); @@ -157,11 +157,7 @@ private Optional select(Map ratings, Set approversSet } } } else { - approvers = approversSet.stream().filter(ratings::containsKey).collect(Collectors.toList()); - if (approvers.size() == 0) { - return Optional.empty(); - } - approverIndex = random.nextInt(approversSet.size()); + approverIndex = random.nextInt(approvers.size()); } return Optional.of(approvers.get(approverIndex)); }