Netflix/Hystrix · error · HystrixPropertyException

Failed to set Command properties. {}

Error message

Failed to set Command properties. {}

What it means

Same wrapper path as the thread-pool error, but for the commandProperties attribute: when HystrixPropertiesManager.initializeCommandProperties throws IllegalArgumentException (unknown command property name, or a value that cannot be parsed to int/boolean/enum), GenericSetterBuilder.build() wraps it in HystrixPropertyException with the command's keys appended. It fires the first time the annotated method executes and the Setter is constructed.

Source

Thrown at hystrix-contrib/hystrix-javanica/src/main/java/com/netflix/hystrix/contrib/javanica/command/GenericSetterBuilder.java:88

     *
     * @return the instance of {@link HystrixCommand.Setter}
     */
    public HystrixCommand.Setter build() throws HystrixPropertyException {
        HystrixCommand.Setter setter = HystrixCommand.Setter
                .withGroupKey(HystrixCommandGroupKey.Factory.asKey(groupKey))
                .andCommandKey(HystrixCommandKey.Factory.asKey(commandKey));
        if (StringUtils.isNotBlank(threadPoolKey)) {
            setter.andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey(threadPoolKey));
        }
        try {
            setter.andThreadPoolPropertiesDefaults(HystrixPropertiesManager.initializeThreadPoolProperties(threadPoolProperties));
        } catch (IllegalArgumentException e) {
            throw new HystrixPropertyException("Failed to set Thread Pool properties. " + getInfo(), e);
        }
        try {
            setter.andCommandPropertiesDefaults(HystrixPropertiesManager.initializeCommandProperties(commandProperties));
        } catch (IllegalArgumentException e) {
            throw new HystrixPropertyException("Failed to set Command properties. " + getInfo(), e);
        }
        return setter;
    }

    // todo dmgcodevil: it would be better to reuse the code from build() method
    public HystrixObservableCommand.Setter buildObservableCommandSetter() {
        HystrixObservableCommand.Setter setter = HystrixObservableCommand.Setter
                .withGroupKey(HystrixCommandGroupKey.Factory.asKey(groupKey))
                .andCommandKey(HystrixCommandKey.Factory.asKey(commandKey));
        try {
            setter.andCommandPropertiesDefaults(HystrixPropertiesManager.initializeCommandProperties(commandProperties));
        } catch (IllegalArgumentException e) {
            throw new HystrixPropertyException("Failed to set Command properties. " + getInfo(), e);
        }
        return setter;
    }

    public HystrixCollapser.Setter buildCollapserCommandSetter(){

View on GitHub (pinned to 5ce3bc58c3)

Solutions

  1. Use getInfo() in the message to locate the exact command (groupKey/commandKey)
  2. Check each commandProperties @HystrixProperty name against HystrixPropertiesManager.COMMAND_PROP_MAP for your exact Hystrix version
  3. Confirm value strings parse: ints for timeouts/window sizes, true/false for booleans, THREAD/SEMAPHORE for execution.isolation.strategy
  4. Correct or remove the bad property; redeploy

Example fix

// before
@HystrixProperty(name = "execution.isolation.thread.timeoutInMillisecond", value = "1000")

// after
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000")
Defensive patterns

Strategy: validation

Validate before calling

Set<String> VALID_CMD = new HashSet<>(Arrays.asList(
    "execution.isolation.strategy", "execution.isolation.thread.timeoutInMilliseconds",
    "execution.isolation.semaphore.maxConcurrentRequests", "circuitBreaker.requestVolumeThreshold",
    "circuitBreaker.errorThresholdPercentage", "metrics.rollingStats.timeInMilliseconds" /* ... full map */ ));

for (Method m : clazz.getDeclaredMethods()) {
  HystrixCommand a = m.getAnnotation(HystrixCommand.class);
  if (a == null) continue;
  for (HystrixProperty p : a.commandProperties()) {
    if (!VALID_CMD.contains(p.name()))
      throw new IllegalStateException(m + " unknown command property " + p.name());
  }
}

Try / catch

catch (HystrixPropertyException e) { throw new IllegalStateException("Fix @HystrixCommand config: " + e.getMessage(), e); }

Prevention

When it happens

Trigger: @HystrixCommand(commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMillisecond", value = "1000") }) (typo'd name), or value = "fast" for an int property like execution.isolation.thread.timeoutInMilliseconds, or an invalid enum value for execution.isolation.strategy.

Common situations: Typos in the long dotted property names; copying property names from a different Hystrix version (properties were added/renamed across 1.3.x/1.4.x/1.5.x); injecting property values from external config where an empty or non-numeric placeholder is resolved.

Related errors


AI-assisted analysis of Netflix/Hystrix@5ce3bc58c3 (2026-08-14). Data as JSON: /api/errors/ee777e1bd919c1a2. Report an issue: GitHub.