Skip to content

Worker process exits when Netty frame decoding throws a non-IOException #9074

Description

@L1nq0

While testing Storm 3.0.0 locally (official binary distribution, local Docker cluster, default configuration), we found that a worker process terminates whenever Netty frame decoding throws anything other than an IOException.

StormServerHandler.exceptionCaught (storm-client, messaging/netty/StormServerHandler.java) only tolerates IOException. Any other throwable raised while decoding a frame - for example IllegalArgumentException from Kryo for an unregistered class name, or KryoException on a truncated buffer - escalates to Utils.handleUncaughtException and terminates the worker process (exit code 20, then supervisor restart).

On a stock 3.0.0 cluster with default settings, a single malformed 27-byte frame sent to a worker port deterministically kills the worker before the message is routed to any task. We verified two independent frames, two kills, each within about three seconds.

Since this failure happens at the decode stage and involves no topology logic, widening the tolerated exception set for decode-stage errors (or skipping the offending frame with a log line) and reserving process termination for executor-stage failures would make workers resilient to arbitrary malformed input without changing behavior for valid traffic.

Happy to share our reproduction steps or a prototype patch if that would be useful.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions