[ 
https://issues.apache.org/jira/browse/BEAM-9831?focusedWorklogId=428379&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-428379
 ]

ASF GitHub Bot logged work on BEAM-9831:
----------------------------------------

                Author: ASF GitHub Bot
            Created on: 28/Apr/20 21:16
            Start Date: 28/Apr/20 21:16
    Worklog Time Spent: 10m 
      Work Description: pabloem commented on a change in pull request #11538:
URL: https://github.com/apache/beam/pull/11538#discussion_r416060393



##########
File path: 
sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/healthcare/HL7v2IO.java
##########
@@ -475,7 +497,14 @@ public void initClient() throws IOException {
     public void listMessages(ProcessContext context) throws IOException {
       String hl7v2Store = context.element();
       // Output all elements of all pages.
-      this.client.getHL7v2MessageStream(hl7v2Store, 
this.filter).forEach(context::output);
+      HttpHealthcareApiClient.HL7v2MessagePages pages =
+          new HttpHealthcareApiClient.HL7v2MessagePages(client, hl7v2Store, 
this.filter);
+      long reqestTime = Instant.now().getMillis();

Review comment:
       `requestTime`?

##########
File path: 
sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/healthcare/HL7v2IO.java
##########
@@ -437,6 +444,20 @@ private Message fetchMessage(HealthcareApiClient client, 
String msgId)
           .apply(Create.of(this.hl7v2Stores))
           .apply(ParDo.of(new ListHL7v2MessagesFn(this.filter)))
           .setCoder(new HL7v2MessageCoder())
+          // Listing takes a long time for each input element (HL7v2 store) 
because it has to
+          // paginate through results in a single thread / ProcessElement call 
in order to keep
+          // track of page token.
+          // Eagerly emit data on 1 second intervals so downstream processing 
can get started before
+          // all of the list results have been paginated through.

Review comment:
       Unfortunately, this is not possible. If you are paginating from inside 
the single DoFn `processelement` call, the data coming out of it will only go 
downstream after the element is done being processed, so this windowing is not 
changing that in the execution.
   This is because bundle execution is committed atomically, so the whole 
bundle executes before data can go downstream. You do touch on an interesting 
example, which is one of the reasons that we came up with SplittableDoFn.
   
   Something you could try to do is:
   ```
   PColll<HL7v2Message> pages = hl7v2Stores.apply(ParDo.of(new 
RetrieveAndOutputPagesFn()))
   
   pages.apply(Reshuffle.viaRandomKey()).apply(ParDo.of(new FetchEachPageFn())
   ```
   Though I don't know if you can actually do that : )




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Issue Time Tracking
-------------------

    Worklog Id:     (was: 428379)
    Time Spent: 0.5h  (was: 20m)

> HL7v2IO Improvements
> --------------------
>
>                 Key: BEAM-9831
>                 URL: https://issues.apache.org/jira/browse/BEAM-9831
>             Project: Beam
>          Issue Type: Bug
>          Components: io-java-gcp
>            Reporter: Jacob Ferriero
>            Assignee: Jacob Ferriero
>            Priority: Major
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> # HL7v2MessageCoder constructor should be public for use by end users
>  # Currently HL7v2IO.ListHL7v2Messages blocks on pagination through list 
> messages results before emitting any output data elements (due to high fan 
> out from a single input element). We should add early firings so that 
> downstream processing can proceed on early pages while later pages are still 
> being scrolled through.
>  # We should drop all output only fields of HL7v2Message and only keep data 
> and labels when calling ingestMessages, rather than expecting the user to do 
> this.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to