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