summaryrefslogtreecommitdiffstats
path: root/clustercontroller-core
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@oath.com>2018-05-02 14:35:31 +0200
committerTor Brede Vekterli <vekterli@oath.com>2018-05-02 14:35:31 +0200
commit08112bec42cf9633609da34b28675581846f223d (patch)
tree5281759ae8249f1eb5ddefe50d940d476ec3b305 /clustercontroller-core
parent5807a4cd298a2a09793f66096acdc9c7c62deebf (diff)
Only derive default bucket space node states when cluster has global docs
Lets cluster controller use new protocols for sending compressed cluster state bundles, but without triggering implicit Maintenance edges for nodes in the default bucket space. Also allows for easy live reconfiguration when global document types are added or removed.
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");
+ }
+
}