Chris Riccomini created SAMZA-437:
-------------------------------------

             Summary: Remove TaskLifecycleListener
                 Key: SAMZA-437
                 URL: https://issues.apache.org/jira/browse/SAMZA-437
             Project: Samza
          Issue Type: Bug
          Components: container
            Reporter: Chris Riccomini


We recently had a use case where we needed to wrap the Samza process() method 
in some code. The TaskLifecycleListener was insufficient to do this. We get a 
beforeProcess and afterProcess, but what we really wanted was:

{code}
def wrapProcess(...) {
  foo.doSomething(new Wrapper() {
    task.process(...)
  })
}
{code}

We ended up just writing a wrapper task, and having the normal code defined via 
a subtask config:

{noformat}
task.class=foo.bar.WrapperTask
task.subtask.class=foo.bar.NormalTask
{noformat}

Both of these tasks implement StreamTask. Samza just sees WrapperTask, and 
treats it like a normal task. Wrapper task instantiates the subtask, and 
manages its lifecycle internally.

This approach seems superior to the TaskLifecycleListener.

* Allows tasks to be composed multiple times.
* Removes this complexity from the Samza framework, and makes it a concern of 
the job owner.
* Allows the wrapper task to do things like filtering messages, tweaking 
configs and serialization, catching exceptions, etc.

Given this, it seems that TaskLifecycleListener is a degenerate case, and adds 
complexity to the framework. I propose removing it.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to