On Fri, Aug 28, 2015 at 05:14PM, Vladimir Ozerov wrote:
> Dima,
> 
> I'm not suggesting doing this, they are already not stable. For example,
> take a look at IgniteCacheObjectProcessor. This is a component which can be
> injected through plugins, thus it is "semi-public". However, it is under
> heavy changes and if some unlucky guy is to implement a plugin using this
> processor, he will face compilation errors with each new Ignite release.
> 
> My suggestion is to define policies for things like that. One of possible
> solutions - is to annotate APIs so that developers are aware of potential
> problems.
> 
> One more example from Hadoop:
> 1) org.apache.hadoop.fs.FileSystem: @Public, @Stable
> 2) org.apache.hadoop.fs.AbstractFileSystem: @Public, *@Evolving*

I think having those annotations aren't making developers more aware about
potential compatibility problems, nor enforce any kind of policy mechanism
around API compatibility. There's a plenty of examples in Hadoop (YARN in 2.4
and some other stuff before it) where incompatible changes were introduced in
minor releases and had to be quickly corrected in a consequent patch release.

What these annotations might help with is to quickly settle the argument that
certain APIs shouldn't have been used in the first place, because they were
@Evolving or otherwise. It's more like a UML diagram: if something goes wrong
ppl have a common ground to find our who has screwed up and why; but it
doesn't prevent the screw-up itself.
 
Perhaps relying on public APIs as the only fully approved for 3rd party
software developers is the only recourse in this case.

Cos

> Vladimir.
> 
> On Fri, Aug 28, 2015 at 4:20 PM, Dmitriy Setrakyan <dsetrak...@apache.org>
> wrote:
> 
> > Vladimir,
> >
> > Are you suggesting making semi-private APIs not stable? In that case, what
> > is the recourse for the current users?
> >
> > D.
> >
> > On Fri, Aug 28, 2015 at 2:55 PM, Vladimir Ozerov <voze...@gridgain.com>
> > wrote:
> >
> > > Igniters,
> > >
> > > We have several types of APIs:
> > > 1) Public - intended for Ignite users. E.g.: IgniteCache.
> > > 2) Private - used only by Ignite developers. E.g.: almost everything
> > inside
> > > "org.apache.ignite.internal".
> > > 3) Semi-private - is not expected to be used by users, but can be used by
> > > 3rd-party developers. E.g.: PluginProvider.
> > >
> > > I'd like to propose defining "stability" for p.3 type of APIs. That is.
> > if
> > > someone develops Ignite extensions, he might need to know what is the
> > > probability of breaking change of that API. Nice example of such approach
> > > is Hadoop APIs.
> > >
> > > The reason why I started thinking about it is "platforms" migration from
> > > GridGain to Ignite. Currently our platforms API are far from ideal from
> > > external developer's point of view. This was not a problem in GridGain
> > > since the code was private, but it can become a problem in open-sourced
> > > Ignite.
> > > And instead of spending time on making APIs nice and clean I'd like to
> > make
> > > platforms work first. During this transition time it would be nice to
> > mark
> > > relevant APIs as "unstable" so that potential 3rd-party devs will be
> > aware
> > > of a risk when using them.
> > >
> > > Thoughts?
> > >
> > > Vladimir.
> > >
> >

Reply via email to