Github user aledsage commented on a diff in the pull request:

    https://github.com/apache/brooklyn-server/pull/879#discussion_r149336035
  
    --- Diff: 
policy/src/main/java/org/apache/brooklyn/policy/ha/ElectPrimaryConfig.java ---
    @@ -0,0 +1,82 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one
    + * or more contributor license agreements.  See the NOTICE file
    + * distributed with this work for additional information
    + * regarding copyright ownership.  The ASF licenses this file
    + * to you under the Apache License, Version 2.0 (the
    + * "License"); you may not use this file except in compliance
    + * with the License.  You may obtain a copy of the License at
    + *
    + *     http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing,
    + * software distributed under the License is distributed on an
    + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    + * KIND, either express or implied.  See the License for the
    + * specific language governing permissions and limitations
    + * under the License.
    + */
    +package org.apache.brooklyn.policy.ha;
    +
    +import org.apache.brooklyn.api.effector.Effector;
    +import org.apache.brooklyn.api.entity.Entity;
    +import org.apache.brooklyn.api.sensor.AttributeSensor;
    +import org.apache.brooklyn.config.ConfigKey;
    +import org.apache.brooklyn.core.config.ConfigKeys;
    +import org.apache.brooklyn.core.effector.Effectors;
    +import org.apache.brooklyn.core.sensor.Sensors;
    +import org.apache.brooklyn.util.time.Duration;
    +
    +public interface ElectPrimaryConfig {
    +
    +    public enum TargetMode { CHILDREN, MEMBERS, AUTO }
    +    public static final ConfigKey<TargetMode> TARGET_MODE = 
ConfigKeys.builder(TargetMode.class, "primary.target.mode")
    +        .description("where should the policy look for primary candidates; 
one of 'children', 'members', or 'auto' (members if it's a group)")
    +        .defaultValue(TargetMode.AUTO)
    +        .build();
    +    
    +    public enum SelectionMode { FAILOVER, BEST, STRICT }
    +    public static final ConfigKey<SelectionMode> SELECTION_MODE = 
ConfigKeys.builder(SelectionMode.class, "primary.selection.mode")
    +        .description("under what circumstances should the primary change:  
`failover` to change only if an existing primary is unhealthy, `best` to change 
so one with the highest weight is always selected, or `strict` to act as `best` 
but fail if several advertise the highest weight (for use when the weight 
sensor is updated by the nodes and should tell us unambiguously who was 
elected)")
    +        .defaultValue(SelectionMode.FAILOVER)
    +        .build();
    +
    +    public static final ConfigKey<Duration> BEST_WAIT_TIMEOUT = 
ConfigKeys.newDurationConfigKey("primary.stopped.wait.timeout",
    +        "if the highest-ranking primary is not starting, the effector will 
wait this long for it to be starting before picking a less highly-weighted 
primary; "
    +        + "default 5s, typically long enough to avoid races where multiple 
children are started concurrently but they complete extremely quickly and one 
completes before a better one starts, "
    +        + "the short duration is sufficient for the theoretical best to 
become waiting where the `primary.starting.wait.timeout` applies",
    +        Duration.seconds(5));
    +
    +    public static final ConfigKey<Duration> BEST_STARTING_WAIT_TIMEOUT = 
ConfigKeys.newDurationConfigKey("primary.starting.wait.timeout",
    +        "if the highest-ranking primary is starting, the effector will 
wait this long for it to be running before picking a less highly-weighted 
primary "
    +        + "(or in the case of `strict` before failing if there are ties); "
    +        + "default 5m, typically long enough to avoid races where multiple 
children are started and a sub-optimal one comes online before the best one",
    +        Duration.minutes(5));
    +
    +    public static final ConfigKey<String> PRIMARY_SENSOR_NAME = 
ConfigKeys.newStringConfigKey("primary.sensor.name",
    +        "name of sensor to publish, defaulting to 'primary'",
    +        PrimaryDefaultSensorsAndEffectors.PRIMARY.getName());
    +
    +    public static final ConfigKey<String> PRIMARY_WEIGHT_NAME = 
ConfigKeys.newStringConfigKey("primary.weight.name",
    +        "config key or sensor to scan from candidate nodes to determine 
who should be primary",
    +        PrimaryDefaultSensorsAndEffectors.PRIMARY_WEIGHT_SENSOR.getName());
    +
    +    public static final ConfigKey<String> PROMOTE_EFFECTOR_NAME = 
ConfigKeys.newStringConfigKey("primary.promote.effector.name",
    +        "effector to invoke on promotion, default `promote` and with no 
error if not present (but if set explicitly it will cause an error if not 
present)",
    --- End diff --
    
    I don't see where this gives an error if not present and set explicitly.


---

Reply via email to