Windows下Presto的Debug分析(二)-PrestoServer启动流程

在上一篇博客成功在Windows节点启动了PrestoServe之后,这篇博客流量PrestoServe做了些什么事情。首先粗略看一下PrestoServe的方法,主要的几个函数就是我在图中标出来的。
在这里插入图片描述
显然main函数作为入口只做了一件事情,就是创建PrestoServe对象并执行它的run方法。

注意PrestoServe实现了Runnable接口,这个run方法是实现了Runnable的run方法,至于为什么需要这样而不是直接调用?值得稍作思考。

接着再来详细看看构造函数和run方法分别做了什么吧~

Constructor

  • 无参的构造函数:只是创建了SqlParserOptions交给有参的构造函数
  • 有参的构造函数:只是做了非空判断再复制给sqlParserOptions

为了看看这个SqlParserOptions,我们可以加上断点
在这里插入图片描述
它有两个属性

  1. 一个size=0的allowedIdentifierSymbols
  2. 值为true的enhancedErrorHandlerEnabled
    在这里插入图片描述
    进入requireNonNull方法,很显然判空再输出异常信息的操作比较多,将这个过程封装成了函数。
    在这里插入图片描述

run

接下来就到run方法了,PrestoServe做的事情主要就是在这里完成的。图中框出来的三部分,分别代表三件准备事情:

  • 验证jvm依赖和系统时间是否合理
  • 准备日志类,用于输出日志
  • 新建了很多模块,这些模块分别执行不同的功能
    在这里插入图片描述
    在执行完这些后,注意线程的变化,多出了几个角色。
    在这里插入图片描述
    接着的操作就更加多了,大概可以分为这么几步:
  • 初始化Bootstrap并获得Injector
  • 日志输出工作目录和配置目录
  • 加载插件、数据源以及各种配置信息
  • 启动Announcer和ServerInfoResource
    在这里插入图片描述
    最后日志输出SERVER STARTED表示成功启动,PrestoServe就完成了它的使命。由于本人水平有限,暂时无法深入介绍每个模块对应的功能,欢迎一起讨论~

猜你喜欢

转载自blog.csdn.net/weixin_44112790/article/details/111074184