Hi Becket, Thanks for your reply with details.
> 2. I agree it would be too verbose to annotate every internal method / > class / interface. Currently we already treat the methods / interfaces / > classes without annotations as effectively @Internal. > Does it make sense to clearly define that APIs without annotation are internal APIs and should be used outside of Flink. And deprecate @Internal? Best regards, Jing On Mon, Sep 11, 2023 at 5:05 AM Becket Qin <becket....@gmail.com> wrote: > Hi Jing, > > Thanks for bringing up the discussion. My two cents: > > 1. All the public methods / classes / interfaces MUST be annotated with one > of the @Experimental / @PublicEvolving / @Public. In practice, all the > methods by default inherit the annotation from the containing class, unless > annotated otherwise. e.g. an @Internal method in a @Public class. > 2. I agree it would be too verbose to annotate every internal method / > class / interface. Currently we already treat the methods / interfaces / > classes without annotations as effectively @Internal. 3. Per our discussion in the other thread, @Deprecated SHOULD coexist with > one of the @Experimental / @PublicEvolving / @Public. In that > case, @Deprecated overrides the other annotation, which means that public > API will not evolve and will be removed according to the deprecation > process. > > 4. The internal methods / classes / interfaces SHOULD NOT be marked as > deprecated. Instead, an immediate refactor should be done to remove the > "deprecated" internal methods / classes / interfaces, and migrate the code > to its successor. Otherwise, technical debts will build up. > > Thanks, > > Jiangjie (Becket) Qin > > > > On Sat, Sep 9, 2023 at 5:29 AM Jing Ge <j...@ververica.com.invalid> wrote: > > > Hi devs, > > > > While I was joining the flink-avro enhancement and cleanup discussion > > driven by Becket[1], I realized that there are some issues with the > current > > Flink API annotation usage in the source code. > > > > As far as I am concerned, Flink wants to control the access/visibility of > > APIs across modules and for downstreams. Since no OSGI is used(it should > > not be used because of its complexity, IMHO), Flink decided to use a very > > lightweight but manual solution: customized annotation like @Internal, > > @Experimental, @PublicEvolving, > > etc. This is a Flink only concept on top of JDK annotation and is > therefore > > orthogonal to @Deprecated or any other annotations offered by JDK. After > > this concept has been used, APIs without one of these annotations are in > > the kind of gray area which means they have no contract in the context of > > this new concept. Without any given metadata they could be considered > > as @Internal or @Experimental, because changes are allowed to be applied > at > > any time. But there is no clear definition and therefore different people > > will understand it differently. > > > > There are two options to improve it, as far as I could figure out: > > > > option 1: All APIs must have one of those annotations. We should put some > > effort into going through all source code and add missing annotations. > > There were discussions[2] and activities going in this direction. > > option 2: the community comes to a new consensus that APIs without > > annotation equals one of @Internal, @Experimental, or @PublicEvolving. I > > personally will choose @Internal, because it is the safest one. And if > > @Internal is chosen as the default one, it could also be deprecated, > > because no annotation equals @Internal. If it makes sense, I can create a > > FLIP and help the community reach this consensus. > > > > Both options have their own pros and cons. I would choose option 2, since > > we will not end up with a lot of APIs marked as @Internal. > > > > Looking forward to hearing your thoughts. > > > > Best regards > > Jing > > > > > > [1] https://lists.apache.org/thread/7zsv528swbjxo5zk0bxq33hrkvd77d6f > > [2] https://lists.apache.org/thread/zl2rmodsjsdb49tt4hn6wv3gdwo0m31o > > >