apache/hadoop · error · UnsupportedOperationException

Invalid operation.

Error message

Invalid operation.

What it means

Schedulable.getCallerContext is a default method whose only implementation is on Server.Call; every other Schedulable gets UnsupportedOperationException("Invalid operation.") by design. The method exists so call-queue code can read caller context only from real RPC calls — the class javadoc on the method says exactly this.

Source

Thrown at hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Schedulable.java:43

 * Interface which allows extracting information necessary to
 * create schedulable identity strings.
 */
@InterfaceAudience.Private
public interface Schedulable {
  public UserGroupInformation getUserGroupInformation();

  /**
   * This is overridden only in {@link Server.Call}.
   * The CallerContext field will be used to carry information
   * about the user in cases where UGI proves insufficient.
   * Any other classes that might try to use this method,
   * will get an UnsupportedOperationException.
   *
   * @return an instance of CallerContext if method
   * is overridden else get an UnsupportedOperationException
   */
  default CallerContext getCallerContext() {
    throw new UnsupportedOperationException("Invalid operation.");
  }

  int getPriorityLevel();
}

View on GitHub (pinned to 2add963021)

Solutions

  1. Narrow before calling: only invoke getCallerContext() when the schedulable instanceof Server.Call.
  2. If your Schedulable wrapper genuinely carries context, override getCallerContext() in your implementation.
  3. Audit generic code paths so caller context is only requested for real calls.

Example fix

// before
CallerContext ctx = schedulable.getCallerContext(); // UnsupportedOperationException on non-Call
// after
CallerContext ctx = (schedulable instanceof Server.Call)
    ? schedulable.getCallerContext()
    : null;
Defensive patterns

Strategy: type-guard

Type guard

static boolean carriesCallerContext(Schedulable s) {
  return s instanceof org.apache.hadoop.ipc.Server.Call;
}

Prevention

When it happens

Trigger: Calling schedulable.getCallerContext() on anything that is not a Server.Call: unit-test fakes implementing Schedulable, custom call-queue entries or wrappers that implement Schedulable without extending Server.Call, generic metrics code assuming all schedulables carry context.

Common situations: Custom CallQueue/backpressure implementations inspecting queued entries; tests passing fake Schedulables into scheduler or metrics code that reads caller context; refactors that route Server.Call through adapter objects.

Related errors


AI-assisted analysis of apache/hadoop@2add963021 (2026-08-22). Data as JSON: /api/errors/44d7b6fab7fb8eb8. Report an issue: GitHub.