You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@storm.apache.org by "Mal Graty (JIRA)" <ji...@apache.org> on 2018/07/29 00:02:00 UTC

[jira] [Updated] (STORM-3163) ShellLogHandler loses thread context between setup and use

     [ https://issues.apache.org/jira/browse/STORM-3163?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Mal Graty updated STORM-3163:
-----------------------------
    Summary: ShellLogHandler loses thread context between setup and use  (was: ShellLogHandler setup should be done on the same thread that uses it)

> ShellLogHandler loses thread context between setup and use
> ----------------------------------------------------------
>
>                 Key: STORM-3163
>                 URL: https://issues.apache.org/jira/browse/STORM-3163
>             Project: Apache Storm
>          Issue Type: Bug
>          Components: storm-core
>    Affects Versions: 1.2.2
>            Reporter: Mal Graty
>            Priority: Trivial
>              Labels: Logging
>
> `ShellBolt` instantiates the `ShellLogHandler` and calls its `setUpContext` as part of `prepare`, immediately before it spawns its `BoltReaderRunnable` and `BoltWriterRunnable` threads which are responsible for communication with the `ShellProcess` that's already been spawned.
> The `ShellLogHandler` is used exclusively from `BoltReaderRunnable`. The upshot of this is that `setUpContext` is executed in the task thread (i.e. `Thread-21-joiner-executor[2 2]`) while the `log` method is executed in the anonymous thread (i.e. `Thread-30`) running the `BoltReaderRunnable`.
> This creates a problem when trying to leverage `slf4j`'s `MDC` (or `NDC`) which are used for augmenting log messages with additional information which is localised and persisted at the thread level.
> The current work around for this is to store all relevant context on the `ShellLogHandler` during `setUpContext`, and then write it into the `MDC` during the `log` call, and taking precautions around that state being thread safe. The thread safety requirement is the first drawback, the second is that each `log` call has the additional overhead of either unconditionally writing to the `MDC` or checking that the `MDC` is already populated. Neither is very appealing.
> The suggested solution is to pass `stormConf`, `_process`, and `_context` into the constructor of `BoltReaderRunnable` (and perhaps also `BoltWriterRunnable`) and instantiate `ShellLogHandler` and call its `setUpContext` from that thread.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)