This is an automated email from the ASF dual-hosted git repository.

ethanfeng pushed a commit to branch branch-0.4
in repository https://gitbox.apache.org/repos/asf/celeborn.git


The following commit(s) were added to refs/heads/branch-0.4 by this push:
     new 794ca7e1f [CELEBORN-1380][FOLLOWUP] leveldbjni uses 
org.openlabtesting.leveldbjni to support linux aarch64 platform for leveldb via 
aarch64 profile
794ca7e1f is described below

commit 794ca7e1faa555e3829f67060776970032b15e38
Author: SteNicholas <[email protected]>
AuthorDate: Mon May 27 14:07:02 2024 +0800

    [CELEBORN-1380][FOLLOWUP] leveldbjni uses org.openlabtesting.leveldbjni to 
support linux aarch64 platform for leveldb via aarch64 profile
    
    Dependency leveldbjni uses `org.openlabtesting.leveldbjni` to support linux 
aarch64 platform for leveldb via `aarch64` profile.
    
    Follow up #2476.
    
    Celeborn worker could not start on arm arch devices if db backend is 
`LevelDB`, which should support leveldbjni on the aarch64 platform.
    
    aarch64 uses `org.openlabtesting.leveldbjni:leveldbjni-all.1.8`, and other 
platforms use `org.fusesource.leveldbjni:leveldbjni-all.1.8`. Meanwhile, 
because some hadoop dependencies packages are also depend on 
`org.fusesource.leveldbjni:leveldbjni-all`, but hadoop merge the similar change 
on trunk, details see
    [HADOOP-16614](https://issues.apache.org/jira/browse/HADOOP-16614), 
therefore it should exclude the dependency of `org.fusesource.leveldbjni` for 
these hadoop packages related.
    
    In addtion, `org.openlabtesting.leveldbjni` requires glibc version 3.4.21. 
Otherwise, there will be the following potential runtime risks:
    
    ```
    
    ---------------  T H R E A D  ---------------
    
    Current thread (0x00007f9308001000):  JavaThread "leveldb" 
[_thread_in_native, id=878, stack(0x00007f9338cf0000,0x00007f93394f0000)]
    
    siginfo: si_signo: 7 (SIGBUS), si_code: 2 (BUS_ADRERR), si_addr: 
0x00007f97380d2220
    ```
    
    Backport:
    
    - https://github.com/apache/spark/pull/26636
    - https://github.com/apache/spark/pull/31036
    
    No.
    
    No.
    
    Closes #2530 from SteNicholas/CELEBORN-1380.
    
    Authored-by: SteNicholas <[email protected]>
    Signed-off-by: mingji <[email protected]>
    (cherry picked from commit dd87419044c8a855abd65f7a237f9f8e0d71a657)
    Signed-off-by: mingji <[email protected]>
---
 LICENSE-binary              |  2 +-
 README.md                   | 10 ++++++++++
 common/pom.xml              |  2 +-
 docs/deploy_on_k8s.md       |  2 ++
 pom.xml                     | 20 +++++++++++++++++++-
 project/CelebornBuild.scala | 46 ++++++++++++++++++++++++++-------------------
 worker/pom.xml              |  2 +-
 7 files changed, 61 insertions(+), 23 deletions(-)

diff --git a/LICENSE-binary b/LICENSE-binary
index 605a5df49..945016f5b 100644
--- a/LICENSE-binary
+++ b/LICENSE-binary
@@ -287,7 +287,7 @@ BSD 3-clause
 See licenses/LICENSE-protobuf.txt for details.
 com.google.protobuf:protobuf-java
 See licenses/LICENSE-leveldbjni.txt for details.
-org.openlabtesting.leveldbjni:leveldbjni-all
+org.fusesource.leveldbjni:leveldbjni-all
 
 
 Common Development and Distribution License (CDDL) 1.0
diff --git a/README.md b/README.md
index ca40effad..26a4c4daa 100644
--- a/README.md
+++ b/README.md
@@ -78,6 +78,16 @@ To compile the client for Spark 2.4 with Scala 2.12, please 
use the following co
 ./build/make-distribution.sh -DskipTests -Pspark-2.4 
-Dscala.version=${scala.version} -Dscala.binary.version=2.12
 ```
 
+To compile for Spark 3.5 with Java21,  please use the following command
+```shell
+./build/make-distribution.sh -Pspark-3.5 -Pjdk-21
+```
+```shell
+./build/make-distribution.sh --sbt-enabled -Pspark-3.5 -Pjdk-21
+```
+
+> **_NOTE:_** Celeborn supports automatic builds on linux aarch64 platform via 
`aarch64` profile. `aarch64` profile requires glibc version 3.4.21. There is 
potential problematic frame `C  [libc.so.6+0x8412a]` for other glibc version 
like 2.x etc.
+
 ### Package Details
 Build procedure will create a compressed package.
 
diff --git a/common/pom.xml b/common/pom.xml
index 936fe4053..7f5e1faed 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -87,7 +87,7 @@
       <artifactId>netty-all</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.openlabtesting.leveldbjni</groupId>
+      <groupId>${leveldbjni.group}</groupId>
       <artifactId>leveldbjni-all</artifactId>
     </dependency>
     <dependency>
diff --git a/docs/deploy_on_k8s.md b/docs/deploy_on_k8s.md
index 298979c5c..0d5948bd0 100644
--- a/docs/deploy_on_k8s.md
+++ b/docs/deploy_on_k8s.md
@@ -38,6 +38,8 @@ You can find released version of Celeborn on 
https://celeborn.apache.org/downloa
 Of course, you can build binary package from master branch or your own branch 
by using `./build/make-distribution.sh` in
 source code.
 
+> Notice: Celeborn supports automatic builds on linux aarch64 platform via 
`aarch64` profile. `aarch64` profile requires glibc version 3.4.21. There is 
potential problematic frame `C  [libc.so.6+0x8412a]` for other glibc version 
like 2.x etc.
+
 Anyway, you should unzip and into binary package.
 
 ### 2. Modify Celeborn Configurations
diff --git a/pom.xml b/pom.xml
index 443d93ac1..4e1bfdf0e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -99,6 +99,9 @@
     <jackson.version>2.15.3</jackson.version>
     <snappy.version>1.1.10.5</snappy.version>
 
+    <!-- org.fusesource.leveldbjni will be used except on arm64 platform. -->
+    <leveldbjni.group>org.fusesource.leveldbjni</leveldbjni.group>
+
     <shading.prefix>org.apache.celeborn.shaded</shading.prefix>
 
     <maven.plugin.antrun.version>3.0.0</maven.plugin.antrun.version>
@@ -385,7 +388,7 @@
         </exclusions>
       </dependency>
       <dependency>
-        <groupId>org.openlabtesting.leveldbjni</groupId>
+        <groupId>${leveldbjni.group}</groupId>
         <artifactId>leveldbjni-all</artifactId>
         <version>${leveldb.version}</version>
       </dependency>
@@ -1476,5 +1479,20 @@
         <module>tests/kubernetes-it</module>
       </modules>
     </profile>
+
+    <!-- use org.openlabtesting.leveldbjni on aarch64 platform except MacOS -->
+    <profile>
+      <id>aarch64</id>
+      <activation>
+        <os>
+          <family>linux</family>
+          <arch>aarch64</arch>
+        </os>
+      </activation>
+      <properties>
+        <!-- org.openlabtesting.leveldbjni requires glibc version 3.4.21 -->
+        <leveldbjni.group>org.openlabtesting.leveldbjni</leveldbjni.group>
+      </properties>
+    </profile>
   </profiles>
 </project>
diff --git a/project/CelebornBuild.scala b/project/CelebornBuild.scala
index 80b84b13b..767f917df 100644
--- a/project/CelebornBuild.scala
+++ b/project/CelebornBuild.scala
@@ -69,7 +69,7 @@ object Dependencies {
   // Versions for proto
   val protocVersion = "3.21.7"
   val protoVersion = "3.21.7"
-  
+
   val commonsCompress = "org.apache.commons" % "commons-compress" % 
commonsCompressVersion
   val commonsCrypto = "org.apache.commons" % "commons-crypto" % 
commonsCryptoVersion excludeAll(
     ExclusionRule("net.java.dev.jna", "jna"))
@@ -100,7 +100,15 @@ object Dependencies {
   val ioNetty = "io.netty" % "netty-all" % nettyVersion excludeAll(
     ExclusionRule("io.netty", "netty-handler-ssl-ocsp"))
   val javaxServletApi = "javax.servlet" % "javax.servlet-api" % 
javaxServletVersion
-  val leveldbJniAll = "org.openlabtesting.leveldbjni" % "leveldbjni-all" % 
leveldbJniVersion
+  val leveldbJniGroup = if (System.getProperty("os.name").startsWith("Linux")
+    && System.getProperty("os.arch").equals("aarch64")) {
+    // use org.openlabtesting.leveldbjni on aarch64 platform except MacOS
+    // org.openlabtesting.leveldbjni requires glibc version 3.4.21
+    "org.openlabtesting.leveldbjni"
+  } else {
+    "org.fusesource.leveldbjni"
+  }
+  val leveldbJniAll = leveldbJniGroup % "leveldbjni-all" % leveldbJniVersion
   val log4j12Api = "org.apache.logging.log4j" % "log4j-1.2-api" % log4j2Version
   val log4jSlf4jImpl = "org.apache.logging.log4j" % "log4j-slf4j-impl" % 
log4j2Version
   val lz4Java = "org.lz4" % "lz4-java" % lz4JavaVersion
@@ -154,7 +162,7 @@ object CelebornCommonSettings {
   scalaVersion := projectScalaVersion
 
   autoScalaLibrary := false
-  
+
   // crossScalaVersions must be set to Nil on the root project
   crossScalaVersions := Nil
 
@@ -165,7 +173,7 @@ object CelebornCommonSettings {
     fork := true,
     scalacOptions ++= Seq("-target:jvm-1.8"),
     javacOptions ++= Seq("-encoding", UTF_8.name(), "-source", "1.8", "-g"),
-  
+
     // -target cannot be passed as a parameter to javadoc. See 
https://github.com/sbt/sbt/issues/355
     Compile / compile / javacOptions ++= Seq("-target", "1.8"),
 
@@ -196,7 +204,7 @@ object CelebornCommonSettings {
       "--add-opens=java.base/sun.util.calendar=ALL-UNNAMED",
       "-Dio.netty.tryReflectionSetAccessible=true"
     ),
-  
+
     testOptions += Tests.Argument("-oF"),
 
     Test / testOptions += Tests.Argument("-oDF"),
@@ -285,7 +293,7 @@ object CelebornBuild extends sbt.internal.BuildDef {
       CelebornWorker.worker,
       CelebornMaster.master) ++ maybeSparkClientModules ++ 
maybeFlinkClientModules ++ maybeMRClientModules
   }
-  
+
   // ThisBuild / parallelExecution := false
 
   // scalaVersion := "2.11.12"
@@ -421,7 +429,7 @@ object CelebornCommon {
         Seq(file)
         // generate version task depends on PB generate to avoid concurrency 
generate source files
       }.dependsOn(Compile / PB.generate),
-  
+
       // a task to show current profiles
       printProfiles := {
         val message = profiles.mkString("", " ", "")
@@ -680,7 +688,7 @@ trait SparkClientProjects {
         ) ++ commonUnitTestDependencies
       )
   }
-  
+
   def sparkClient: Project = {
     Project(sparkClientProjectName, file(sparkClientProjectPath))
       .dependsOn(CelebornCommon.common, sparkCommon)
@@ -745,14 +753,14 @@ trait SparkClientProjects {
           val extension = artifact.value.extension
           
s"${moduleName.value}_${scalaBinaryVersion.value}-${version.value}.$extension"
         },
-  
+
         (assembly / test) := { },
-  
+
         (assembly / logLevel) := Level.Info,
-  
+
         // Exclude `scala-library` from assembly.
         (assembly / assemblyPackageScala / assembleArtifact) := false,
-  
+
         (assembly / assemblyExcludedJars) := {
           val cp = (assembly / fullClasspath).value
           cp filter { v =>
@@ -766,7 +774,7 @@ trait SparkClientProjects {
               name.startsWith("RoaringBitmap-"))
           }
         },
-  
+
         (assembly / assemblyShadeRules) := Seq(
           ShadeRule.rename("com.google.protobuf.**" -> 
"org.apache.celeborn.shaded.com.google.protobuf.@1").inAll,
           ShadeRule.rename("com.google.common.**" -> 
"org.apache.celeborn.shaded.com.google.common.@1").inAll,
@@ -774,7 +782,7 @@ trait SparkClientProjects {
           ShadeRule.rename("org.apache.commons.**" -> 
"org.apache.celeborn.shaded.org.apache.commons.@1").inAll,
           ShadeRule.rename("org.roaringbitmap.**" -> 
"org.apache.celeborn.shaded.org.roaringbitmap.@1").inAll
         ),
-  
+
         (assembly / assemblyMergeStrategy) := {
           case m if m.toLowerCase(Locale.ROOT).endsWith("manifest.mf") => 
MergeStrategy.discard
           // the LicenseAndNoticeMergeStrategy always picks the license/notice 
file from the current project
@@ -948,12 +956,12 @@ trait FlinkClientProjects {
             val artifactValue: Artifact = artifact.value
             flinkClientShadeJarName(revision, artifactValue, 
scalaBinaryVersion.value)
         },
-  
+
         (assembly / logLevel) := Level.Info,
-  
+
         // Exclude `scala-library` from assembly.
         (assembly / assemblyPackageScala / assembleArtifact) := false,
-  
+
         (assembly / assemblyExcludedJars) := {
           val cp = (assembly / fullClasspath).value
           cp filter { v =>
@@ -967,7 +975,7 @@ trait FlinkClientProjects {
                 name.startsWith("RoaringBitmap-"))
           }
         },
-  
+
         (assembly / assemblyShadeRules) := Seq(
           ShadeRule.rename("com.google.protobuf.**" -> 
"org.apache.celeborn.shaded.com.google.protobuf.@1").inAll,
           ShadeRule.rename("com.google.common.**" -> 
"org.apache.celeborn.shaded.com.google.common.@1").inAll,
@@ -975,7 +983,7 @@ trait FlinkClientProjects {
           ShadeRule.rename("org.apache.commons.**" -> 
"org.apache.celeborn.shaded.org.apache.commons.@1").inAll,
           ShadeRule.rename("org.roaringbitmap.**" -> 
"org.apache.celeborn.shaded.org.roaringbitmap.@1").inAll
         ),
-  
+
         (assembly / assemblyMergeStrategy) := {
           case m if m.toLowerCase(Locale.ROOT).endsWith("manifest.mf") => 
MergeStrategy.discard
           // the LicenseAndNoticeMergeStrategy always picks the license/notice 
file from the current project
diff --git a/worker/pom.xml b/worker/pom.xml
index 8d3620de6..91bedf103 100644
--- a/worker/pom.xml
+++ b/worker/pom.xml
@@ -49,7 +49,7 @@
       <version>${project.version}</version>
     </dependency>
     <dependency>
-      <groupId>org.openlabtesting.leveldbjni</groupId>
+      <groupId>${leveldbjni.group}</groupId>
       <artifactId>leveldbjni-all</artifactId>
     </dependency>
     <dependency>

Reply via email to