From ba6711be92d89a0191eaa45400c75f7a2b3dfb46 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Thu, 16 May 2019 12:05:44 +0200 Subject: - Use double checked locking to ensure that we do not create Policies that we forget to destroy. - Catch exceptions and close/destroy when necessary. --- .../java/com/yahoo/vdslib/distribution/Distribution.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'vdslib/src') diff --git a/vdslib/src/main/java/com/yahoo/vdslib/distribution/Distribution.java b/vdslib/src/main/java/com/yahoo/vdslib/distribution/Distribution.java index 0063011e41c..404ec357e93 100644 --- a/vdslib/src/main/java/com/yahoo/vdslib/distribution/Distribution.java +++ b/vdslib/src/main/java/com/yahoo/vdslib/distribution/Distribution.java @@ -108,8 +108,13 @@ public class Distribution { distributionBitMasks[i] = mask; mask = (mask << 1) | 1; } - configSub = new ConfigSubscriber(); - configSub.subscribe(configSubscriber, StorDistributionConfig.class, configId); + try { + configSub = new ConfigSubscriber(); + configSub.subscribe(configSubscriber, StorDistributionConfig.class, configId); + } catch (Throwable e) { + close(); + throw e; + } } public Distribution(StorDistributionConfig config) { @@ -146,7 +151,7 @@ public class Distribution { return seed; } - private class ScoredGroup implements Comparable { + private static class ScoredGroup implements Comparable { Group group; double score; @@ -158,7 +163,7 @@ public class Distribution { return Double.valueOf(o.score).compareTo(score); } } - private class ScoredNode { + private static class ScoredNode { int index; int reliability; double score; @@ -205,7 +210,7 @@ public class Distribution { } return getIdealDistributorGroup(bucket, clusterState, results.first().group, redundancyArray[0]); } - private class ResultGroup implements Comparable { + private static class ResultGroup implements Comparable { Group group; int redundancy; -- cgit v1.2.3 From 9b20a49bd89f9801d7a708fc700ae7f35483d8aa Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Thu, 16 May 2019 12:30:57 +0200 Subject: Set member to null explicit. --- .../src/main/java/com/yahoo/vdslib/distribution/Distribution.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'vdslib/src') diff --git a/vdslib/src/main/java/com/yahoo/vdslib/distribution/Distribution.java b/vdslib/src/main/java/com/yahoo/vdslib/distribution/Distribution.java index 404ec357e93..47a09ab0873 100644 --- a/vdslib/src/main/java/com/yahoo/vdslib/distribution/Distribution.java +++ b/vdslib/src/main/java/com/yahoo/vdslib/distribution/Distribution.java @@ -127,7 +127,11 @@ public class Distribution { } public void close() { - if (configSub!=null) configSub.close(); + if (configSub!=null) { + configSub.close(); + configSub = null; + } + configSubscriber = null; } private int getGroupSeed(BucketId bucket, ClusterState state, Group group) { -- cgit v1.2.3