Flume
  1. Flume
  2. FLUME-1157

Implement Interceptors (previously known as Decorators) for Flume 1.x

    Details

    • Type: New Feature New Feature
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: v1.2.0
    • Component/s: None
    • Labels:
      None

      Description

      Some nice to have built in decorators could be:

      • checksum decorator
      • checksum validation decorator
      • timestamp decorator
      • GUID decorator

      The implementation should support the following:

      • support multiple decorators in predefined order via configuration
      • support custom decorators.
      1. FLUME-1157-3.patch
        21 kB
        Mike Percy
      2. FLUME-1157-1.patch
        21 kB
        Mike Percy

        Issue Links

          Activity

          Hide
          Will McQueen added a comment -

          Closing-out issue since already implemented.

          Show
          Will McQueen added a comment - Closing-out issue since already implemented.
          Hide
          Joey Echeverria added a comment -

          So excited to see this feature get implemented!

          Regarding sink-side decorators, I implemented a hack to put the equivalent functionality in. What I ended up doing was subclassing the sink I needed decorated and overriding the getChannel() method. I had it return a channel that largely delegates to the original channel, but intercepts calls to take events. In order to maintain the correctness, I couldn't modify events in place in case the transaction got copied, so I ended up creating a new event on every call. You're correct that this could have performance implications. The other idea I had was to add a header along the lines of "decorators.complete" that could have a coma delimited list of decorators that have processed the event. That way, I could avoid re-processing events that were processed and then returned to the channel.

          I opened FLUME-1207 to continue the conversation.

          Show
          Joey Echeverria added a comment - So excited to see this feature get implemented! Regarding sink-side decorators, I implemented a hack to put the equivalent functionality in. What I ended up doing was subclassing the sink I needed decorated and overriding the getChannel() method. I had it return a channel that largely delegates to the original channel, but intercepts calls to take events. In order to maintain the correctness, I couldn't modify events in place in case the transaction got copied, so I ended up creating a new event on every call. You're correct that this could have performance implications. The other idea I had was to add a header along the lines of "decorators.complete" that could have a coma delimited list of decorators that have processed the event. That way, I could avoid re-processing events that were processed and then returned to the channel. I opened FLUME-1207 to continue the conversation.
          Hide
          Hudson added a comment -

          Integrated in flume-trunk #205 (See https://builds.apache.org/job/flume-trunk/205/)
          FLUME-1157. Implement interceptors/decorators.

          (Mike Percy via Arvind Prabhakar) (Revision 1338910)
          FLUME-1157. Implement interceptors/decorators.

          (Mike Percy via Arvind Prabhakar) (Revision 1338909)

          Result = SUCCESS
          arvind : http://svn.apache.org/viewvc/?view=rev&rev=1338910
          Files :

          • /incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/interceptor
          • /incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/interceptor/Interceptor.java
          • /incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/interceptor/InterceptorChain.java
          • /incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/interceptor
          • /incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/interceptor/CensoringInterceptor.java
          • /incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/interceptor/TestCensoringInterceptor.java

          arvind : http://svn.apache.org/viewvc/?view=rev&rev=1338909
          Files :

          • /incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/channel/ChannelProcessor.java
          • /incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/source/EventDrivenSourceRunner.java
          • /incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/source/PollableSourceRunner.java
          • /incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/source/TestPollableSourceRunner.java
          • /incubator/flume/trunk/flume-ng-node/src/main/java/org/apache/flume/conf/properties/PropertiesFileConfigurationProvider.java
          Show
          Hudson added a comment - Integrated in flume-trunk #205 (See https://builds.apache.org/job/flume-trunk/205/ ) FLUME-1157 . Implement interceptors/decorators. (Mike Percy via Arvind Prabhakar) (Revision 1338910) FLUME-1157 . Implement interceptors/decorators. (Mike Percy via Arvind Prabhakar) (Revision 1338909) Result = SUCCESS arvind : http://svn.apache.org/viewvc/?view=rev&rev=1338910 Files : /incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/interceptor /incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/interceptor/Interceptor.java /incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/interceptor/InterceptorChain.java /incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/interceptor /incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/interceptor/CensoringInterceptor.java /incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/interceptor/TestCensoringInterceptor.java arvind : http://svn.apache.org/viewvc/?view=rev&rev=1338909 Files : /incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/channel/ChannelProcessor.java /incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/source/EventDrivenSourceRunner.java /incubator/flume/trunk/flume-ng-core/src/main/java/org/apache/flume/source/PollableSourceRunner.java /incubator/flume/trunk/flume-ng-core/src/test/java/org/apache/flume/source/TestPollableSourceRunner.java /incubator/flume/trunk/flume-ng-node/src/main/java/org/apache/flume/conf/properties/PropertiesFileConfigurationProvider.java
          Hide
          Mike Percy added a comment -

          Thanks Arvind!

          Show
          Mike Percy added a comment - Thanks Arvind!
          Hide
          Arvind Prabhakar added a comment -

          Patch committed. Thanks Mike!

          Show
          Arvind Prabhakar added a comment - Patch committed. Thanks Mike!
          Hide
          jiraposter@reviews.apache.org added a comment -

          -----------------------------------------------------------
          This is an automatically generated e-mail. To reply, visit:
          https://reviews.apache.org/r/5091/
          -----------------------------------------------------------

          (Updated 2012-05-15 21:33:45.411852)

          Review request for Flume.

          Changes
          -------

          fixed updated patch

          Summary
          -------

          Implementation of Source-side Decorators (called Interceptors here) for Flume 1.x.

          This addresses bug FLUME-1157.
          https://issues.apache.org/jira/browse/FLUME-1157

          Diffs (updated)


          flume-ng-core/src/main/java/org/apache/flume/channel/ChannelProcessor.java eb6460e
          flume-ng-core/src/main/java/org/apache/flume/interceptor/Interceptor.java PRE-CREATION
          flume-ng-core/src/main/java/org/apache/flume/interceptor/InterceptorChain.java PRE-CREATION
          flume-ng-core/src/main/java/org/apache/flume/source/EventDrivenSourceRunner.java 9dd15d4
          flume-ng-core/src/main/java/org/apache/flume/source/PollableSourceRunner.java 6ffdb5f
          flume-ng-core/src/test/java/org/apache/flume/interceptor/CensoringInterceptor.java PRE-CREATION
          flume-ng-core/src/test/java/org/apache/flume/interceptor/TestCensoringInterceptor.java PRE-CREATION
          flume-ng-core/src/test/java/org/apache/flume/source/TestPollableSourceRunner.java c27f82c
          flume-ng-node/src/main/java/org/apache/flume/conf/properties/PropertiesFileConfigurationProvider.java 82c5dd3

          Diff: https://reviews.apache.org/r/5091/diff

          Testing
          -------

          Added a unit test with an example Interceptor. Existing unit tests pass.

          Thanks,

          Mike

          Show
          jiraposter@reviews.apache.org added a comment - ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/5091/ ----------------------------------------------------------- (Updated 2012-05-15 21:33:45.411852) Review request for Flume. Changes ------- fixed updated patch Summary ------- Implementation of Source-side Decorators (called Interceptors here) for Flume 1.x. This addresses bug FLUME-1157 . https://issues.apache.org/jira/browse/FLUME-1157 Diffs (updated) flume-ng-core/src/main/java/org/apache/flume/channel/ChannelProcessor.java eb6460e flume-ng-core/src/main/java/org/apache/flume/interceptor/Interceptor.java PRE-CREATION flume-ng-core/src/main/java/org/apache/flume/interceptor/InterceptorChain.java PRE-CREATION flume-ng-core/src/main/java/org/apache/flume/source/EventDrivenSourceRunner.java 9dd15d4 flume-ng-core/src/main/java/org/apache/flume/source/PollableSourceRunner.java 6ffdb5f flume-ng-core/src/test/java/org/apache/flume/interceptor/CensoringInterceptor.java PRE-CREATION flume-ng-core/src/test/java/org/apache/flume/interceptor/TestCensoringInterceptor.java PRE-CREATION flume-ng-core/src/test/java/org/apache/flume/source/TestPollableSourceRunner.java c27f82c flume-ng-node/src/main/java/org/apache/flume/conf/properties/PropertiesFileConfigurationProvider.java 82c5dd3 Diff: https://reviews.apache.org/r/5091/diff Testing ------- Added a unit test with an example Interceptor. Existing unit tests pass. Thanks, Mike
          Hide
          jiraposter@reviews.apache.org added a comment -

          -----------------------------------------------------------
          This is an automatically generated e-mail. To reply, visit:
          https://reviews.apache.org/r/5091/
          -----------------------------------------------------------

          (Updated 2012-05-15 21:32:12.934460)

          Review request for Flume.

          Changes
          -------

          rebased patch

          Summary
          -------

          Implementation of Source-side Decorators (called Interceptors here) for Flume 1.x.

          This addresses bug FLUME-1157.
          https://issues.apache.org/jira/browse/FLUME-1157

          Diffs (updated)


          flume-ng-core/src/main/java/org/apache/flume/channel/ChannelProcessor.java eb6460e
          flume-ng-core/src/main/java/org/apache/flume/source/EventDrivenSourceRunner.java 9dd15d4
          flume-ng-core/src/main/java/org/apache/flume/source/PollableSourceRunner.java 6ffdb5f
          flume-ng-core/src/test/java/org/apache/flume/source/TestPollableSourceRunner.java c27f82c
          flume-ng-node/src/main/java/org/apache/flume/conf/properties/PropertiesFileConfigurationProvider.java 82c5dd3

          Diff: https://reviews.apache.org/r/5091/diff

          Testing
          -------

          Added a unit test with an example Interceptor. Existing unit tests pass.

          Thanks,

          Mike

          Show
          jiraposter@reviews.apache.org added a comment - ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/5091/ ----------------------------------------------------------- (Updated 2012-05-15 21:32:12.934460) Review request for Flume. Changes ------- rebased patch Summary ------- Implementation of Source-side Decorators (called Interceptors here) for Flume 1.x. This addresses bug FLUME-1157 . https://issues.apache.org/jira/browse/FLUME-1157 Diffs (updated) flume-ng-core/src/main/java/org/apache/flume/channel/ChannelProcessor.java eb6460e flume-ng-core/src/main/java/org/apache/flume/source/EventDrivenSourceRunner.java 9dd15d4 flume-ng-core/src/main/java/org/apache/flume/source/PollableSourceRunner.java 6ffdb5f flume-ng-core/src/test/java/org/apache/flume/source/TestPollableSourceRunner.java c27f82c flume-ng-node/src/main/java/org/apache/flume/conf/properties/PropertiesFileConfigurationProvider.java 82c5dd3 Diff: https://reviews.apache.org/r/5091/diff Testing ------- Added a unit test with an example Interceptor. Existing unit tests pass. Thanks, Mike
          Hide
          jiraposter@reviews.apache.org added a comment -

          -----------------------------------------------------------
          This is an automatically generated e-mail. To reply, visit:
          https://reviews.apache.org/r/5091/#review7912
          -----------------------------------------------------------

          Ship it!

          +1

          Please rebase the patch to the latest trunk sources.

          • Arvind

          On 2012-05-11 08:17:26, Mike Percy wrote:

          -----------------------------------------------------------

          This is an automatically generated e-mail. To reply, visit:

          https://reviews.apache.org/r/5091/

          -----------------------------------------------------------

          (Updated 2012-05-11 08:17:26)

          Review request for Flume.

          Summary

          -------

          Implementation of Source-side Decorators (called Interceptors here) for Flume 1.x.

          This addresses bug FLUME-1157.

          https://issues.apache.org/jira/browse/FLUME-1157

          Diffs

          -----

          flume-ng-core/src/test/java/org/apache/flume/interceptor/TestCensoringInterceptor.java PRE-CREATION

          flume-ng-core/src/main/java/org/apache/flume/source/PollableSourceRunner.java 6ffdb5f

          flume-ng-core/src/test/java/org/apache/flume/interceptor/CensoringInterceptor.java PRE-CREATION

          flume-ng-core/src/main/java/org/apache/flume/interceptor/InterceptorChain.java PRE-CREATION

          flume-ng-core/src/main/java/org/apache/flume/source/EventDrivenSourceRunner.java 9dd15d4

          flume-ng-core/src/main/java/org/apache/flume/interceptor/Interceptor.java PRE-CREATION

          flume-ng-core/src/main/java/org/apache/flume/channel/ChannelProcessor.java eb6460e

          flume-ng-core/src/test/java/org/apache/flume/source/TestPollableSourceRunner.java c27f82c

          flume-ng-node/src/main/java/org/apache/flume/conf/properties/PropertiesFileConfigurationProvider.java 878feda

          Diff: https://reviews.apache.org/r/5091/diff

          Testing

          -------

          Added a unit test with an example Interceptor. Existing unit tests pass.

          Thanks,

          Mike

          Show
          jiraposter@reviews.apache.org added a comment - ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/5091/#review7912 ----------------------------------------------------------- Ship it! +1 Please rebase the patch to the latest trunk sources. Arvind On 2012-05-11 08:17:26, Mike Percy wrote: ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/5091/ ----------------------------------------------------------- (Updated 2012-05-11 08:17:26) Review request for Flume. Summary ------- Implementation of Source-side Decorators (called Interceptors here) for Flume 1.x. This addresses bug FLUME-1157 . https://issues.apache.org/jira/browse/FLUME-1157 Diffs ----- flume-ng-core/src/test/java/org/apache/flume/interceptor/TestCensoringInterceptor.java PRE-CREATION flume-ng-core/src/main/java/org/apache/flume/source/PollableSourceRunner.java 6ffdb5f flume-ng-core/src/test/java/org/apache/flume/interceptor/CensoringInterceptor.java PRE-CREATION flume-ng-core/src/main/java/org/apache/flume/interceptor/InterceptorChain.java PRE-CREATION flume-ng-core/src/main/java/org/apache/flume/source/EventDrivenSourceRunner.java 9dd15d4 flume-ng-core/src/main/java/org/apache/flume/interceptor/Interceptor.java PRE-CREATION flume-ng-core/src/main/java/org/apache/flume/channel/ChannelProcessor.java eb6460e flume-ng-core/src/test/java/org/apache/flume/source/TestPollableSourceRunner.java c27f82c flume-ng-node/src/main/java/org/apache/flume/conf/properties/PropertiesFileConfigurationProvider.java 878feda Diff: https://reviews.apache.org/r/5091/diff Testing ------- Added a unit test with an example Interceptor. Existing unit tests pass. Thanks, Mike
          Hide
          Mike Percy added a comment -

          Hey Inder,
          Let me explain my motivations for doing it this way.

          Some goals I had for adding general decorator/interceptor support were the following:

          1. Works consistently regardless of components in the system, i.e. custom Sources/Sinks
          2. No counter-intuitive behavior, i.e. it should be straightforward to write an Interceptor and it shouldn't be easy to inadvertently create bad side effects in the system
          3. Don't require changes to existing interfaces

          Based on the above goals, the only place where these plugins really fit was the ChannelProcessor. The way it works, as you can see from the patch, is that a Source generates an Event and calls the ChannelProcessor.processEvent(Event e) method (or processEventBatch). The ChannelProcessor is responsible for opening a Transaction, putting the Event in the Channel, and closing the Transaction. For correctness reasons, the interception / transformation of the Events really has to take place inside of a Transaction. Also, from a fan-out perspective, if you are doing an operation on an Event that you want to replicate downstream, it makes sense to do that operation only once for the sake of efficiency. For all of these reasons, the ChannelProcessor is a good place to put Interceptor handling.

          As you have rightly observed, there is no corresponding interceptor on the Sink side of the Channel for cases where we may only want to apply some transformation to the Events flowing to a given Sink. I did not add this yet for the following reasons:

          1. There is no corollary to ChannelProcessor on the Sink side. There is something called SinkProcessor, but that is basically a misnomer; it should really be called SinkPolicy or something. Each Sink is actually in charge of opening a Transaction, take()ing from the Channel, and committing the Transaction. Because the Inversion of Control that exists on the Source side does not exist on the Sink side, there is no clear place to plug in a driver for the Interceptor interface without requiring each Sink to implement it.
          2. Particularly in regard to MemoryChannel, the Interceptor concept is a little messy because if we modify the Events in-place in the Interceptors, which is safe to do on the Source side (Sources are not allowed to buffer Events), then we are modifying Events that may get returned to the Channel in a Transaction rollback(). If that happens then we could process the same event multiple times in the event of a failed Transaction. Obviously that would be wrong so the alternative is to defensively copy the Events before giving them to an Interceptor. That represents a potential performance concern that has to be considered carefully.

          At this point in time, I believe that Source-side interceptors are a step in the right direction, and are more straightforward and less risky to implement than Sink-side decorators. With just these, it's possible to create another tier (logical or physical) to apply different Event processing to events going to different Sinks, if required, so there is a workaround.

          Anyway, I share your concerns and I have been thinking a lot about how to make Sink-side decorators work. I'd like to come up with a solution that creates a basically symmetric system without breaking existing interfaces. Some of the other folks working on Flume are thinking about this use case also and I think we will come up with a workable solution soon.

          Best,
          Mike

          Show
          Mike Percy added a comment - Hey Inder, Let me explain my motivations for doing it this way. Some goals I had for adding general decorator/interceptor support were the following: Works consistently regardless of components in the system, i.e. custom Sources/Sinks No counter-intuitive behavior, i.e. it should be straightforward to write an Interceptor and it shouldn't be easy to inadvertently create bad side effects in the system Don't require changes to existing interfaces Based on the above goals, the only place where these plugins really fit was the ChannelProcessor. The way it works, as you can see from the patch, is that a Source generates an Event and calls the ChannelProcessor.processEvent(Event e) method (or processEventBatch). The ChannelProcessor is responsible for opening a Transaction, putting the Event in the Channel, and closing the Transaction. For correctness reasons, the interception / transformation of the Events really has to take place inside of a Transaction. Also, from a fan-out perspective, if you are doing an operation on an Event that you want to replicate downstream, it makes sense to do that operation only once for the sake of efficiency. For all of these reasons, the ChannelProcessor is a good place to put Interceptor handling. As you have rightly observed, there is no corresponding interceptor on the Sink side of the Channel for cases where we may only want to apply some transformation to the Events flowing to a given Sink. I did not add this yet for the following reasons: There is no corollary to ChannelProcessor on the Sink side. There is something called SinkProcessor, but that is basically a misnomer; it should really be called SinkPolicy or something. Each Sink is actually in charge of opening a Transaction, take()ing from the Channel, and committing the Transaction. Because the Inversion of Control that exists on the Source side does not exist on the Sink side, there is no clear place to plug in a driver for the Interceptor interface without requiring each Sink to implement it. Particularly in regard to MemoryChannel, the Interceptor concept is a little messy because if we modify the Events in-place in the Interceptors, which is safe to do on the Source side (Sources are not allowed to buffer Events), then we are modifying Events that may get returned to the Channel in a Transaction rollback(). If that happens then we could process the same event multiple times in the event of a failed Transaction. Obviously that would be wrong so the alternative is to defensively copy the Events before giving them to an Interceptor. That represents a potential performance concern that has to be considered carefully. At this point in time, I believe that Source-side interceptors are a step in the right direction, and are more straightforward and less risky to implement than Sink-side decorators. With just these, it's possible to create another tier (logical or physical) to apply different Event processing to events going to different Sinks, if required, so there is a workaround. Anyway, I share your concerns and I have been thinking a lot about how to make Sink-side decorators work. I'd like to come up with a solution that creates a basically symmetric system without breaking existing interfaces. Some of the other folks working on Flume are thinking about this use case also and I think we will come up with a workable solution soon. Best, Mike
          Hide
          Inder SIngh added a comment -

          Mike, the approach looks good. One use-case i had in mind -

          Let's say i want to use a FanOutSink from a channel and apply different interceptors for different sinks.
          So i understand that there are only three places where we could intercept(source, channel, sink). Any specifics on applying the interceptors on ChannelProcessor

          Show
          Inder SIngh added a comment - Mike, the approach looks good. One use-case i had in mind - Let's say i want to use a FanOutSink from a channel and apply different interceptors for different sinks. So i understand that there are only three places where we could intercept(source, channel, sink). Any specifics on applying the interceptors on ChannelProcessor
          Hide
          jiraposter@reviews.apache.org added a comment -

          -----------------------------------------------------------
          This is an automatically generated e-mail. To reply, visit:
          https://reviews.apache.org/r/5091/
          -----------------------------------------------------------

          Review request for Flume.

          Summary
          -------

          Implementation of Source-side Decorators (called Interceptors here) for Flume 1.x.

          This addresses bug FLUME-1157.
          https://issues.apache.org/jira/browse/FLUME-1157

          Diffs


          flume-ng-core/src/test/java/org/apache/flume/interceptor/TestCensoringInterceptor.java PRE-CREATION
          flume-ng-core/src/main/java/org/apache/flume/source/PollableSourceRunner.java 6ffdb5f
          flume-ng-core/src/test/java/org/apache/flume/interceptor/CensoringInterceptor.java PRE-CREATION
          flume-ng-core/src/main/java/org/apache/flume/interceptor/InterceptorChain.java PRE-CREATION
          flume-ng-core/src/main/java/org/apache/flume/source/EventDrivenSourceRunner.java 9dd15d4
          flume-ng-core/src/main/java/org/apache/flume/interceptor/Interceptor.java PRE-CREATION
          flume-ng-core/src/main/java/org/apache/flume/channel/ChannelProcessor.java eb6460e
          flume-ng-core/src/test/java/org/apache/flume/source/TestPollableSourceRunner.java c27f82c
          flume-ng-node/src/main/java/org/apache/flume/conf/properties/PropertiesFileConfigurationProvider.java 878feda

          Diff: https://reviews.apache.org/r/5091/diff

          Testing
          -------

          Added a unit test with an example Interceptor. Existing unit tests pass.

          Thanks,

          Mike

          Show
          jiraposter@reviews.apache.org added a comment - ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/5091/ ----------------------------------------------------------- Review request for Flume. Summary ------- Implementation of Source-side Decorators (called Interceptors here) for Flume 1.x. This addresses bug FLUME-1157 . https://issues.apache.org/jira/browse/FLUME-1157 Diffs flume-ng-core/src/test/java/org/apache/flume/interceptor/TestCensoringInterceptor.java PRE-CREATION flume-ng-core/src/main/java/org/apache/flume/source/PollableSourceRunner.java 6ffdb5f flume-ng-core/src/test/java/org/apache/flume/interceptor/CensoringInterceptor.java PRE-CREATION flume-ng-core/src/main/java/org/apache/flume/interceptor/InterceptorChain.java PRE-CREATION flume-ng-core/src/main/java/org/apache/flume/source/EventDrivenSourceRunner.java 9dd15d4 flume-ng-core/src/main/java/org/apache/flume/interceptor/Interceptor.java PRE-CREATION flume-ng-core/src/main/java/org/apache/flume/channel/ChannelProcessor.java eb6460e flume-ng-core/src/test/java/org/apache/flume/source/TestPollableSourceRunner.java c27f82c flume-ng-node/src/main/java/org/apache/flume/conf/properties/PropertiesFileConfigurationProvider.java 878feda Diff: https://reviews.apache.org/r/5091/diff Testing ------- Added a unit test with an example Interceptor. Existing unit tests pass. Thanks, Mike
          Hide
          Mike Percy added a comment -

          I'm looking at this issue.

          Show
          Mike Percy added a comment - I'm looking at this issue.

            People

            • Assignee:
              Mike Percy
              Reporter:
              Arvind Prabhakar
            • Votes:
              2 Vote for this issue
              Watchers:
              9 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development