You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@nifi.apache.org by ijokarumawak <gi...@git.apache.org> on 2017/06/05 12:42:38 UTC

[GitHub] nifi pull request #1891: NIFI-4008: Allow 0 or more records within a message...

GitHub user ijokarumawak opened a pull request:

    https://github.com/apache/nifi/pull/1891

    NIFI-4008: Allow 0 or more records within a message.

    Thank you for submitting a contribution to Apache NiFi.
    
    In order to streamline the review of the contribution we ask you
    to ensure the following steps have been taken:
    
    ### For all changes:
    - [x] Is there a JIRA ticket associated with this PR? Is it referenced 
         in the commit message?
    
    - [x] Does your PR title start with NIFI-XXXX where XXXX is the JIRA number you are trying to resolve? Pay particular attention to the hyphen "-" character.
    
    - [x] Has your PR been rebased against the latest commit within the target branch (typically master)?
    
    - [x] Is your initial contribution a single, squashed commit?
    
    ### For code changes:
    - [ ] Have you ensured that the full suite of tests is executed via mvn -Pcontrib-check clean install at the root nifi folder?
    - [ ] Have you written or updated unit tests to verify your changes?
    - [ ] If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under [ASF 2.0](http://www.apache.org/legal/resolved.html#category-a)? 
    - [ ] If applicable, have you updated the LICENSE file, including the main LICENSE file under nifi-assembly?
    - [ ] If applicable, have you updated the NOTICE file, including the main NOTICE file found under nifi-assembly?
    - [ ] If adding new Properties, have you added .displayName in addition to .name (programmatic access) for each of the new properties?
    
    ### For documentation related changes:
    - [ ] Have you ensured that format looks appropriate for the output in which it is rendered?
    
    ### Note:
    Please ensure that once the PR is submitted, you check travis-ci for build issues and submit an update to your PR as soon as possible.


You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/ijokarumawak/nifi nifi-4008

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/nifi/pull/1891.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1891
    
----
commit 1cc0abb80f3df2a9352729d5ecc8ca63e2afdf1d
Author: Koji Kawamura <ij...@apache.org>
Date:   2017-06-05T12:40:53Z

    NIFI-4008: Allow 0 or more records within a message.

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] nifi pull request #1891: NIFI-4008: Allow 0 or more records within a message...

Posted by asfgit <gi...@git.apache.org>.
Github user asfgit closed the pull request at:

    https://github.com/apache/nifi/pull/1891


---

[GitHub] nifi issue #1891: NIFI-4008: Allow 0 or more records within a message.

Posted by markap14 <gi...@git.apache.org>.
Github user markap14 commented on the issue:

    https://github.com/apache/nifi/pull/1891
  
    @ijokarumawak it looks like this PR makes changes only to kafka-0-10-processors. We probably need the same thing done to kafka-0-9-processors and kafka-0-11-processors, no?


---

[GitHub] nifi issue #1891: NIFI-4008: Allow 0 or more records within a message.

Posted by ijokarumawak <gi...@git.apache.org>.
Github user ijokarumawak commented on the issue:

    https://github.com/apache/nifi/pull/1891
  
    @markap14 Thanks, I'll update it shortly!


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] nifi issue #1891: NIFI-4008: Allow 0 or more records within a message.

Posted by ijokarumawak <gi...@git.apache.org>.
Github user ijokarumawak commented on the issue:

    https://github.com/apache/nifi/pull/1891
  
    Rebased and solved conflicts. @markap14 Would you take a look on it again?


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] nifi pull request #1891: NIFI-4008: Allow 0 or more records within a message...

Posted by ijokarumawak <gi...@git.apache.org>.
Github user ijokarumawak commented on a diff in the pull request:

    https://github.com/apache/nifi/pull/1891#discussion_r124994470
  
    --- Diff: nifi-nar-bundles/nifi-kafka-bundle/nifi-kafka-0-10-processors/src/main/java/org/apache/nifi/processors/kafka/pubsub/ConsumerLease.java ---
    @@ -418,82 +419,106 @@ private void writeDemarcatedData(final ProcessSession session, final List<Consum
         }
     
     
    -    private void writeRecordData(final ProcessSession session, final List<ConsumerRecord<byte[], byte[]>> records, final TopicPartition topicPartition) {
    +    private void writeRecordData(final ProcessSession session, final List<ConsumerRecord<byte[], byte[]>> messages, final TopicPartition topicPartition) {
             // In order to obtain a RecordReader from the RecordReaderFactory, we need to give it a FlowFile.
             // We don't want to create a new FlowFile for each record that we receive, so we will just create
             // a "temporary flowfile" that will be removed in the finally block below and use that to pass to
             // the createRecordReader method.
             final FlowFile tempFlowFile = session.create();
             RecordSetWriter writer = null;
     
    +        final BiConsumer<ConsumerRecord<byte[], byte[]>, Exception> handleParseFailure = (consumerRecord, e) -> {
    --- End diff --
    
    I reviewed and merged #1906 . I will update this PR again.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] nifi issue #1891: NIFI-4008: Allow 0 or more records within a message.

Posted by markap14 <gi...@git.apache.org>.
Github user markap14 commented on the issue:

    https://github.com/apache/nifi/pull/1891
  
    @ijokarumawak unfortunately it looks like this PR needs to be rebased against master.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] nifi issue #1891: NIFI-4008: Allow 0 or more records within a message.

Posted by joewitt <gi...@git.apache.org>.
Github user joewitt commented on the issue:

    https://github.com/apache/nifi/pull/1891
  
    Sounds good to me.  Thanks!


---

[GitHub] nifi issue #1891: NIFI-4008: Allow 0 or more records within a message.

Posted by markap14 <gi...@git.apache.org>.
Github user markap14 commented on the issue:

    https://github.com/apache/nifi/pull/1891
  
    @ijokarumawak ok i've merged this into master now. Thanks for knocking that out - and sorry that it took so long!! Will get a PR up soon to make the same improvements to the kafka 0.11 processors!


---

[GitHub] nifi pull request #1891: NIFI-4008: Allow 0 or more records within a message...

Posted by markap14 <gi...@git.apache.org>.
Github user markap14 commented on a diff in the pull request:

    https://github.com/apache/nifi/pull/1891#discussion_r124803429
  
    --- Diff: nifi-nar-bundles/nifi-kafka-bundle/nifi-kafka-0-10-processors/src/main/java/org/apache/nifi/processors/kafka/pubsub/ConsumerLease.java ---
    @@ -418,82 +419,106 @@ private void writeDemarcatedData(final ProcessSession session, final List<Consum
         }
     
     
    -    private void writeRecordData(final ProcessSession session, final List<ConsumerRecord<byte[], byte[]>> records, final TopicPartition topicPartition) {
    +    private void writeRecordData(final ProcessSession session, final List<ConsumerRecord<byte[], byte[]>> messages, final TopicPartition topicPartition) {
             // In order to obtain a RecordReader from the RecordReaderFactory, we need to give it a FlowFile.
             // We don't want to create a new FlowFile for each record that we receive, so we will just create
             // a "temporary flowfile" that will be removed in the finally block below and use that to pass to
             // the createRecordReader method.
             final FlowFile tempFlowFile = session.create();
             RecordSetWriter writer = null;
     
    +        final BiConsumer<ConsumerRecord<byte[], byte[]>, Exception> handleParseFailure = (consumerRecord, e) -> {
    --- End diff --
    
    Unfortunately, I think this PR very much conflicts with NIFI-4046/PR 1906, which I just pushed another commit to, in order to address your feedback. Either PR could be merged first and then the other updated. We both refactored this piece of code to make it re-usable. However, with the new refactoring for 4046, I think I prefer the method there, of having a separate method instead of a lambda because we end up passing in an optional message. Thoughts?


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] nifi issue #1891: NIFI-4008: Allow 0 or more records within a message.

Posted by ijokarumawak <gi...@git.apache.org>.
Github user ijokarumawak commented on the issue:

    https://github.com/apache/nifi/pull/1891
  
    As @joewitt suggested on JIRA ticket, even if a message contains multiple records, the message probably should be treated as one. In order to do so, they will define a schema that has a compound array object as the top level object. I agree with that.
    
    However, if an user is going to split it at downstream, they need another schema to treat each items within the top-level array as individual record. If ConsumeKafkaRecord can do that as it consumes messages, it may be better. Ideally, I prefer ConsumeKafkaRecord to support both ways, by parsing a message as a message, or split each records in a message.
    
    I intended to support both mode in this PR. Please let me know if we have strong reason not to do this.
    
    By the way, I did try to setup a schema in AvroSchemaRegistry as follows:
    
    ```
    {
      "type": "array",
      "items": {
        "type": "record", "name": "temp",
        "fields": [
          {"name": "value", "type": "string"}
        ]
      }
    }
    ```
    
    While this is a valid schema in Avro, current NiFi AvroSchemaRegistry doesn't allow this as it requires the top level object to be a record. I got "Not a record" validation error when [AvroTypeUtil tried to call getFields](https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-avro-record-utils/src/main/java/org/apache/nifi/avro/AvroTypeUtil.java#L218):
    
    ![image](https://cloud.githubusercontent.com/assets/1107620/26784776/4090f882-4a3a-11e7-8540-3672914f90ab.png)
    
    I think this should be addressed by another JIRA.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] nifi issue #1891: NIFI-4008: Allow 0 or more records within a message.

Posted by markap14 <gi...@git.apache.org>.
Github user markap14 commented on the issue:

    https://github.com/apache/nifi/pull/1891
  
    @joewitt fair enough. I can certainly rebase against master & handle any merge conflict and get this into 0.10. I will create a separate PR I guess for the 0.11 stuff so that someone is able to review that before pushing


---

[GitHub] nifi issue #1891: NIFI-4008: Allow 0 or more records within a message.

Posted by joewitt <gi...@git.apache.org>.
Github user joewitt commented on the issue:

    https://github.com/apache/nifi/pull/1891
  
    I dont think we need to worry about the kafka 0.9 processors getting updated unless/until someone really clearly needs them.  As for the 0.11 stuff since his PR was already in it is probably best to accept his PR as-is and/or add the 0.11 processor changes in based on that.
    



---