diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-05-16 12:32:32 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-16 12:32:32 +0200 |
commit | 3b4bd2b886ce72375b740d41206e15f18b9f68b5 (patch) | |
tree | 7d2bc91cd37b890b3a5caffe4e3acbde6bf49811 /vdslib | |
parent | ff6e80f8ecc40a4021710cb4b3fd3b756cf7685d (diff) | |
parent | 9b20a49bd89f9801d7a708fc700ae7f35483d8aa (diff) |
Merge pull request #9435 from vespa-engine/balder/ensure-we-do-not-drop-close-destroy-on-exception-or-create-some-that-we-do-not-destroy
- Use double checked locking to ensure that we do not create Policies…
Diffstat (limited to 'vdslib')
-rw-r--r-- | vdslib/src/main/java/com/yahoo/vdslib/distribution/Distribution.java | 21 |
1 files changed, 15 insertions, 6 deletions
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..47a09ab0873 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) { @@ -122,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) { @@ -146,7 +155,7 @@ public class Distribution { return seed; } - private class ScoredGroup implements Comparable<ScoredGroup> { + private static class ScoredGroup implements Comparable<ScoredGroup> { Group group; double score; @@ -158,7 +167,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 +214,7 @@ public class Distribution { } return getIdealDistributorGroup(bucket, clusterState, results.first().group, redundancyArray[0]); } - private class ResultGroup implements Comparable<ResultGroup> { + private static class ResultGroup implements Comparable<ResultGroup> { Group group; int redundancy; |