diff options
author | Geir Storli <geirstorli@yahoo.no> | 2018-05-03 14:12:37 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-03 14:12:37 +0200 |
commit | c0267f9282d04a73e86586b19c20f588d13106ee (patch) | |
tree | 6d45aabcefde0c52b17120fda469cc8650833e86 /clustercontroller-core | |
parent | f49191380fd3e3ab05723e669e5a0cc325949d00 (diff) | |
parent | 08112bec42cf9633609da34b28675581846f223d (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')
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"); + } + } |