我给Apache顶级项目贡献了点源码。 (上)

简介: 我给Apache顶级项目贡献了点源码。 (上)

image.png


这篇文章其实并没有什么技术性的分享,从我的角度而言,更多是记录和思考。

把我对于源码和之前写的部分文章反哺给我的一些东西,带来的一点点思考分享给大家。


一行源码


我很长时间没打开我的 Outlook 邮箱了。

前两天打开的时候发现我之前给 Dubbo 提交的 pr 居然已经被合并到 master 了:


image.png

这是第一次,我提交的 pr 被合并了。

这个 pr 是修复 LFU 缓存策略在 Dubbo 中即使配置了,也不起作用的 bug。

于是我也算是为开源项目贡献过源码的人了。

什么你问我贡献了多少代码?

一行,是的,就一行!

image.png

而且,说起来,这次提交真的是没有什么技术含量的事情。因为这是一个必现的 bug,只是很少有人用到这个功能而已。

你知道的,当一个 bug 能稳定复现的时候,其实它已经就不算是一个 bug 了。

但是我想聊聊这次提交背后的一些东西。

image.png


发现与解决


从宿命论的角度来说,当我写下面这篇文章的第一个字的时候,这个 bug 就注定是等着我去发现并修复了:

其实吧,LRU也就那么回事。

而这篇文章我敲下第一个字的时间是 2020 年 12 月的下旬,这是我 2020 年的最后一篇技术原创文章。

当我写 LRU 的时候,我就知道 LFU 肯定也是需要专门写一篇的。

于是 2021 年的第一篇技术原创文章,我就选题了 LFU。

产生了这篇文章:

哎,这让人抠脑壳的 LFU。

写这篇文章的时候,我想起之前看 Dubbo 的版本,好像是提到了一下 LFU。

于是我翻到了 2.7.7 版本的发布内容:


image.png

果然是支持了 LFU 缓存策略,于是翻出了提交的代码记录:


image.png

虽然他的实现逻辑没有问题,Test 类也跑过去了。

但是毫不夸张的说,我看了一眼这个提交记录,就发现了这里势必是有问题的。


image.png


他仅仅是把 LFU 缓存策略集合到了 Dubbo 代码中,但是却没有给使用者提供使用的入口。

因为这里是基于 SPI 实现的,他没有在对应的配置文件中加入配置。

这个问题非常容易验证,我们可以看一下。

其源码的位置是:org.apache.dubbo.common.utils.LFUCache


image.png

image.png

image.png

No such extension org.apache.dubbo.cache.CacheFactory by name lfu

没有 lfu 这个策略。

这不是玩我吗?

再看一下具体的原因:


image.png


org.apache.dubbo.common.extension.ExtensionLoader#getExtensionClasses 处只获取到了 4 个缓存策略,并没有我们想要的 LFU。

所以,在这里抛出了异常:


image.png


为什么没有找到我们想要的 LFU 呢?

那就得看你熟不熟悉 SPI 了。

在 SPI 文件中,确实没有 LFU 的配置:


image.png


经过上面的分析,其实你也发现了,这个并不是一个有什么技术含量的提交。

更多的是运气成分。

只是由于对于 Dubbo 框架有些许的了解,所以对于这个地方,我发现问题、定位问题、解决问题的速度非常的快。

这是运气带不给我的东西。

这需要日复一日的潜入到框架中去,去感受它的脉络,梳理它的结构,学习它的思想。

这是需要时间去沉淀和学习的东西。

注意,我说的是“潜入”,而非是流于表面的。

什么是流于表面的呢?

比如,如果你之前没有用过 Dubbo 框架,但你又想去了解,学习它。

于是你看到了我的这篇或者其他的和 Dubbo 相关的公众号文章,企图从这些文章中入手。

记住鲁迅先生的话:


image.png


亦或者是你在搜索框里面,输入 “Dubbo”,然后漫无目的的看了起来。

哪怕你买了一本 Dubbo 相关的书或者看了 Dubbo 相关的系列视频,进行系统的学习。

我觉得,只要没有自己亲手去做,都属于流于表面。

而自己动手的第一步,就是搭建 Demo,从 Demo 入手。

到后面高阶一点的就是你了解到了这个框架的前世今生,能在几个大版本之间进行横向对比,知道为什么升级、怎么升级、升级之后是怎么样的。

再之后,能细致到某一个大的模块的演变是怎样的,历史上出现过哪些 Bug,是怎么去修复的。在那个版本之后进行了修复,是稳定的。

再举个例子吧。



目录
相关文章
|
4月前
|
关系型数据库 MySQL 应用服务中间件
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
这篇文章介绍了如何在Windows 7系统上搭建PHP、MySQL和Apache环境,并部署ECShop项目,包括安装配置步骤、解决常见问题以及使用XAMPP集成环境的替代方案。
57 1
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
|
3月前
|
Apache
多应用模式下,忽略项目的入口文件,重写Apache规则
本文介绍了在多应用模式下,如何通过编辑Apache的.htaccess文件来重写URL规则,从而实现忽略项目入口文件index.php进行访问的方法。
|
4月前
|
Java 应用服务中间件 Apache
使用IDEA修改Web项目访问路径,以及解决Apache Tomcat控制台中文乱码问题
本文介绍了在IntelliJ IDEA中修改Web项目访问路径的步骤,包括修改项目、模块、Artifacts的配置,编辑Tomcat服务器设置,以及解决Apache Tomcat控制台中文乱码问题的方法。
239 0
使用IDEA修改Web项目访问路径,以及解决Apache Tomcat控制台中文乱码问题
|
4月前
|
关系型数据库 Linux 网络安全
"Linux系统实战:从零开始部署Apache+PHP Web项目,轻松搭建您的在线应用"
【8月更文挑战第9天】Linux作为服务器操作系统,凭借其稳定性和安全性成为部署Web项目的优选平台。本文以Apache Web服务器和PHP项目为例,介绍部署流程。首先,通过包管理器安装Apache与PHP;接着创建项目目录,并上传项目文件至该目录;根据需要配置Apache虚拟主机;最后重启Apache服务并测试项目。确保防火墙允许HTTP流量,正确配置数据库连接,并定期更新系统以维持安全。随着项目复杂度提升,进一步学习高级配置将变得必要。
357 0
|
7月前
|
存储 分布式计算 Apache
官宣|Apache Paimon 毕业成为顶级项目,数据湖步入实时新篇章!
Apache Paimon 在构建实时数据湖与流批处理技术领域取得了重大突破,数据湖步入实时新篇章!
3140 6
官宣|Apache Paimon 毕业成为顶级项目,数据湖步入实时新篇章!
|
7月前
|
消息中间件 API Apache
官宣|阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会
本文整理自阿里云开源大数据平台徐榜江 (雪尽),关于阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会。
2094 2
官宣|阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会
|
7月前
|
Java API Apache
【Apache ShenYu源码】看看贡献者如何实现支持提醒通知设计
在阅读中,还发现了有个html文件忘记加了开源协议,我们提下PR修复下,又收获了一次开源贡献!!PR提交戳这。
【Apache ShenYu源码】看看贡献者如何实现支持提醒通知设计
|
7月前
|
存储 缓存 负载均衡
【Apache ShenYu源码】如何实现负载均衡模块设计
整个模块为ShenYu提供了什么功能。我们可以看下上文我们提到的工厂对象。/***/核心方法很清晰,我们传入Upsteam列表,通过这个模块的负载均衡算法,负载均衡地返回其中一个对象。这也就是这个模块提供的功能。
|
7月前
|
SQL 数据可视化 大数据
【开源项目推荐】Apache Superset——最优秀的开源数据可视化与数据探索平台
【开源项目推荐】Apache Superset——最优秀的开源数据可视化与数据探索平台
426 33
|
7月前
|
Java
apache-incubator-streampark源码编译本地运行(七)
apache-incubator-streampark源码编译本地运行(七)
114 1

推荐镜像

更多