文档章节

presto版本号从哪里来

o
 old_cat
发布于 2016/04/21 15:08
字数 690
阅读 386
收藏 0

起因:

     从github上下载presto的0.143版本,编译后搭建单节点环境,运行后却发现版本号并非是0.143,而是0.107-jd-dirty。

presto> select * from system.runtime.nodes;
 node_id  |         http_uri          |  node_version  | coordinator | state  
----------+---------------------------+----------------+-------------+--------
 worker04 |  | 0.107-jd-dirty | true        | active 
(1 row)
Query 20160419_112540_00000_i7it8, FINISHED, 1 node
Splits: 2 total, 2 done (100.00%)
0:01 [1 rows, 54B] [0 rows/s, 52B/s]

分析:

     找到nodes表对应的类com.facebook.presto.connector.system.NodeSystemTable,倒推node_version的生成机制。最终

在com.facebook.presto.server.ServerMainModule#setup中找到的version的实现。

     // Determine the NodeVersion
        String prestoVersion = serverConfig.getPrestoVersion();
        if (prestoVersion == null) {
            prestoVersion = getClass().getPackage().getImplementationVersion();
        }
        checkState(prestoVersion != null, "presto.version must be provided when it cannot be automatically determined");

      先读取serverConfig中的版本号,如果没有获取到,则从jar包中的MANIFEST.MF中读取Implementation-Version字段。

     查看getPrestoVersion的代码

    public String getPrestoVersion()
    {
        return prestoVersion;
    }
    @Config("presto.version")
    public ServerConfig setPrestoVersion(String prestoVersion)
    {
        this.prestoVersion = prestoVersion;
        return this;
    }

     发现可通过etc/config.properties文件配置presto.version字段,从而实现版本号的配置,只有该字段未配置时,才从jar中读取。配置后,验证通过。

    问题还没解决,如果未配置presto.version,包中的版本号如何生成。

    解压缩presto-main-0.143-SNAPSHOT.jar,打开MANIFEST.MF,发现了如下内容:

    Implementation-Version: 0.107-jd-dirty

    回想起0.143版本在编译时,是从0.107-jd目录下拷贝的.git目录,查看该目录下的文件,确实有0.107-jd。移除0.143编译路径下的.git目录,编译报错:

[ERROR] Failed to execute goal pl.project13.maven:git-commit-id-plugin:2.1.13:revision (default) on project presto-spi: .git directory could not be found! Please specify a valid [dotGitDirectory] in your pom.xml -> [Help 1]
   根据pl.project13.maven:git-commit-id-plugin查看编译输出,可以判断是git-commit-id-plugin从.git目录读取的信息生的版本号。

 89108 [DEBUG] Configuring mojo pl.project13.maven:git-commit-id-plugin:2.1.13:revision from plugin realm ClassRealm[plugin>pl.project13.maven:git-commit-id-plugin:2.1.13, parent: sun.misc.Launcher$AppC       lassLoader@70dea4e]
 89109 [DEBUG] Configuring mojo 'pl.project13.maven:git-commit-id-plugin:2.1.13:revision' with basic configurator -->
 89110 [DEBUG]   (s) abbrevLength = 7
 89111 [DEBUG]   (s) dateFormat = yyyy-MM-dd'T'HH:mm:ssZZ
 89112 [DEBUG]   (s) dotGitDirectory = /home/presto-master/.git
 89113 [DEBUG]   (f) failOnNoGitDirectory = true
 89114 [DEBUG]   (f) failOnUnableToExtractRepoInfo = true
 89115 [DEBUG]   (s) format = properties
 89116 [DEBUG]   (f) generateGitPropertiesFile = false
 89117 [DEBUG]   (f) generateGitPropertiesFilename = /home/presto-master/target/classes/git.properties
 89118 [DEBUG]   (s) tags = true
 89119 [DEBUG]   (s) gitDescribe = GitDescribeConfig{skip=false, always=true, dirty='-dirty', match='*', abbrev=7, tags=true, forceLongFormat=false}
 89120 [DEBUG]   (f) injectAllReactorProjects = false
 

   搜索presto源码目录下的pom.xml,未发现git-commit-id-plugin,兜兜转转,根下pom.xml有个parent很可疑。

    <parent>
        <groupId>io.airlift</groupId>
        <artifactId>airbase</artifactId>
        <version>49</version>
    </parent>

   果断上github上搜索airbase,果然找到https://github.com/airlift/airbase,在其中的pom.xml找到实现。

                    <configuration>
                        <!-- do not build an empty jar if the project is
                             e.g. a pom project -->
                        <skipIfEmpty>true</skipIfEmpty>
                        <archive>
                            <manifest>
                                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                                <addClasspath>false</addClasspath>
                            </manifest>
                            <manifestEntries>
                                <!-- This is actually the time when the build was done -->
                                <Build-Time>${git.build.time}</Build-Time>
                                <Git-Commit-Id>${git.commit.id}</Git-Commit-Id>
                                <Implementation-Version>${git.commit.id.describe}</Implementation-Version>
                            </manifestEntries>
                        </archive>
                    </configuration>
                <plugin>
                    <groupId>pl.project13.maven</groupId>
                    <artifactId>git-commit-id-plugin</artifactId>
                    <version>2.1.13</version>
                    <configuration>
                        <dateFormat>yyyy-MM-dd'T'HH:mm:ssZZ</dateFormat>
                        <gitDescribe>
                            <tags>true</tags>
                        </gitDescribe>
                    </configuration>
                </plugin>

     齐活了,git-commit-id插件生成implemetation-version,后续再看看git-commit-id读的.git下哪个文件生成的描述。

© 著作权归作者所有

下一篇: saiku编译
o
粉丝 1
博文 3
码字总数 1407
作品 0
广州
私信 提问
用JS识别各版本浏览器

写着写着却发现很多坑爹的地方,比如IE10-的版本是依循常规支持attachEvent,但到了IE11,却只支持addEventListener而不再支持attachEvent。光是这一点就可以判断IE是个大坑,IE11的存在可能...

effto
2016/09/04
24
0
关于浏览器内核你不得不了解的事

接下来主要介绍一些常见的浏览器内核和JavaScript引擎,部分内容来自于我在网上找到的资料,还有一些是我自己的理解,不保证完全正确,但是大致应该是没错的。如果有误,请指正…… 一、浏览...

linux小陶
2016/12/03
9
0
各种浏览器UserAgent一览表(桌面+移动)

桌面 ============================================ IE 而IE各个版本典型的userAgent如下: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) Mozilla/4.0 (compatible; MSIE 7.0; Wind......

Sub
2014/02/26
39.9K
1
科普:关于浏览器内核的一些小知识

浏览器是我们每天几乎都必须使用的软件产品,可是对于自己每天都接触的浏览器,很多同学其实对其一无所知。今天就跟大家说说关于浏览器内核的一些事儿吧,好让你了解多一点稍微内在的东西。 ...

平Fan_d世界
2011/12/05
394
2
gradle的版本总是被覆盖

依赖声明为"org.hibernate:hibernate-ehcache:5.1.12.Final" 但是查看依赖版本号变成了 5.0.12.Final org.hibernate:hibernate-ehcache:5.1.12.Final -> 5.0.12.Final 用 dependencyManageme......

湖水没了
2018/02/10
411
2

没有更多内容

加载失败,请刷新页面

加载更多

如何在Linux中复制文档

在办公室里复印文档过去需要专门的员工与机器。如今,复制是电脑用户无需多加思考的任务。在电脑里复制数据是如此微不足道的事,以致于你还没有意识到复制就发生了,例如当拖动文档到外部硬盘...

老孟的Linux私房菜
今天
29
0
SpringBoot 集成MongoDB

一、MongoDB 简介 MongoDB 如今是最流行的 NoSQL 数据库,被广泛应用于各行各业中,很多创业公司数据库选型就直接使用了 MongoDB,但对于大部分公司,使用 MongoDB 的场景是做大规模数据查询...

zw965
今天
33
0
使用 Envoy 和 AdGuard Home 阻挡烦人的广告

> 原文链接:使用 Envoy 和 AdGuard Home 阻挡烦人的广告 通常我们使用网络时,宽带运营商会为我们分配一个 DNS 服务器。这个 DNS 通常是最快的,距离最近的服务器,但会有很多问题,比如: ...

米开朗基杨
今天
38
0
springboot之全局处理异常封装

springboot之全局处理异常封装 简介 在项目中经常出现系统异常的情况,比如NullPointerException等等。如果默认未处理的情况下,springboot会响应默认的错误提示,这样对用户体验不是友好,系...

Purgeyao
今天
43
0
cookie

cookie: n. 饼干;小甜点 为什么会引入Cookie(在客户端保持http状态) 因为http协议是一种无状态协议,web服务器本身不能识别出哪些请求是同一个服务器发送的,浏览器的每一次请求都是独立...

五公里
今天
44
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部