Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update the version of GraalVM CE used by ShardingSphere Proxy Native to 23.0.1 #27487

Merged
merged 2 commits into from
Aug 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/nightly-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ jobs:
build-proxy-native-image:
if: github.repository == 'apache/shardingsphere'
name: Build GraalVM Native Image
timeout-minutes: 90
timeout-minutes: 60
permissions:
contents: read
packages: write
Expand All @@ -119,8 +119,8 @@ jobs:
ref: ${{ inputs.commit-id }}
- uses: graalvm/setup-graalvm@v1
with:
version: '22.3.1'
java-version: '17'
java-version: '17.0.8'
distribution: 'graalvm-community'
components: 'espresso,native-image'
github-token: ${{ secrets.GITHUB_TOKEN }}
cache: 'maven'
Expand Down
7 changes: 0 additions & 7 deletions distribution/proxy-native/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,6 @@ MAINTAINER ShardingSphere "dev@shardingsphere.apache.org"

ARG NATIVE_IMAGE_NAME
ENV LOCAL_PATH /opt/shardingsphere-proxy-native
ENV JAVA_HOME "/opt/graalvm-ce-java17-22.3.1"
ENV PATH "$JAVA_HOME/bin:$PATH"

RUN microdnf install gzip -y && \
bash <(curl -sL https://get.graalvm.org/jdk) --to "/opt" -c espresso graalvm-ce-java17-22.3.1 && \
$JAVA_HOME/bin/gu remove native-image && \
microdnf clean all

COPY --from=prepare ${LOCAL_PATH} ${LOCAL_PATH}
ENTRYPOINT ${LOCAL_PATH}/${NATIVE_IMAGE_NAME} 3307 ${LOCAL_PATH}/conf "0.0.0.0" false
3 changes: 1 addition & 2 deletions distribution/proxy-native/access-filter.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@
{"excludeClasses": "org.mariadb.jdbc.**"},
{"excludeClasses": "com.mysql.jdbc.**"},
{"excludeClasses": "org.apache.commons.dbcp2.**"},
{"excludeClasses": "org.apache.shardingsphere.test.fixture.jdbc.**"},
{"excludeClasses": "org.apache.shardingsphere.data.pipeline.core.sqlbuilder.H2PipelineSQLBuilder"}
{"excludeClasses": "org.apache.shardingsphere.test.fixture.jdbc.**"}
],
"regexRules": [
{"excludeClasses": ".*Fixture*.*"}
Expand Down
6 changes: 0 additions & 6 deletions distribution/proxy-native/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@
<profile>
<id>release.native</id>
<properties>
<truffle-api.version>22.3.1</truffle-api.version>
<jacoco.skip>true</jacoco.skip>
<maven.javadoc.skip>true</maven.javadoc.skip>
<checkstyle.skip>true</checkstyle.skip>
Expand All @@ -85,7 +84,6 @@
<configuration>
<source>17</source>
<target>17</target>
<compilerArgument>--enable-preview</compilerArgument>
</configuration>
</plugin>
<plugin>
Expand All @@ -97,12 +95,8 @@
<fallback>false</fallback>
<verbose>true</verbose>
<buildArgs>
<arg>--language:java</arg>
<arg>--report-unsupported-elements-at-runtime</arg>
</buildArgs>
<jvmArgs>
<arg>--enable-preview</arg>
</jvmArgs>
<metadataRepository>
<enabled>true</enabled>
</metadataRepository>
Expand Down
9 changes: 0 additions & 9 deletions distribution/proxy-native/src/main/release-docs/LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -360,12 +360,3 @@ The text of each license is also included at licenses/LICENSE-[project].txt.
jul-to-slf4j 1.7.36: https://www.slf4j.org, MIT
slf4j-api 1.7.36: https://www.slf4j.org, MIT
jnanoid 2.0.0: /~https://github.com/aventrix/jnanoid, MIT

========================================================================
UPL licenses
========================================================================

The following components are provided under the UPL License. See project link for details.
The text of each license is also included at licenses/LICENSE-[project].txt.

truffle-api 22.3.1: http://www.graalvm.org/, UPL

This file was deleted.

10 changes: 0 additions & 10 deletions distribution/proxy/src/main/release-docs/LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -372,13 +372,3 @@ The text of each license is also included at licenses/LICENSE-[project].txt.
jul-to-slf4j 1.7.36: https://www.slf4j.org, MIT
slf4j-api 1.7.36: https://www.slf4j.org, MIT
jnanoid 2.0.0: /~https://github.com/aventrix/jnanoid, MIT

========================================================================
UPL licenses
========================================================================

The following components are provided under the UPL License. See project link for details.
The text of each license is also included at licenses/LICENSE-[project].txt.

graal-sdk 21.2.0: /~https://github.com/oracle/graal/tree/master/sdk, UPL 1.0
truffle-api 21.2.0: /~https://github.com/oracle/graal/tree/master/truffle, UPL 1.0

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,12 @@ weight = 2

## 背景信息

本节主要介绍如何通过 `GraalVM` 的 `native-image` 组件构建 ShardingSphere-Proxy 的 `Native Image` 和对应的 `Docker Image`
本节主要介绍如何通过 `GraalVM` 的 `native-image` 组件构建 ShardingSphere-Proxy 的 `Native Image` 和对应的 `Docker Image`。

## 注意事项

- ShardingSphere Proxy 尚未准备好与 GraalVM Native Image 集成。
其在 /~https://github.com/apache/shardingsphere/pkgs/container/shardingsphere-proxy-native 存在每夜构建。
Proxy 的 Native Image 产物在 /~https://github.com/apache/shardingsphere/pkgs/container/shardingsphere-proxy-native 存在每夜构建。
假设存在包含`server.yaml` 的 `conf` 文件夹为 `./custom/conf`,你可通过如下的 `docker-compose.yml` 文件进行测试。

```yaml
Expand All @@ -30,37 +29,34 @@ services:
应当在 /~https://github.com/oracle/graalvm-reachability-metadata 打开新的 issue ,
并提交包含 ShardingSphere 自身或依赖的第三方库缺失的 GraalVM Reachability Metadata 的 PR。

- ShardingSphere 的 master 分支尚未准备好处理 Native Image 中的单元测试,
需要等待 Junit 5 Platform 的集成,你总是需要在构建 GraalVM Native Image 的过程中,
- ShardingSphere 的 master 分支尚未准备好处理 Native Image 中的单元测试 , 你总是需要在构建 GraalVM Native Image 的过程中,
加上特定于 `GraalVM Native Build Tools` 的 `-DskipNativeTests` 或 `-DskipTests` 参数跳过 Native Image 中的单元测试。

- 如下 3 个算法类由于涉及到 GraalVM Truffle Espresso 不方便在 host JVM 和 guest JVM 之间交互的 `groovy.lang.Closure`
类,暂未可在 GraalVM Native Image 下使用。
- 如下的算法类由于涉及到 /~https://github.com/oracle/graal/issues/5522 , 暂未可在 GraalVM Native Image 下使用。
- `org.apache.shardingsphere.sharding.algorithm.sharding.inline.InlineShardingAlgorithm`
- `org.apache.shardingsphere.sharding.algorithm.sharding.inline.ComplexInlineShardingAlgorithm`
- `org.apache.shardingsphere.sharding.algorithm.sharding.hint.HintInlineShardingAlgorithm`

- 当前阶段,GraalVM Native Image 形态的 ShardingSphere Proxy 处于混合 AOT ( GraalVM Native Image ) 和 JIT ( GraalVM
Truffle Espresso ) 运行的阶段。由于 /~https://github.com/oracle/graal/issues/4555 尚未关闭,GraalVM Truffle Espresso
运行需要的 `.so` 文件并不会进入 GraalVM Native Image 内。因此如果你需要在 Docker Image 外运行 ShardingSphere Proxy
Native 的二进制文件,你需要确保系统环境变量 `JAVA_HOME` 指向 GraalVM 的 `bin` 目录,并且此 GraalVM
实例已经通过 `GraalVM Updater` 安装了 `espresso` 组件。
- 当前阶段,GraalVM Native Image 形态的 ShardingSphere Proxy 不支持使用带 Groovy
语法的 `行表达式`, 这首先导致 `数据分片` 功能的`actualDataNodes`属性只能使用纯列表来配置, 例如 `ds_0.t_order_0, ds_0.t_order_1`
或 `ds_0.t_user_0, ds_15.t_user_1023`。此问题在 /~https://github.com/oracle/graal/issues/5522 追踪。

- 本节假定处于 Linux(amd64,aarch64), MacOS(amd64)或 Windows(amd64)环境。
如果你位于 MacOS(aarch64/M1) 环境,你需要关注尚未关闭的 /~https://github.com/oracle/graal/issues/2666 。

## 前提条件

1. 根据 https://www.graalvm.org/downloads/ 要求安装和配置 JDK 17 对应的 `GraalVM CE` 或 `GraalVM EE`。
同时可以通过 `SDKMAN!` 安装 JDK 17 对应的 `GraalVM CE`。
1. 根据 https://www.graalvm.org/downloads/ 要求安装和配置 JDK 17 对应的 `GraalVM Community Edition` 或 `Oracle GraalVM`。或者使用 `SDKMAN!`。

2. 通过 `GraalVM Updater` 工具安装 `native-image` 和 `espresso` 组件。
```shell
sdk install java 17.0.8-graalce
```

3. 根据 https://www.graalvm.org/22.3/reference-manual/native-image/#prerequisites 的要求安装本地工具链。
2. 根据 https://www.graalvm.org/latest/reference-manual/native-image/#prerequisites 的要求安装本地工具链。

4. 如果需要构建 Docker Image, 确保 `docker-ce` 已安装。
3. 如果需要构建 Docker Image, 确保 `docker-ce` 已安装。

5. 首先需要在项目的根目录下,执行如下命令以为所有子模块采集 Standard 形态的 GraalVM 可达性元数据。
4. 首先需要在项目的根目录下,执行如下命令以为所有子模块采集 Standard 形态的 GraalVM 可达性元数据。

```shell
./mvnw -PgenerateStandardMetadata -DskipNativeTests -B -T1C clean test
Expand Down Expand Up @@ -94,12 +90,12 @@ services:
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
<version>8.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-sql-translator-jooq-provider</artifactId>
<version>5.3.1</version>
<version>5.4.0</version>
</dependency>
</dependencies>
```
Expand Down Expand Up @@ -142,19 +138,18 @@ services:

- 如果你不对 Git Source 做任何更改, 上文提及的命令将使用 `oraclelinux:9-slim` 作为 Base Docker Image。
但如果你希望使用 `busybox:glic`,`gcr.io/distroless/base` 或 `scratch` 等更小体积的 Docker Image 作为 Base Docker
Image,你需要根据 https://www.graalvm.org/22.3/reference-manual/native-image/guides/build-static-executables/ 的要求,
Image,你需要根据 https://www.graalvm.org/latest/reference-manual/native-image/guides/build-static-executables/ 的要求,
做为 `pom.xml`的 `native profile` 添加 `-H:+StaticExecutableWithDynamicLibC` 的 `jvmArgs` 等操作。
另请注意,某些第三方依赖将需要在 `Dockerfile` 安装更多系统库,例如 `libdl`。
因此请确保根据你的使用情况调整 `distribution/proxy-native`
下的 `pom.xml` 和 `Dockerfile` 的内容。
因此请确保根据你的使用情况调整 `distribution/proxy-native` 下的 `pom.xml` 和 `Dockerfile` 的内容。

# 可观察性

- 针对 GraalVM Native Image 形态的 ShardingSphere
Proxy,其提供的可观察性的能力与 https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-proxy/observability/
并不一致。

- 你可以使用 https://www.graalvm.org/22.3/tools/ 提供的一系列命令行工具或可视化工具观察 GraalVM Native Image
- 你可以使用 https://www.graalvm.org/latest/tools/ 提供的一系列命令行工具或可视化工具观察 GraalVM Native Image
的内部行为,并根据其要求使用 VSCode 完成调试工作。
如果你正在使用 IntelliJ IDEA 并且希望调试生成的 GraalVM Native
Image,你可以关注 https://blog.jetbrains.com/idea/2022/06/intellij-idea-2022-2-eap-5/#Experimental_GraalVM_Native_Debugger_for_Java
Expand All @@ -166,7 +161,7 @@ services:

- 以下部分采用 `Apache SkyWalking Java Agent` 作为示例,可用于跟踪 GraalVM 社区的对应 issue。

1. 下载 https://archive.apache.org/dist/skywalking/java-agent/8.12.0/apache-skywalking-java-agent-8.12.0.tgz ,
1. 下载 https://dlcdn.apache.org/skywalking/java-agent/8.16.0/apache-skywalking-java-agent-8.16.0.tgz ,
并解压到 ShardingSphere Git Source 的 `distribution/proxy-native`。

2. 修改 `distribution/proxy-native/pom.xml` 的 `native profile`,
Expand Down
Loading