apache/flink · error · IllegalArgumentException

An ordering must not be created with a NONE order.

Error message

An ordering must not be created with a NONE order.

What it means

Thrown by Ordering.appendOrdering when the Order parameter is Order.NONE. NONE is a sentinel meaning 'no ordering', which is semantically invalid when constructing an actual ordering requirement. The only valid values are Order.ASCENDING and Order.DESCENDING (and non-null).

Solutions

  1. Replace Order.NONE with Order.ASCENDING or Order.DESCENDING before calling appendOrdering.
  2. Skip the appendOrdering call entirely if no ordering is needed for that field.
  3. Validate the Order value: if (order == Order.NONE) order = Order.ASCENDING; or skip.

Example fix

// before
Order o = config.isDescending() ? Order.DESCENDING : Order.NONE;
ordering.appendOrdering(0, type, o);

// after
Order o = config.isDescending() ? Order.DESCENDING : Order.ASCENDING;
ordering.appendOrdering(0, type, o);
Defensive patterns

Strategy: validation

Validate before calling

if (order == null || order == Order.NONE) {
    throw new IllegalArgumentException(
        "Order must be ASCENDING or DESCENDING, got: " + order);
}

Type guard

static boolean isValidOrder(Order o) {
    return o == Order.ASCENDING || o == Order.DESCENDING;
}

Prevention

When it happens

Trigger: Calling appendOrdering(index, type, Order.NONE) or new Ordering(0, type, Order.NONE). Defaulting an Order variable to NONE and passing it through.

Common situations: Using Order.NONE as a default placeholder and forgetting to replace it. Deserialising an order value that maps to NONE.

Related errors


AI-assisted analysis of apache/flink@2f3c205e92 (2026-08-14). Data as JSON: /api/errors/1e43ec658de52818. Report an issue: GitHub.

Appendix: source

Thrown at flink-core/src/main/java/org/apache/flink/api/common/operators/Ordering.java:73

    /**
     * Extends this ordering by appending an additional order requirement. If the index has been
     * previously appended then the unmodified Ordering is returned.
     *
     * @param index Field index of the appended order requirement.
     * @param type Type of the appended order requirement.
     * @param order Order of the appended order requirement.
     * @return This ordering with an additional appended order requirement.
     */
    public Ordering appendOrdering(
            Integer index, Class<? extends Comparable<?>> type, Order order) {
        if (index < 0) {
            throw new IllegalArgumentException("The key index must not be negative.");
        }
        if (order == null) {
            throw new NullPointerException();
        }
        if (order == Order.NONE) {
            throw new IllegalArgumentException(
                    "An ordering must not be created with a NONE order.");
        }

        if (!this.indexes.contains(index)) {
            this.indexes = this.indexes.addField(index);
            this.types.add(type);
            this.orders.add(order);
        }

        return this;
    }

    // --------------------------------------------------------------------------------------------

    public int getNumberOfFields() {
        return this.indexes.size();
    }

View on GitHub (pinned to 2f3c205e92)