一个排序引发的BUG (4)

Filter4->Filter3->Filter2->Filter1->

然后,Filter5 进来后先和 Filter1 比,发现其 Order 为 0 比 Filter1 的 -1 大,于是比较结束,得到这样的Filter 链:

Filter4->Filter3->Filter2->Filter1->Filter5->

整个过程中,Filter5 与 Filter2 完全没有发生任何比较的操作,也就更不涉及到 Filter5 里面的 before 标签了:

但是当我把 list 的添加顺序修改一下:

一个排序引发的BUG

咦,就正确了,你就说神不神奇?

神奇吧?

为啥呢?

去看看 Timsort 的原理吧。

一个排序引发的BUG

追根溯源

其实写到这里的我产生了一个疑问:

是谁,什么时候,引入了 after/before 机制?

因为这个机制我个人觉得出发点是挺好的,多一个配置的地方,把选择权留给用户。

但是在实际的使用中,却容易出现比较混乱的情况。

于是我看了一下提交记录:

一个排序引发的BUG

这个注解最早是梁飞(就是 Dubbo 项目要的开创者之一)写出来的,而设计之初没有 before 和 after,但是有一个 match 和 mismatch。

然后在写出这个注解一天之后的凌晨 1 点 54 分,提交了一个方法级别的匹配:

一个排序引发的BUG

这三个方法使用起来甚至比 before/after 更加复杂了。

于是一觉睡醒之后的 12:34 分,梁飞又删除了这三个配置:

一个排序引发的BUG

两个月之后的 2012 年 5 月 8 日,加入了 after 和 before 配置:

一个排序引发的BUG

然后就一直留在 Dubbo 源码里面,直到 6 年后的 2018 年 8 月 7 日,打上了不建议使用的注解:

一个排序引发的BUG

并提到了这个 issue:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zypsgd.html