At Thu, 15 Dec 2016 15:33:30 +0900 (JST), FUJITA Tomonori wrote: > > On Thu, 15 Dec 2016 14:31:25 +0900 > IWAMOTO Toshihiro <iwam...@valinux.co.jp> wrote: > > > At Wed, 14 Dec 2016 16:26:48 +0900, > > Iwase Yusuke wrote: > >> > >> Hi, > >> > >> On 2016年12月14日 15:28, FUJITA Tomonori wrote: > >> > On Mon, 12 Dec 2016 12:57:02 -0500 > >> > "Victor J. Orlikowski" <v...@duke.edu> wrote: > >> > > >> >> On Mon, Dec 12, 2016, at 11:21 AM, IWAMOTO Toshihiro wrote: > >> >>> For maintaining API compatibility, having one or two release cycles of > >> >>> deprecation period, which raises warning messages if deprecated APIs > >> >>> are used, will help users. OTOH, deprecation cycles slow down > >> >>> depelopment and I am not aware of which policy ryu should take. > >> >>> > >> >> > >> >> Agreed, given that I have run afoul of this before. > >> >> > >> >> I think Fujita-San should give some guidance here, but, in my > >> >> opinion, APIs that are deprecated should probably be maintained for > >> >> *up to* 2-3 release cycles, based on degree of user impact. > >> > > >> > Thanks for the comments, guys. > >> > > >> > Seems that the project reached the stage where the developers can't > >> > break the APIs for fun. ;) > >> > > >> > As you guys suggested, having deprecation period sounds > >> > reasonable. Let's experiment 3 release cycles of deprecation period. > >> > I guess that we could have some exceptions like deleting an API that > >> > was added by mistake. Let's see how this would work. > >> > >> Just an idea... > >> for users warning, how about implementing "@deprecated" decorator > >> as following? > >> > >> File: ryu/utils.py > >> > >> def deprecated(func): > >> """ > >> Decorator for marking function as deprecated. > >> > >> The decorated function should be removed in 2-3 release cycles. > >> """ > >> > >> @functools.wraps(func) > >> def wrapper(*args, **kwargs): > >> LOG.warning("Called deprecated function: %s\n" > >> "This function will be remove in 2-3 release cycles.", > >> func.__name__) > >> return func(*args, **kwargs) > >> > >> return wrapper > >> > >> > >> Usage: > >> >>> from ryu.utils import deprecated > >> >>> @deprecated > >> ... def func(a, b): > >> ... print(a+b) > >> ... > >> >>> func(1, 2) > >> 3 > >> Called deprecated function: func > >> This function will be remove in 2-3 release cycles. > > > > This should be ok if you are actually deprecating a function. > > > > Or, OpenStack has some decorator for semantics changes within a > > function. > > > > http://git.openstack.org/cgit/openstack/debtcollector/tree/debtcollector/updating.py > > > > Another option: for example, in this case, you could have kept the > > neighbor_add method and added neighbor_add_v2, but that's ugly. > > > > Something similar to the above listed would probably do, but it seems > > we need to devise deprecation method/procedure when a such problem > > arises in future. > > Just let me make sure that I don't think that adding a new argument > like this time needs a new function. It could have kept the > compatibility; the old code works as before.
With hindsight, enable_ipv6 could have defaulted to the previous behavior if unset, without these deprecation warning things. -- IWAMOTO Toshihiro ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Ryu-devel mailing list Ryu-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ryu-devel