I've also had a look. +1 to merge from my side.

On Tue, Dec 15, 2015 at 3:27 PM, Robert Metzger <rmetz...@apache.org> wrote:
> The PR has been open for a while, Stephan, Aljoscha and Henry looked over
> it and I've addressed all comments by them:
> https://github.com/apache/flink/pull/1427
>
> I would like to merge the pull request adding the "flink-annotations"
> module and annotating all classes in "flink-core" soon (say, next 24-48
> hours).
> We can still make changes once its merged, but I would like to get this one
> done and start discussing the remaining modules and merge them as well
> afterwards.
>
>
>
> On Tue, Dec 1, 2015 at 2:20 PM, Robert Metzger <rmetz...@apache.org> wrote:
>
>> I left out the classes in memory except for the Input/Output views.
>>
>> Or course, we should try to minimize the stable classes, but user programs
>> get a lot of extension points in Flink ;)
>>
>> I've opened a pull request with my current suggestion:
>> https://github.com/apache/flink/pull/1426
>>
>>
>> On Tue, Dec 1, 2015 at 2:13 PM, Maximilian Michels <m...@apache.org> wrote:
>>
>>> Thanks for the explanation. I was just wondering how you approached
>>> the problem. Going through class-by-class makes sense.
>>>
>>> Not sure whether we want to make "org.apache.flink.core.memory" and
>>> "org.apache.flink.api.common.distributions" stable interfaces. I would
>>> think these qualify more as experimental public.
>>>
>>> Shouldn't we try to minimize the number of classes we declare stable?
>>> Of course it is nice to offer a stable interface to developers but it
>>> might also come in the way of the Flink developers..
>>>
>>>
>>> On Mon, Nov 30, 2015 at 10:31 AM, Robert Metzger <rmetz...@apache.org>
>>> wrote:
>>> > Hi Max,
>>> >
>>> > classes in flink-scala are annotated as well, and its also in the list
>>> :)
>>> >
>>> > I considered classes in flink-core, flink-runtime, flink-scala,
>>> > flink-streaming-java, flink-streaming-scala,
>>> > flink-connector-kafka, flink-connector-filesystem, flink-avro and
>>> > flink-hadoop-compatibility.
>>> > I think there is no clear definition for a public interface, that's why
>>> I
>>> > just decided on a class-by-class basis.
>>> >
>>> > Classes I left out / I was uncertain with:
>>> >
>>> >    - org.apache.flink.api.common.distributions
>>> >    - only some Input/output classes in org.apache.flink.api.common.io
>>> >    - org.apache.flink.api.common.operators
>>> >    - only the TypeInformation in org.apache.flink.api.common.typeinfo
>>> (not
>>> >    the Atomic, basic, integer, .. type infos)
>>> >    - most in org.apache.flink.core.memory (except Input/output view)
>>> >    - I didn’t add the parsers in org.apache.flink.types.parser
>>> >
>>> >
>>> >
>>> >
>>> > On Mon, Nov 30, 2015 at 10:19 AM, Maximilian Michels <m...@apache.org>
>>> wrote:
>>> >
>>> >> Thank for your getting us started on annotating the API. The list
>>> >> looks good so far. I have the feeling it could even be extended a bit.
>>> >> Just curious, how did you choose which classes you annotate? Did you
>>> >> go through all the classes in flink-core, flink-java, and
>>> >> flink-clients Maven projects?
>>> >>
>>> >> What about flink-scala? Shouldn't it be annotated as well?
>>> >>
>>> >> On Fri, Nov 27, 2015 at 4:47 PM, Robert Metzger <rmetz...@apache.org>
>>> >> wrote:
>>> >> > Okay, I'll introduce an annotation for experimental interfaces and
>>> I'll
>>> >> > make everything we have deprecated experimental.
>>> >> >
>>> >> > On Fri, Nov 27, 2015 at 10:40 AM, Aljoscha Krettek <
>>> aljos...@apache.org>
>>> >> > wrote:
>>> >> >
>>> >> >> I still think we also need an annotation to mark public interfaces
>>> as
>>> >> >> experimental. For example for the windowing/triggers I would like
>>> to use
>>> >> >> that.
>>> >> >> > On 25 Nov 2015, at 01:23, Robert Metzger <rmetz...@apache.org>
>>> wrote:
>>> >> >> >
>>> >> >> > Thank you Nick. I'll look into the check_compatiblilty.sh script
>>> to
>>> >> see
>>> >> >> > which tools are used.
>>> >> >> > I think finding breaking API changes immediately is a better
>>> process
>>> >> then
>>> >> >> > reworking the APIs before a release.
>>> >> >> >
>>> >> >> > As you can see from my email response times (2 days since your
>>> email),
>>> >> >> I'm
>>> >> >> > probably too overloaded right now to participate in the Yetus
>>> project
>>> >> ...
>>> >> >> > Sadly.
>>> >> >> >
>>> >> >> >
>>> >> >> > @others: I know its not the most interesting thing to go through
>>> my
>>> >> list
>>> >> >> of
>>> >> >> > stable interfaces, but keep in mind that we have to maintain the
>>> stuff
>>> >> >> for
>>> >> >> > probably quite some time, so it would be good to have more than
>>> one
>>> >> pair
>>> >> >> of
>>> >> >> > eyes looking at it :)
>>> >> >> >
>>> >> >> >
>>> >> >> > On Mon, Nov 23, 2015 at 6:20 PM, Nick Dimiduk <ndimi...@gmail.com
>>> >
>>> >> >> wrote:
>>> >> >> >
>>> >> >> >>>
>>> >> >> >>> Do you know if Hadoop/HBase is also using a maven plugin to
>>> fail a
>>> >> >> build
>>> >> >> >> on
>>> >> >> >>> breaking API changes? I would really like to have such a
>>> >> functionality
>>> >> >> in
>>> >> >> >>> Flink, because we can spot breaking changes very early.
>>> >> >> >>
>>> >> >> >>
>>> >> >> >> I don't think we have maven integration for this as of yet. We
>>> >> release
>>> >> >> >> managers run a script $HBASE/dev-support/check_compatibility.sh
>>> that
>>> >> >> >> generates a source and binary compatibility report. Issues are
>>> then
>>> >> >> >> resolved during the period leading up to the release candidate.
>>> >> >> >>
>>> >> >> >> I think Hadoop is relying on a "QA bot" which reads patches from
>>> JIRA
>>> >> >> and
>>> >> >> >>> then does these
>>> >> >> >>> checks?
>>> >> >> >>>
>>> >> >> >>
>>> >> >> >> The "QA bot" is just a collection of shell scripts used during
>>> "Patch
>>> >> >> >> Available" status when a patch has been attached to JIRA or when
>>> a PR
>>> >> >> has
>>> >> >> >> been submitted through github. The check_compatibility script
>>> could
>>> >> be
>>> >> >> >> included in that automation, I don't see why not. Maybe you'd
>>> like to
>>> >> >> open
>>> >> >> >> a YETUS ticket :)
>>> >> >> >>
>>> >> >> >> I've pushed a branch to my own GitHub account with all classes I
>>> >> would
>>> >> >> make
>>> >> >> >>> public annotated:
>>> >> >> >>>
>>> >> >> >>>
>>> >> >> >>
>>> >> >>
>>> >>
>>> https://github.com/apache/flink/compare/master...rmetzger:interface_stability_revapi?expand=1
>>> >> >> >>> Since this is really hard to read, I (half-automated) generated
>>> the
>>> >> >> >>> following list of annotated classes:
>>> >> >> >>>
>>> >> >> >>>
>>> >> >> >>
>>> >> >>
>>> >>
>>> https://github.com/rmetzger/flink/blob/interface_stability_revapi/annotations.md
>>> >> >> >>>
>>> >> >> >>> Please let me know if you would like to include or exclude
>>> classes
>>> >> from
>>> >> >> >>> that list.
>>> >> >> >>> Also, let me know which methods (in stable classes) you would
>>> mark
>>> >> as
>>> >> >> >>> experimental.
>>> >> >> >>>
>>> >> >> >>>
>>> >> >> >>>
>>> >> >> >>>
>>> >> >> >>> On Wed, Nov 11, 2015 at 10:17 AM, Aljoscha Krettek <
>>> >> >> aljos...@apache.org>
>>> >> >> >>> wrote:
>>> >> >> >>>
>>> >> >> >>>> +1 for some way of declaring public interfaces as experimental.
>>> >> >> >>>>
>>> >> >> >>>>> On 10 Nov 2015, at 22:24, Stephan Ewen <se...@apache.org>
>>> wrote:
>>> >> >> >>>>>
>>> >> >> >>>>> I think we need anyways an annotation "@PublicExperimental".
>>> >> >> >>>>>
>>> >> >> >>>>> We can make this annotation such that it can be added to
>>> methods
>>> >> and
>>> >> >> >>> can
>>> >> >> >>>>> use that to declare
>>> >> >> >>>>> Methods in an otherwise public class (such as DataSet) as
>>> >> >> >> experimental.
>>> >> >> >>>>>
>>> >> >> >>>>> On Tue, Nov 10, 2015 at 10:19 PM, Fabian Hueske <
>>> >> fhue...@gmail.com>
>>> >> >> >>>> wrote:
>>> >> >> >>>>>
>>> >> >> >>>>>> I am not sure if we always should declare complete classes as
>>> >> >> >>>>>> @PublicInterface.
>>> >> >> >>>>>> This does definitely make sense for interfaces and abstract
>>> >> classes
>>> >> >> >>>> such as
>>> >> >> >>>>>> MapFunction or InputFormat but not necessarily for classes
>>> such
>>> >> as
>>> >> >> >>>> DataSet
>>> >> >> >>>>>> that we might want to extend by methods which should not
>>> >> immediately
>>> >> >> >>> be
>>> >> >> >>>>>> considered as stable.
>>> >> >> >>>>>>
>>> >> >> >>>>>>
>>> >> >> >>>>>> 2015-11-10 21:36 GMT+01:00 Vasiliki Kalavri <
>>> >> >> >>> vasilikikala...@gmail.com
>>> >> >> >>>>> :
>>> >> >> >>>>>>
>>> >> >> >>>>>>> Yes, my opinion is that we shouldn't declare the Gelly API
>>> >> frozen
>>> >> >> >>> yet.
>>> >> >> >>>>>>> We can reconsider when we're closer to the 1.0 release, but
>>> if
>>> >> >> >>>> possible,
>>> >> >> >>>>>> I
>>> >> >> >>>>>>> would give it some more time.
>>> >> >> >>>>>>>
>>> >> >> >>>>>>> -V.
>>> >> >> >>>>>>>
>>> >> >> >>>>>>> On 10 November 2015 at 21:06, Stephan Ewen <
>>> se...@apache.org>
>>> >> >> >> wrote:
>>> >> >> >>>>>>>
>>> >> >> >>>>>>>> I think no component should be forced to be stable. It
>>> should
>>> >> be
>>> >> >> >> an
>>> >> >> >>>>>>>> individual decision for each component, and in some cases
>>> even
>>> >> for
>>> >> >> >>>>>>>> individual classes.
>>> >> >> >>>>>>>>
>>> >> >> >>>>>>>> @Vasia If you think Gelly should not be declared
>>> >> interface-frozen,
>>> >> >> >>>> then
>>> >> >> >>>>>>>> this is a good point to raise and this should definitely be
>>> >> >> >>> reflected.
>>> >> >> >>>>>>>> There is no point in declaring certain APIs as frozen when
>>> we
>>> >> are
>>> >> >> >>> not
>>> >> >> >>>>>> yet
>>> >> >> >>>>>>>> confident they have converged.
>>> >> >> >>>>>>>>
>>> >> >> >>>>>>>>
>>> >> >> >>>>>>>>
>>> >> >> >>>>>>>> On Tue, Nov 10, 2015 at 8:39 PM, Vasiliki Kalavri <
>>> >> >> >>>>>>>> vasilikikala...@gmail.com
>>> >> >> >>>>>>>>> wrote:
>>> >> >> >>>>>>>>
>>> >> >> >>>>>>>>> Hi Robert,
>>> >> >> >>>>>>>>>
>>> >> >> >>>>>>>>> thanks for bringing this up!
>>> >> >> >>>>>>>>>
>>> >> >> >>>>>>>>> I generally like the idea, but I wouldn't rush to
>>> annotate the
>>> >> >> >>> Gelly
>>> >> >> >>>>>>>>> classes yet. Gelly hasn't had that many users and I'm
>>> quite
>>> >> sure
>>> >> >> >>>>>> we'll
>>> >> >> >>>>>>>> find
>>> >> >> >>>>>>>>> things to improve as it gets more exposure.
>>> >> >> >>>>>>>>> TBH, I think it's quite unfair to force Gelly (also e.g.
>>> ML,
>>> >> >> >> Table)
>>> >> >> >>>>>> to
>>> >> >> >>>>>>> a
>>> >> >> >>>>>>>>> "1.0" status (from an API stability point of view) since
>>> >> they're
>>> >> >> >>>>>> really
>>> >> >> >>>>>>>>> young compared to the other Flink APIs.
>>> >> >> >>>>>>>>>
>>> >> >> >>>>>>>>> Cheers,
>>> >> >> >>>>>>>>> Vasia.
>>> >> >> >>>>>>>>> On Nov 10, 2015 8:04 PM, "Robert Metzger" <
>>> >> rmetz...@apache.org>
>>> >> >> >>>>>> wrote:
>>> >> >> >>>>>>>>>
>>> >> >> >>>>>>>>>> Hi everyone,
>>> >> >> >>>>>>>>>>
>>> >> >> >>>>>>>>>> I would like to bring this discussion back to your
>>> attention
>>> >> as
>>> >> >> >> we
>>> >> >> >>>>>>> seem
>>> >> >> >>>>>>>>> to
>>> >> >> >>>>>>>>>> approach the 1.0 release of Flink.
>>> >> >> >>>>>>>>>>
>>> >> >> >>>>>>>>>> My suggestion back in January was to annotate all
>>> classes,
>>> >> but I
>>> >> >> >>>>>>> think
>>> >> >> >>>>>>>>>> it'll be more feasible to just annotate public classes.
>>> >> >> >>>>>>>>>> So how about adding an annotation @PublicInterface
>>> >> >> >>>>>>>>>>
>>> >> >> >>>>>>>>>> For @PublicInterface, I would annotate classes such as:
>>> >> DataSet,
>>> >> >> >>>>>>>>>> DataStream, ExecutionEnvironment, InputFormat,
>>> MapFunction,
>>> >> >> >>>>>>> FileSystems
>>> >> >> >>>>>>>>> but
>>> >> >> >>>>>>>>>> also Gelly for example.
>>> >> >> >>>>>>>>>>
>>> >> >> >>>>>>>>>> I would not annotate as public components such as ML,
>>> Storm
>>> >> >> >>>>>>>>> compatibility,
>>> >> >> >>>>>>>>>> internals from runtime, yarn, optimizer.
>>> >> >> >>>>>>>>>>
>>> >> >> >>>>>>>>>>
>>> >> >> >>>>>>>>>> From a tooling perspective, I've looked into different
>>> maven
>>> >> >> >>>>>> plugins
>>> >> >> >>>>>>>> and
>>> >> >> >>>>>>>>>> java libraries and I found
>>> https://github.com/siom79/japicmp
>>> >> to
>>> >> >> >>> be
>>> >> >> >>>>>>> the
>>> >> >> >>>>>>>>>> closest to our needs. I actually opened a pull request
>>> to the
>>> >> >> >>>>>> project
>>> >> >> >>>>>>>> to
>>> >> >> >>>>>>>>>> allow inclusion/exclusion of classes based on
>>> annotations.
>>> >> Lets
>>> >> >> >>>>>> hope
>>> >> >> >>>>>>> it
>>> >> >> >>>>>>>>>> gets merged.
>>> >> >> >>>>>>>>>>
>>> >> >> >>>>>>>>>> Does everybody agree with adding just the
>>> @PublicInterface
>>> >> >> >>>>>>> annotation?
>>> >> >> >>>>>>>>>>
>>> >> >> >>>>>>>>>> Note that I'll add the annotation on a class-level,
>>> making
>>> >> the
>>> >> >> >>>>>> entire
>>> >> >> >>>>>>>>> class
>>> >> >> >>>>>>>>>> either public or private (from a stability point of
>>> view).
>>> >> If we
>>> >> >> >>>>>>> need a
>>> >> >> >>>>>>>>>> more fine-grained annotation, we have to add a second
>>> >> >> >>>>>>> @PrivateInterface
>>> >> >> >>>>>>>>>> annotation which we'll only apply to certain methods.
>>> >> >> >>>>>>>>>>
>>> >> >> >>>>>>>>>> The next step is that I'm going to open a pull request
>>> with
>>> >> all
>>> >> >> >>>>>>> classes
>>> >> >> >>>>>>>>>> annotated that I consider public.
>>> >> >> >>>>>>>>>>
>>> >> >> >>>>>>>>>>
>>> >> >> >>>>>>>>>> On Fri, Jan 30, 2015 at 7:10 PM, Henry Saputra <
>>> >> >> >>>>>>>> henry.sapu...@gmail.com>
>>> >> >> >>>>>>>>>> wrote:
>>> >> >> >>>>>>>>>>
>>> >> >> >>>>>>>>>>> I like the idea. But would love to have different name
>>> for
>>> >> the
>>> >> >> >>>>>>>>>>> "LimitedPrivate" to make it easier to distinguish.
>>> >> >> >>>>>>>>>>> How about "Module" or "Package" ?
>>> >> >> >>>>>>>>>>>
>>> >> >> >>>>>>>>>>> - Henry
>>> >> >> >>>>>>>>>>>
>>> >> >> >>>>>>>>>>> On Wed, Jan 28, 2015 at 1:29 AM, Robert Metzger <
>>> >> >> >>>>>>> rmetz...@apache.org
>>> >> >> >>>>>>>>>
>>> >> >> >>>>>>>>>>> wrote:
>>> >> >> >>>>>>>>>>>> I think in Hadoop they use LimitedPrivate for the
>>> different
>>> >> >> >>>>>>>>> components
>>> >> >> >>>>>>>>>> of
>>> >> >> >>>>>>>>>>>> the project.
>>> >> >> >>>>>>>>>>>> For example LimitedPrivate("yarn").
>>> >> >> >>>>>>>>>>>> Here is a very good documentation on the topic:
>>> >> >> >>>>>>>>>>>>
>>> >> >> >>>>>>>>>>>
>>> >> >> >>>>>>>>>>
>>> >> >> >>>>>>>>>
>>> >> >> >>>>>>>>
>>> >> >> >>>>>>>
>>> >> >> >>>>>>
>>> >> >> >>>>
>>> >> >> >>>
>>> >> >> >>
>>> >> >>
>>> >>
>>> https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/InterfaceClassification.html
>>> >> >> >>>>>>>>>>>>
>>> >> >> >>>>>>>>>>>> On Tue, Jan 27, 2015 at 3:58 PM, Alexander Alexandrov <
>>> >> >> >>>>>>>>>>>> alexander.s.alexand...@gmail.com> wrote:
>>> >> >> >>>>>>>>>>>>
>>> >> >> >>>>>>>>>>>>> I don't get the difference between Private and
>>> >> >> >> LimitedPrivate,
>>> >> >> >>>>>>> but
>>> >> >> >>>>>>>>>>>>> otherwise seems like quite a nice idea.
>>> >> >> >>>>>>>>>>>>>
>>> >> >> >>>>>>>>>>>>> It will be also good if we can agree upon what these
>>> tags
>>> >> >> >>>>>>> actually
>>> >> >> >>>>>>>>>> mean
>>> >> >> >>>>>>>>>>> and
>>> >> >> >>>>>>>>>>>>> add this meaning to the documentation.
>>> >> >> >>>>>>>>>>>>>
>>> >> >> >>>>>>>>>>>>> 2015-01-27 15:46 GMT+01:00 Robert Metzger <
>>> >> >> >>>>>> rmetz...@apache.org
>>> >> >> >>>>>>>> :
>>> >> >> >>>>>>>>>>>>>
>>> >> >> >>>>>>>>>>>>>> Hi,
>>> >> >> >>>>>>>>>>>>>>
>>> >> >> >>>>>>>>>>>>>> Hadoop has annotations for tagging the stability and
>>> >> >> >>>>>> audience
>>> >> >> >>>>>>> of
>>> >> >> >>>>>>>>>>> classes
>>> >> >> >>>>>>>>>>>>>> and methods.
>>> >> >> >>>>>>>>>>>>>>
>>> >> >> >>>>>>>>>>>>>> Through that, you can have @InterfaceAudience.Public,
>>> >> >> >>>>>> Private,
>>> >> >> >>>>>>>>>>>>>> LimitedPrivate
>>> >> >> >>>>>>>>>>>>>> and also @InterfaceStability.Evolving, Unstable, and
>>> >> Stable.
>>> >> >> >>>>>>>>>>>>>>
>>> >> >> >>>>>>>>>>>>>> I guess there are tools which allow to automatically
>>> >> check
>>> >> >> >>>>>> if
>>> >> >> >>>>>>>>>>> interfaces,
>>> >> >> >>>>>>>>>>>>>> which are marked as Stable have been changed between
>>> >> >> >>>>>> releases
>>> >> >> >>>>>>>> (or
>>> >> >> >>>>>>>>> by
>>> >> >> >>>>>>>>>>> pull
>>> >> >> >>>>>>>>>>>>>> requests).
>>> >> >> >>>>>>>>>>>>>>
>>> >> >> >>>>>>>>>>>>>> I think such annotations are crucial if we want to
>>> >> guarantee
>>> >> >> >>>>>>>>>> interface
>>> >> >> >>>>>>>>>>>>>> stability between releases.
>>> >> >> >>>>>>>>>>>>>>
>>> >> >> >>>>>>>>>>>>>> What do you think? Should we add those annotations?
>>> Which
>>> >> >> >>>>>> one
>>> >> >> >>>>>>>>> would
>>> >> >> >>>>>>>>>>> you
>>> >> >> >>>>>>>>>>>>>> like to add?
>>> >> >> >>>>>>>>>>>>>>
>>> >> >> >>>>>>>>>>>>>>
>>> >> >> >>>>>>>>>>>>>> Robert
>>> >> >> >>>>>>>>>>>>>>
>>> >> >> >>>>>>>>>>>>>
>>> >> >> >>>>>>>>>>>
>>> >> >> >>>>>>>>>>
>>> >> >> >>>>>>>>>
>>> >> >> >>>>>>>>
>>> >> >> >>>>>>>
>>> >> >> >>>>>>
>>> >> >> >>>>
>>> >> >> >>>>
>>> >> >> >>>
>>> >> >> >>
>>> >> >>
>>> >> >>
>>> >>
>>>
>>
>>

Reply via email to