summaryrefslogtreecommitdiffstats
path: root/clustercontroller-core
diff options
context:
space:
mode:
authorGeir Storli <geirstorli@yahoo.no>2018-05-03 14:12:37 +0200
committerGitHub <noreply@github.com>2018-05-03 14:12:37 +0200
commitc0267f9282d04a73e86586b19c20f588d13106ee (patch)
tree6d45aabcefde0c52b17120fda469cc8650833e86 /clustercontroller-core
parentf49191380fd3e3ab05723e669e5a0cc325949d00 (diff)
parent08112bec42cf9633609da34b28675581846f223d (diff)
Merge pull request #5766 from vespa-engine/vekterli/only-derive-default-space-node-states-when-global-doc-types-present
Only derive default bucket space node states when cluster has global docs
Diffstat (limited to 'clustercontroller-core')
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java12
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetControllerOptions.java3
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/MasterElectionTest.java19
3 files changed, 31 insertions, 3 deletions
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java
index e781bf3b145..c2956fe738c 100644
--- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java
+++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java
@@ -857,8 +857,16 @@ public class FleetController implements NodeStateOrHostInfoChangeHandler, NodeAd
}
private ClusterStateDeriver createBucketSpaceStateDeriver() {
- return new MaintenanceWhenPendingGlobalMerges(stateVersionTracker.createMergePendingChecker(),
- createDefaultSpaceMaintenanceTransitionConstraint());
+ if (options.clusterHasGlobalDocumentTypes) {
+ return new MaintenanceWhenPendingGlobalMerges(stateVersionTracker.createMergePendingChecker(),
+ createDefaultSpaceMaintenanceTransitionConstraint());
+ } else {
+ return createIdentityClonedBucketSpaceStateDeriver();
+ }
+ }
+
+ private static ClusterStateDeriver createIdentityClonedBucketSpaceStateDeriver() {
+ return (state, space) -> state.clone();
}
private MaintenanceTransitionConstraint createDefaultSpaceMaintenanceTransitionConstraint() {
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetControllerOptions.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetControllerOptions.java
index 860d38b3438..31268e78338 100644
--- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetControllerOptions.java
+++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetControllerOptions.java
@@ -122,6 +122,8 @@ public class FleetControllerOptions implements Cloneable {
// TODO replace this flag with a set of bucket spaces instead
public boolean enableMultipleBucketSpaces = false;
+ public boolean clusterHasGlobalDocumentTypes = false;
+
// TODO: Choose a default value
public double minMergeCompletionRatio = 1.0;
@@ -232,6 +234,7 @@ public class FleetControllerOptions implements Cloneable {
sb.append("<tr><td><nobr>Wanted distribution bits</nobr></td><td align=\"right\">").append(distributionBits).append("</td></tr>");
sb.append("<tr><td><nobr>Max deferred task version wait time</nobr></td><td align=\"right\">").append(maxDeferredTaskVersionWaitTime.toMillis()).append("ms</td></tr>");
sb.append("<tr><td><nobr>Multiple bucket spaces enabled</nobr></td><td align=\"right\">").append(enableMultipleBucketSpaces).append("</td></tr>");
+ sb.append("<tr><td><nobr>Cluster has global document types configured</nobr></td><td align=\"right\">").append(clusterHasGlobalDocumentTypes).append("</td></tr>");
sb.append("</table>");
}
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/MasterElectionTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/MasterElectionTest.java
index b2464e83f95..07d176745bc 100644
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/MasterElectionTest.java
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/MasterElectionTest.java
@@ -502,8 +502,9 @@ public class MasterElectionTest extends FleetControllerTest {
startingTest("MasterElectionTest::previously_published_state_is_taken_into_account_for_default_space_when_controller_bootstraps");
FleetControllerOptions options = new FleetControllerOptions("mycluster");
options.enableMultipleBucketSpaces = true;
+ options.clusterHasGlobalDocumentTypes = true;
options.masterZooKeeperCooldownPeriod = 1;
- options.minTimeBeforeFirstSystemStateBroadcast = 10000;
+ options.minTimeBeforeFirstSystemStateBroadcast = 100000;
setUpFleetController(3, true, options);
setUpVdsNodes(true, new DummyVdsNodeOptions());
fleetController = fleetControllers.get(0); // Required to prevent waitForStableSystem from NPE'ing
@@ -540,4 +541,20 @@ public class MasterElectionTest extends FleetControllerTest {
waitForStateInAllSpaces("version:\\d+ distributor:10 storage:10");
}
+ @Test
+ public void default_space_nodes_not_marked_as_maintenance_when_cluster_has_no_global_document_types() throws Exception {
+ startingTest("MasterElectionTest::default_space_nodes_not_marked_as_maintenance_when_cluster_has_no_global_document_types");
+ FleetControllerOptions options = new FleetControllerOptions("mycluster");
+ options.enableMultipleBucketSpaces = true;
+ options.clusterHasGlobalDocumentTypes = false;
+ options.masterZooKeeperCooldownPeriod = 1;
+ options.minTimeBeforeFirstSystemStateBroadcast = 100000;
+ setUpFleetController(3, true, options);
+ setUpVdsNodes(true, new DummyVdsNodeOptions());
+ fleetController = fleetControllers.get(0); // Required to prevent waitForStableSystem from NPE'ing
+ waitForMaster(0);
+ waitForStableSystem();
+ waitForStateInAllSpaces("version:\\d+ distributor:10 storage:10");
+ }
+
}