Netflix/Hystrix · error · IllegalArgumentException

unknown {} property: {}

Error message

unknown {} property: {}

What it means

HystrixPropertiesManager.initializeProperties looks up each @HystrixProperty name in the type-specific property map (command / thread-pool / collapser) and calls the corresponding setter on the HystrixProperties.Setter. If the name passes the not-blank validation but is not a key in that map, it throws IllegalArgumentException('unknown <type> property: <name>') naming the property category and the unknown name.

Source

Thrown at hystrix-contrib/hystrix-javanica/src/main/java/com/netflix/hystrix/contrib/javanica/conf/HystrixPropertiesManager.java:127

    public static HystrixThreadPoolProperties.Setter initializeThreadPoolProperties(List<HystrixProperty> properties) throws IllegalArgumentException {
        return initializeProperties(HystrixThreadPoolProperties.Setter(), properties, TP_PROP_MAP, "thread pool");
    }

    /**
     * Creates and sets Hystrix collapser properties.
     *
     * @param properties the collapser properties
     */
    public static HystrixCollapserProperties.Setter initializeCollapserProperties(List<HystrixProperty> properties) {
        return initializeProperties(HystrixCollapserProperties.Setter(), properties, COLLAPSER_PROP_MAP, "collapser");
    }

    private static <S> S initializeProperties(S setter, List<HystrixProperty> properties, Map<String, PropSetter<S, String>> propMap, String type) {
        if (properties != null && properties.size() > 0) {
            for (HystrixProperty property : properties) {
                validate(property);
                if (!propMap.containsKey(property.name())) {
                    throw new IllegalArgumentException("unknown " + type + " property: " + property.name());
                }

                propMap.get(property.name()).set(setter, property.value());
            }
        }
        return setter;
    }

    private static void validate(HystrixProperty hystrixProperty) throws IllegalArgumentException {
        Validate.notBlank(hystrixProperty.name(), "hystrix property name cannot be null or blank");
    }

    private static final Map<String, PropSetter<HystrixCommandProperties.Setter, String>> CMD_PROP_MAP =
            ImmutableMap.<String, PropSetter<HystrixCommandProperties.Setter, String>>builder()
                    .put(EXECUTION_ISOLATION_STRATEGY, new PropSetter<HystrixCommandProperties.Setter, String>() {
                        @Override
                        public void set(HystrixCommandProperties.Setter setter, String value) throws IllegalArgumentException {
                            setter.withExecutionIsolationStrategy(toEnum(EXECUTION_ISOLATION_STRATEGY, value, HystrixCommandProperties.ExecutionIsolationStrategy.class,

View on GitHub (pinned to 5ce3bc58c3)

Solutions

  1. Match the error's <type> prefix (command/threadPool/collapser) to know which annotation attribute is wrong
  2. Move the named property to the correct attribute or fix its spelling (e.g. collapser properties: maxRequestsInBatch, timerDelayInMilliseconds, requestCache.enabled)
  3. Cross-check names against the *_PROP_MAP constants in HystrixPropertiesManager for your javanica version
  4. Re-run; failure is deterministic at setter initialization

Example fix

// before
@HystrixCommand(threadPoolProperties = {
    @HystrixProperty(name = "execution.isolation.strategy", value = "THREAD")
})

// after
@HystrixCommand(commandProperties = {
    @HystrixProperty(name = "execution.isolation.strategy", value = "THREAD")
})
Defensive patterns

Strategy: validation

Validate before calling

void checkProps(HystrixProperty[] props, Set<String> valid, String type) {
  for (HystrixProperty p : props)
    if (p.name() == null || p.name().trim().isEmpty() || !valid.contains(p.name()))
      throw new IllegalStateException("unknown " + type + " property: " + p.name());
}
// checkProps(ann.commandProperties(), COMMAND_PROP_MAP, "command");
// checkProps(ann.threadPoolProperties(), TP_PROP_MAP, "threadPool");
// checkProps(ann.collapserProperties(), COLLAPSER_PROP_MAP, "collapser");

Try / catch

catch (IllegalArgumentException e) { if (e.getMessage().startsWith("unknown")) { log.error("Property placed under wrong attribute or misspelled: {}", e.getMessage()); } throw e; }

Prevention

When it happens

Trigger: Putting a command property (e.g. execution.isolation.strategy) under @HystrixCommand(threadPoolProperties=...), a thread-pool property under commandProperties, any property under @HystrixCollapser(collapserProperties=...) that is not a collapser property (maxRequestsInBatch, timerDelayInMilliseconds, requestCache.enabled), or misspelling any name.

Common situations: Copy-pasting @HystrixProperty blocks between the wrong attribute; property lists reordered during refactoring; names valid in a newer Hystrix version used against an older javanica jar.

Related errors


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