Thank you for your comments. They will help to iterate over the ideas.

I'd like to point out that though this seems to be specifically targeting IOs, there's nothing here that is specific to IOs.

I thought about this from an IO perspective but I agree that it amounts to using any type of cross-language transform. However, there is the IO specific question of how to parameterize IO transforms. If we end up using PipelineOptions for that, there would really be no difference anymore.

@Ismael Will add a link after another review round.

On 08.02.19 09:25, Robert Bradshaw wrote:
Thanks for writing this up. I'd like to point out that though this seems to be specifically targeting IOs, there's nothing here that is specific to IOs.

On Thu, Feb 7, 2019 at 9:30 PM Chamikara Jayalath <chamik...@google.com <mailto:chamik...@google.com>> wrote:

    Thanks Max. Added few comments.

    - Cham

    On Thu, Feb 7, 2019 at 11:18 AM Ismaël Mejía <ieme...@gmail.com
    <mailto:ieme...@gmail.com>> wrote:

        Can you please add the link to the design document webpage.

        Le jeu. 7 févr. 2019 à 19:59, Maximilian Michels <m...@apache.org
        <mailto:m...@apache.org>> a écrit :

            I've created an initial design document:
            https://s.apache.org/beam-cross-language-io

            It does not contain all the details but perhaps it's a good
            basis for a
            discussion on how we proceed.

            -Max

            On 06.02.19 19:49, Chamikara Jayalath wrote:
             >
             >
             > On Wed, Feb 6, 2019 at 8:38 AM Maximilian Michels
            <m...@apache.org <mailto:m...@apache.org>
             > <mailto:m...@apache.org <mailto:m...@apache.org>>> wrote:
             >
             >     Thanks for your replies Robert and Cham.
             >
             >     What I had in mind was a generic Wrapper that would
            easily allow users
             >     to use IO from Java. Such wrapper could start as an
            experimental
             >     feature
             >     and then, through URN versioning, become stable
            eventually.
             >
             >     UDFs are needed, though they are a special case. Most
            users (including
             >     Matthias) just want to specify a few String options
            which do not
             >     require
             >     UDFs but something along the lines what I proposed here.
             >
             >
             > Sounds good let's start documenting/implementing the
            "easy" case and
             > think bit more regarding UDFs.
             >
             >
             >
             >     Robert wrote:
             >      > UDFs that are called from within an IO as part of
            its operation is
             >      > still an open question.
             >
             >     Exactly. How about we solve the easier case first,
            unblock users, and
             >     then think more about solving the general case?
             >
             >     Cham wrote:
             >      > I'm happy to work with you to realize this.
             >
             >     Would be great to exchange more ideas on this! I can
            compile the
             >     current
             >     ideas we have in a document and we move from there.
             >
             >
             > Great. Thanks.
             >
             >
             >     Thanks,
             >     Max
             >
             >     On 05.02.19 17:56, Chamikara Jayalath wrote:
             >      >
             >      >
             >      > On Tue, Feb 5, 2019, 8:11 AM Maximilian Michels
            <m...@apache.org <mailto:m...@apache.org>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>>
             >      > <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>> wrote:
             >      >
             >      >     Good points Cham.
             >      >
             >      >     JSON seemed like the most intuitive way to
            specify a
             >     configuration map.
             >      >     We already use JSON in other places, e.g. to
            specify the
             >     environment
             >      >     configuration. It is not necessarily a
            contradiction to have JSON
             >      >     inside
             >      >     Protobuf. From the perspective of IO authors, the
             >     user-friendliness
             >      >     plays a role because they wouldn't have to
            deal with Protobuf.
             >      >
             >      >
             >      > It's a good point that JSON will make this more
            user-friendly for IO
             >      > transforms authors. Probably we should do a bit of
             >     experimentation and
             >      > keep this experimental in case we hit a
            performance snag.
             >      >
             >      >
             >      >     I agree that the configuration format is an
            implementation
             >     detail that
             >      >     will be hidden to users via easy-to-use wrappers.
             >      >
             >      >     Do we have to support UDFs for expanding
            existing IO? Users
             >     would still
             >      >     be able to apply UDFs via ParDo on the IO
            output collections.
             >     Generally
             >      >     speaking, I can see how for cross-language
            transforms UDF
             >     support would
             >      >     be good. For example, a Combine implementation
            in Java, where the
             >      >     combine UDFs come from Python.
             >      >
             >      >
             >      > I think we should try to support UDFs in the first
            version unless
             >      > there's a major blocker that hinders realizing
            this. Many IO
             >     transforms
             >      > available today expect users to pass UDFs to
            realize various
             >     features
             >      > (for example, dynamic destinations for BigqueryIO
            and FileIO,
             >     timestamp
             >      > function for KafkaIO). I think without support for
            UDFs usability of
             >      > cross-language transforms feature will be
            significantly limited.
             >      >
             >      > I'm happy to work with you to realize this.
             >      >
             >      > Thanks,
             >      > Cham
             >      >
             >      >
             >      >     I suppose the question is, do we try to solve
            the general
             >     case, or
             >      >     do we
             >      >     go with a simpler approach for enabling the
            use of existing
             >     IO first?
             >      >     Lack of IO seems to be the most pressing issue
            for the
             >     adoption of Beam
             >      >     Python. I imagine that a backwards-compatible
            incremental
             >     support for
             >      >     cross-language transforms (IOs first, later
            other transforms)
             >     would be
             >      >     possible.
             >      >
             >      >     -Max
             >      >
             >      >     On 05.02.19 03:07, Chamikara Jayalath wrote:
             >      >      >
             >      >      >
             >      >      > On Fri, Feb 1, 2019 at 6:12 AM Maximilian
            Michels
             >     <m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >      > <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>> wrote:
             >      >      >
             >      >      >     Yes, I imagine sources to implement a
            JsonConfigurable
             >      >     interface (e.g.
             >      >      >     on their builders):
             >      >      >
             >      >      >     JsonConfigurable {
             >      >      >         // Either a json string or
            Map<String, String>
             >      >      >         apply(String jsonConfig);
             >      >      >     }
             >      >      >
             >      >      >     In Python we would create this transform:
             >      >      >
             >      >      >     URN: JsonConfiguredSource:v1
             >      >      >     payload: {
             >      >      >          environment: environment_id, //
            Java/Python/Go
             >      >      >          resourceIdentifier: string,  //
             >      >     "org.apache.beam.io.PubSubIO"
             >      >      >          configuration: json config,  // {
            "topic" :
             >      >     "my_pubsub_topic" }
             >      >      >     }
             >      >      >
             >      >      >
             >      >      > Thanks Max, this is a great first step
            towards defining to
             >     API for
             >      >      > cross-language transforms.
             >      >      > Is there a reason why you would want to use
            JSON instead
             >     of a proto
             >      >      > here. I guess we'll be providing a more
            user friendly language
             >      >     wrapper
             >      >      > (for example, Python) for end-users here, so
             >      >     user-friendliness-wise, the
             >      >      > format we choose won't matter much (for
            pipeline authors).
             >      >      > If we don't support UDFs, performance
            difference will be
             >      >     negligible, but
             >      >      > UDFs might require a callback to original
            SDK (per-element
             >     worst
             >      >     case).
             >      >      > So might make sense to choose the more
            efficient format.
             >      >      >
             >      >      > Also, probably we need to define a more
            expanded definition
             >      >     (proto/JSON)
             >      >      > to support UDFs. For example, a payload + a
            set of parameter
             >      >     definitions
             >      >      > so that the target SDK (for example, Java)
            can call back the
             >      >     original
             >      >      > SDK where the pipeline was authored in (for
            example,
             >     Python) to
             >      >     resolve
             >      >      > UDFs at runtime.
             >      >      >
             >      >      > Thanks,
             >      >      > Cham
             >      >      >
             >      >      >     That's more generic and could be used
            for other languages
             >      >     where we
             >      >      >     might
             >      >      >     have sources/sinks.
             >      >      >
             >      >      >      > (FWIW, I was imagining PubSubIO
            already had a
             >     translation into
             >      >      >     BeamFnApi protos that fully specified
            it, and we use
             >     that same
             >      >      >     format to translate back out.)
             >      >      >
             >      >      >     Not that I know of.
             >      >      >
             >      >      >     On 01.02.19 14:02, Robert Bradshaw wrote:
             >      >      >      > Are you suggesting something akin to
            a generic
             >      >      >      >
             >      >      >      >      urn: JsonConfiguredJavaSource
             >      >      >      >      payload: some json specifying
            which source and
             >     which
             >      >     parameters
             >      >      >      >
             >      >      >      > which would expand to actually
            constructing and
             >     applying
             >      >     that source?
             >      >      >      >
             >      >      >      > (FWIW, I was imagining PubSubIO
            already had a
             >     translation into
             >      >      >     BeamFnApi
             >      >      >      > protos that fully specified it, and
            we use that
             >     same format to
             >      >      >     translate
             >      >      >      > back out.)
             >      >      >      >
             >      >      >      > On Fri, Feb 1, 2019 at 1:44 PM
            Maximilian Michels
             >      >     <m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >      > <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>> wrote:
             >      >      >      >
             >      >      >      >     Recaping here:
             >      >      >      >
             >      >      >      >     We all agree that SDF is the way
            to go for future
             >      >      >     implementations of
             >      >      >      >     sources. It enables us to get
            rid of the source
             >      >     interfaces.
             >      >      >     However,
             >      >      >      >     SDF
             >      >      >      >     does not solve the lack of
            streaming sources in
             >     Python.
             >      >      >      >
             >      >      >      >     The expansion PR (thanks btw!)
            solves the
             >     problem of
             >      >      >      >     expanding/translating URNs known
            to an
             >      >     ExpansionService. That
             >      >      >     is a more
             >      >      >      >     programmatic way of replacing
            language-specific
             >     performs,
             >      >      >     instead of
             >      >      >      >     relying on translators directly
            in the Runner.
             >      >      >      >
             >      >      >      >     What is unsolved is the
            configuration of
             >     sources from
             >      >     a foreign
             >      >      >      >     environment. In my opinion this
            is the most
             >     pressing issue
             >      >      >     for Python
             >      >      >      >     sources, because what is
            PubSubIO worth in
             >     Python if
             >      >     you cannot
             >      >      >      >     configure it?
             >      >      >      >
             >      >      >      >     What about this:
             >      >      >      >
             >      >      >      >     I think it is worth adding a
            JSON configuration
             >     option for
             >      >      >     all existing
             >      >      >      >     Java sources. That way, we could
            easily
             >     configure them as
             >      >      >     part of the
             >      >      >      >     expansion request (which would
            contain a JSON
             >      >     configuration).
             >      >      >     I'll
             >      >      >      >     probably fork a thread to
            discuss this in more
             >     detail,
             >      >     but would
             >      >      >      >     like to
             >      >      >      >     hear your thoughts.
             >      >      >      >
             >      >      >      >     -Max
             >      >      >      >
             >      >      >      >     On 01.02.19 13:08, Robert
            Bradshaw wrote:
             >      >      >      >      > On Thu, Jan 31, 2019 at 6:25
            PM Maximilian
             >     Michels
             >      >      >      >     <m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>
             >      >      >      >      > <mailto:m...@apache.org
            <mailto:m...@apache.org>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>>
            <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>>> wrote:
             >      >      >      >      >
             >      >      >      >      >     Ah, I thought you meant
            native Flink
             >     transforms.
             >      >      >      >      >
             >      >      >      >      >     Exactly! The translation
            code is already
             >     there.
             >      >     The main
             >      >      >      >     challenge
             >      >      >      >      >     is how to
             >      >      >      >      >     programmatically
            configure the BeamIO from
             >      >     Python. I
             >      >      >     suppose
             >      >      >      >     that is
             >      >      >      >      >     also an
             >      >      >      >      >     unsolved problem for
            cross-language
             >     transforms
             >      >     in general.
             >      >      >      >      >
             >      >      >      >      >
             >      >      >      >      > This is what
             >      > https://github.com/apache/beam/pull/7316 does.
             >      >      >      >      >
             >      >      >      >      > For a particular source, one
            would want to
             >     define a
             >      >     URN and
             >      >      >      >      > corresponding payload, then
            (probably) a
             >      >     CompositeTransform in
             >      >      >      >     Python
             >      >      >      >      > that takes the users
            arguments, packages
             >     them into the
             >      >      >     payload,
             >      >      >      >     applies
             >      >      >      >      > the ExternalTransform, and
            returns the
             >     results. How
             >      >     to handle
             >      >      >      >     arbitrary
             >      >      >      >      > UDFs embedded in sources is
            still TBD.
             >      >      >      >      >
             >      >      >      >      >     For Matthias' pipeline
            with PubSubIO we
             >     can build
             >      >      >     something
             >      >      >      >      >     specific, but for
             >      >      >      >      >     the general case there
            should be way to
             >      >     initialize a
             >      >      >     Beam IO
             >      >      >      >     via a
             >      >      >      >      >     configuration
             >      >      >      >      >     map provided by an
            external environment.
             >      >      >      >      >
             >      >      >      >      >
             >      >      >      >      > I thought quite a bit about
            how we could
             >     represent
             >      >     expansions
             >      >      >      >     statically
             >      >      >      >      > (e.g. have some kind of
            expansion template that
             >      >     could be
             >      >      >     used, at
             >      >      >      >     least
             >      >      >      >      > in many cases, as data
            without firing up a
             >     separate
             >      >      >     process. May be
             >      >      >      >      > worth doing eventually, but
            we run into the
             >     same issues
             >      >      >     that were
             >      >      >      >      > discussed at
             >      >      >      >      >
             >      >      >
             >
            https://github.com/apache/beam/pull/7316#discussion_r249996455
            ).
             >      >      >      >      >
             >      >      >      >      > If one is already using a
            portable runner
             >     like Flink,
             >      >      >     having the job
             >      >      >      >      > service process automatically
            also serve up an
             >      >     expansion
             >      >      >     service for
             >      >      >      >      > various URNs it knows and
            cares about is
             >     probably a
             >      >     pretty
             >      >      >     low bar.
             >      >      >      >      > Flink could serve up things
            it would rather
             >     get back
             >      >      >     untouched in a
             >      >      >      >      > transform with a special
            flink runner urn.
             >      >      >      >      >
             >      >      >      >      > As Ahmet mentions, SDF is
            better solution. I
             >     hope
             >      >     it's not
             >      >      >     that far
             >      >      >      >      > away, but even once it comes
            we'll likely
             >     want the
             >      >     above
             >      >      >      >     framework to
             >      >      >      >      > invoke the full suite of Java
            IOs even after
             >     they're
             >      >      >     running on SDF
             >      >      >      >      > themselves.
             >      >      >      >      >
             >      >      >      >      > - Robert
             >      >      >      >      >
             >      >      >      >      >     On 31.01.19 17:36, Thomas
            Weise wrote:
             >      >      >      >      >      > Exactly, that's what I
            had in mind.
             >      >      >      >      >      >
             >      >      >      >      >      > A Flink runner native
            transform would
             >     make
             >      >     the existing
             >      >      >      >     unbounded
             >      >      >      >      >     sources
             >      >      >      >      >      > available, similar to:
             >      >      >      >      >      >
             >      >      >      >      >      >
             >      >      >      >      >
             >      >      >      >
             >      >      >
             >      >
             >
            
https://github.com/apache/beam/blob/2e89c1e4d35e7b5f95a622259d23d921c3d6ad1f/runners/flink/src/main/java/org/apache/beam/runners/flink/FlinkStreamingTransformTranslators.java#L167
             >      >      >      >      >      >
             >      >      >      >      >      >
             >      >      >      >      >      >
             >      >      >      >      >      >
             >      >      >      >      >      > On Thu, Jan 31, 2019
            at 8:18 AM
             >     Maximilian
             >      >     Michels
             >      >      >      >      >     <m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>
             >      >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>>
             >      >      >      >      >      > <mailto:m...@apache.org
            <mailto:m...@apache.org>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>
             >      >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>>>> wrote:
             >      >      >      >      >      >
             >      >      >      >      >      >     Wouldn't it be
            even more useful
             >     for the
             >      >     transition
             >      >      >      >     period if
             >      >      >      >      >     we enabled Beam IO
             >      >      >      >      >      >     to be used via
            Flink (like in the
             >     legacy
             >      >     Flink
             >      >      >     Runner)? In
             >      >      >      >      >     this particular
             >      >      >      >      >      >     example, Matthias
            wants to use
             >     PubSubIO,
             >      >     which
             >      >      >     is not even
             >      >      >      >      >     available as a
             >      >      >      >      >      >     native
             >      >      >      >      >      >     Flink transform.
             >      >      >      >      >      >
             >      >      >      >      >      >     On 31.01.19 16:21,
            Thomas Weise
             >     wrote:
             >      >      >      >      >      >      > Until SDF is
            supported, we
             >     could also add
             >      >      >     Flink runner
             >      >      >      >      >     native transforms for
             >      >      >      >      >      >      > selected
            unbounded sources [1].
             >      >      >      >      >      >      >
             >      >      >      >      >      >      > That might be a
            reasonable
             >     option to
             >      >     unblock
             >      >      >     users that
             >      >      >      >      >     want to try Python
             >      >      >      >      >      >      > streaming on Flink.
             >      >      >      >      >      >      >
             >      >      >      >      >      >      > Thomas
             >      >      >      >      >      >      >
             >      >      >      >      >      >      > [1]
             >      >      >      >      >      >      >
             >      >      >      >      >      >
             >      >      >      >      >
             >      >      >      >
             >      >      >
             >      >
             >
            
https://github.com/lyft/beam/blob/release-2.10.0-lyft/runners/flink/src/main/java/org/apache/beam/runners/flink/LyftFlinkStreamingPortableTranslations.java
             >      >      >      >      >      >      >
             >      >      >      >      >      >      >
             >      >      >      >      >      >      > On Thu, Jan 31,
            2019 at 6:51 AM
             >      >     Maximilian
             >      >      >     Michels
             >      >      >      >      >     <m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>
             >      >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>>
>      >      >      >      >      >  <mailto:m...@apache.org <mailto:m...@apache.org>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>
             >      >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>>>
             >      >      >      >      >      >      >
            <mailto:m...@apache.org <mailto:m...@apache.org>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>
             >      >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>>
             >      >      >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>>
            <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>
             >      >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>>>>> wrote:
             >      >      >      >      >      >      >
             >      >      >      >      >      >      >      > I have a
            hard time to
             >     imagine
             >      >     how can
             >      >      >     we map
             >      >      >      >     in a
             >      >      >      >      >     generic way
>      >      >      >      >      >      >  RestrictionTrackers into
             >     the existing
             >      >      >      >      >     Bounded/UnboundedSource,
            so I would
             >      >      >      >      >      >      >     love to
            hear more about
             >     the details.
             >      >      >      >      >      >      >
             >      >      >      >      >      >      >     Isn't it
            the other way around?
             >      >     The SDF is a
             >      >      >      >      >     generalization of
             >      >      >      >      >      >     UnboundedSource.
             >      >      >      >      >      >      >     So we would
            wrap
             >     UnboundedSource
             >      >     using
             >      >      >     SDF. I'm not
             >      >      >      >      >     saying it is
             >      >      >      >      >      >     trivial, but
             >      >      >      >      >      >      >     SDF offers
            all the
             >     functionality that
             >      >      >      >     UnboundedSource
             >      >      >      >      >     needs.
             >      >      >      >      >      >      >
             >      >      >      >      >      >      >     For
            example, the
             >      >     @GetInitialRestriction
             >      >      >     method
             >      >      >      >     would
             >      >      >      >      >     call split on the
>      >      >      >      >      >      >  UnboundedSource and the
             >     restriction
             >      >      >     trackers would
             >      >      >      >      >     then be used to
             >      >      >      >      >      >     process the
             >      >      >      >      >      >      >     splits.
             >      >      >      >      >      >      >
             >      >      >      >      >      >      >     On 31.01.19
            15:16, Ismaël
             >     Mejía
             >      >     wrote:
             >      >      >      >      >      >      >      >> Not
            necessarily. This
             >     would
             >      >     be one
             >      >      >     way. Another
             >      >      >      >      >     way is build an SDF
             >      >      >      >      >      >      >     wrapper for
            UnboundedSource.
             >      >     Probably the
             >      >      >      >     easier path
             >      >      >      >      >     for migration.
             >      >      >      >      >      >      >      >
             >      >      >      >      >      >      >      > That
            would be fantastic, I
             >      >     have heard
             >      >      >     about such
             >      >      >      >      >     wrapper multiple
             >      >      >      >      >      >      >      > times
            but so far there
             >     is not any
             >      >      >     realistic
             >      >      >      >      >     proposal. I have a hard
             >      >      >      >      >      >      >      > time to
            imagine how can
             >     we map
             >      >     in a
             >      >      >     generic way
             >      >      >      >      >     RestrictionTrackers
             >      >      >      >      >      >      >      > into the
            existing
             >      >      >     Bounded/UnboundedSource, so I
             >      >      >      >      >     would love to hear
             >      >      >      >      >      >      >      > more
            about the details.
             >      >      >      >      >      >      >      >
             >      >      >      >      >      >      >      > On Thu,
            Jan 31, 2019 at
             >     3:07 PM
             >      >      >     Maximilian
             >      >      >      >     Michels
             >      >      >      >      >     <m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>
             >      >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>>
>      >      >      >      >      >  <mailto:m...@apache.org <mailto:m...@apache.org>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>
             >      >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>>>
>      >      >      >      >      >      >  <mailto:m...@apache.org <mailto:m...@apache.org>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>
             >      >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>>
             >      >      >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>>
            <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>
             >      >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>>>>> wrote:
             >      >      >      >      >      >      >      >>
             >      >      >      >      >      >      >      >>   > In
            addition to have
             >      >     support in
             >      >      >     the runners,
             >      >      >      >      >     this will require a
             >      >      >      >      >      >      >      >>   >
            rewrite of PubsubIO to
             >      >     use the
             >      >      >     new SDF API.
             >      >      >      >      >      >      >      >>
             >      >      >      >      >      >      >      >> Not
            necessarily. This
             >     would
             >      >     be one
             >      >      >     way. Another
             >      >      >      >      >     way is build an SDF
             >      >      >      >      >      >      >     wrapper for
             >      >      >      >      >      >      >      >>
            UnboundedSource.
             >     Probably the
             >      >     easier
             >      >      >     path for
             >      >      >      >      >     migration.
             >      >      >      >      >      >      >      >>
             >      >      >      >      >      >      >      >> On
            31.01.19 14:03, Ismaël
             >      >     Mejía wrote:
             >      >      >      >      >      >      >      >>>>
            Fortunately, there
             >     is already a
             >      >      >     pending
             >      >      >      >     PR for
             >      >      >      >      >     cross-language
             >      >      >      >      >      >      >     pipelines which
             >      >      >      >      >      >      >      >>>> will
            allow us to use
             >     Java
             >      >     IO like
             >      >      >     PubSub in
             >      >      >      >      >     Python jobs.
             >      >      >      >      >      >      >      >>>
             >      >      >      >      >      >      >      >>> In
            addition to have
             >     support
             >      >     in the
             >      >      >      >     runners, this
             >      >      >      >      >     will require a
             >      >      >      >      >      >      >      >>>
            rewrite of PubsubIO
             >     to use
             >      >     the new
             >      >      >     SDF API.
             >      >      >      >      >      >      >      >>>
             >      >      >      >      >      >      >      >>> On
            Thu, Jan 31, 2019
             >     at 12:23 PM
             >      >      >      >     Maximilian Michels
             >      >      >      >      >      >     <m...@apache.org
            <mailto:m...@apache.org>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>>
            <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>
             >      >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>>
             >      >      >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>>
            <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>
             >      >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>>>
>      >      >      >      >      >      >  <mailto:m...@apache.org <mailto:m...@apache.org>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>
             >      >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>>
             >      >      >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>>
            <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>>
             >      >      >      >     <mailto:m...@apache.org
            <mailto:m...@apache.org> <mailto:m...@apache.org
            <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>
             >      >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>
             >     <mailto:m...@apache.org <mailto:m...@apache.org>
            <mailto:m...@apache.org <mailto:m...@apache.org>>>>
             >      >      >     <mail

Reply via email to