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 > >> >> >>>>>>>>>>>>>> > >> >> >>>>>>>>>>>>> > >> >> >>>>>>>>>>> > >> >> >>>>>>>>>> > >> >> >>>>>>>>> > >> >> >>>>>>>> > >> >> >>>>>>> > >> >> >>>>>> > >> >> >>>> > >> >> >>>> > >> >> >>> > >> >> >> > >> >> > >> >> > >> >