在上一篇博客成功在Windows节点启动了PrestoServe之后,这篇博客流量PrestoServe做了些什么事情。首先粗略看一下PrestoServe的方法,主要的几个函数就是我在图中标出来的。
显然main函数作为入口只做了一件事情,就是创建PrestoServe对象并执行它的run方法。
注意PrestoServe实现了Runnable接口,这个run方法是实现了Runnable的run方法,至于为什么需要这样而不是直接调用?值得稍作思考。
接着再来详细看看构造函数和run方法分别做了什么吧~
Constructor
- 无参的构造函数:只是创建了SqlParserOptions交给有参的构造函数
- 有参的构造函数:只是做了非空判断再复制给sqlParserOptions
为了看看这个SqlParserOptions,我们可以加上断点
它有两个属性
- 一个
size=0
的allowedIdentifierSymbols - 值为
true
的enhancedErrorHandlerEnabled
进入requireNonNull方法,很显然判空再输出异常信息的操作比较多,将这个过程封装成了函数。
run
接下来就到run方法了,PrestoServe做的事情主要就是在这里完成的。图中框出来的三部分,分别代表三件准备事情:
- 验证jvm依赖和系统时间是否合理
- 准备日志类,用于输出日志
- 新建了很多模块,这些模块分别执行不同的功能
在执行完这些后,注意线程的变化,多出了几个角色。
接着的操作就更加多了,大概可以分为这么几步: - 初始化Bootstrap并获得Injector
- 日志输出工作目录和配置目录
- 加载插件、数据源以及各种配置信息
- 启动Announcer和ServerInfoResource
最后日志输出SERVER STARTED
表示成功启动,PrestoServe就完成了它的使命。由于本人水平有限,暂时无法深入介绍每个模块对应的功能,欢迎一起讨论~