diff options
author | Tor Brede Vekterli <vekterli@oath.com> | 2018-05-02 14:35:31 +0200 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@oath.com> | 2018-05-02 14:35:31 +0200 |
commit | 08112bec42cf9633609da34b28675581846f223d (patch) | |
tree | 5281759ae8249f1eb5ddefe50d940d476ec3b305 /clustercontroller-core | |
parent | 5807a4cd298a2a09793f66096acdc9c7c62deebf (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')
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"); + } + } |