If we allow out-of-sync APIs (and backends) until the time of a release,
aren't we just postponing the syncing problem to the time of the release,
which is a pretty bad time to have such a problem?


On Fri, Sep 26, 2014 at 8:49 PM, Robert Metzger <rmetz...@apache.org> wrote:

> Hi,
>
> I'm also in favor of having a strict policy regarding the Java and Scala
> API.
> In my understanding is the new Scala API a thin layer above the Java one,
> so adding new methods should be straightforward (given that there are
> plenty of examples as a reference).
>
> Robert
>
> On Fri, Sep 26, 2014 at 11:04 AM, Ufuk Celebi <u...@apache.org> wrote:
>
> > Hey Fabian,
> >
> > thanks for bringing this up.
> >
> > I would vote to have a hard policy regarding the Scala and Java API as
> > these are our main user facing APIs.
> >
> > If there was a fundamental problem or language feature, which could not
> be
> > supported/ported in/to the other API, I would be OK if it was only
> > available in one. But small additions to the APIs like outer joins, which
> > can be in sync should also be in sync.
> >
> > If someone does not want to add the corresponding feature to the other
> > APIs, I would go for a pull request with a request for someone else to
> port
> > the missing part it.
> >
> > I think it is very important for users to be able to assume that all APIs
> > have the same "power". Otherwise we might end up in a situation (and I
> > think we already had it with the broadcast variables for a time), where
> > users have to pick the API, which matches their use case and not their
> > preference.
> >
> > Best,
> >
> > Ufuk
> >
> > On 26 Sep 2014, at 10:43, Fabian Hueske <fhue...@apache.org> wrote:
> >
> > > Hi,
> > >
> > > as you all know, Flink has a layered architecture with multiple
> > > alternatives for certain levels.
> > > Exampels are:
> > > - Programming APIs: Java, Scala, (and Python in progress)
> > > - Processing Backends: distributed runtime (former Nephele), Java
> > > Collections, (and potentially Tez in the future)
> > >
> > > The challenge with multiple alternatives that serve the same purpuse is
> > > that these should be in sync.
> > > A feature that is added to the Java API should also be added to the
> Scala
> > > API (and other APIs in the future). The same applies to new runtime
> > > strategies and operators, such as outer joins.
> > >
> > > I think we need a policy how to keep the features of different layer
> > > alternatives in sync.
> > > With the recent update of the Scala API, a ScalaAPICompletenessTest was
> > > added that checks whether the Scala API offers the same methods as the
> > Java
> > > API. Adding a feature to the Java API breaks the build and requires to
> > > either adapt the Scala API as well or exclude the added methods from
> the
> > > APICompletenessTest.
> > > While this test is a great tool to make sure that that APIs are synced,
> > > this basically requires that APIs are always synced, i.e., a
> modification
> > > of the Java API must go with an equivalent change of the Scala API.
> > > If we make this a tight policy and force compatibility at all times,
> > > contributors must know about several different technologies (Scala
> > Compiler
> > > Macros, Python, the implementation details of multiple runtime
> backends,
> > > ...). This sounds like a huge entrance barrier to me.
> > >
> > > To make it clear, I am definitely in favor of keeping APIs and backends
> > in
> > > sync.
> > > However, I propose to enforce this only for releases, i.e., allow
> > > out-of-sync APIs on the master branch and fix the APIs for releases.
> > > With this additional requirement, we also need to think twice which
> > > features to add as multiple components of the system will be affected.
> > >
> > > What do you guys think?
> >
> >
>

Reply via email to