summaryrefslogtreecommitdiffstats
path: root/vdslib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-05-16 12:32:32 +0200
committerGitHub <noreply@github.com>2019-05-16 12:32:32 +0200
commit3b4bd2b886ce72375b740d41206e15f18b9f68b5 (patch)
tree7d2bc91cd37b890b3a5caffe4e3acbde6bf49811 /vdslib
parentff6e80f8ecc40a4021710cb4b3fd3b756cf7685d (diff)
parent9b20a49bd89f9801d7a708fc700ae7f35483d8aa (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.java21
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;