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

granthenke pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git


The following commit(s) were added to refs/heads/master by this push:
     new 202bcae  [build] Fix occasional Gradle build failures
202bcae is described below

commit 202bcae7f12ca0d7ac43e0a07e57f3236c8f968d
Author: Grant Henke <[email protected]>
AuthorDate: Thu Jan 21 12:23:50 2021 -0600

    [build] Fix occasional Gradle build failures
    
    Occasionally, on a clean build environment often as a part of the
    CI pipline, the C++ build will fail with cryptic often Protobuf
    related failures. It turns out this is a result of multiple
    ./gradlew calls which depend on the kudu-proto module.
    This change fixes the issue by defining a single CMake target
    to build the kudu-proto jar.
    
    Change-Id: Iefa02e52a74f8a60c3029188995574ffdb0d3d5c
    Reviewed-on: http://gerrit.cloudera.org:8080/16968
    Tested-by: Kudu Jenkins
    Reviewed-by: Alexey Serbin <[email protected]>
    Reviewed-by: Andrew Wong <[email protected]>
---
 CMakeLists.txt                     | 11 +++++++++++
 src/kudu/hms/CMakeLists.txt        |  2 +-
 src/kudu/subprocess/CMakeLists.txt |  2 +-
 3 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index d613233..4e6c8f2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -119,6 +119,17 @@ add_custom_command(OUTPUT ${GRADLE_WRAPPER_JAR}
   WORKING_DIRECTORY "${JAVA_DIR}")
 add_custom_target(init_gradle DEPENDS ${GRADLE_WRAPPER_JAR})
 
+# A target to build the kudu-proto Java module which is used
+# by the kudu-subprocess and kudu-hive modules to avoid building
+# multiple times and potential race conditions in Gradle code
+# generation.
+set(PROTO_JAR 
${JAVA_DIR}/kudu-proto/build/libs/kudu-proto-${KUDU_VERSION_NUMBER}.jar)
+add_custom_command(OUTPUT ${PROTO_JAR}
+        COMMAND ./gradlew :kudu-proto:jar ${GRADLE_FLAGS}
+        WORKING_DIRECTORY "${JAVA_DIR}"
+        DEPENDS init_gradle)
+add_custom_target(proto_jar DEPENDS ${PROTO_JAR})
+
 # Allow "make install" to not depend on all targets.
 #
 # Must be declared in the top-level CMakeLists.txt.
diff --git a/src/kudu/hms/CMakeLists.txt b/src/kudu/hms/CMakeLists.txt
index 546da94..ef1171b 100644
--- a/src/kudu/hms/CMakeLists.txt
+++ b/src/kudu/hms/CMakeLists.txt
@@ -71,7 +71,7 @@ add_custom_command(OUTPUT ${HMS_PLUGIN_JAR}
     "${JAVA_DIR}/kudu-hive/build/libs/kudu-hive-${KUDU_VERSION_NUMBER}.jar"
     "${HMS_PLUGIN_JAR}"
   WORKING_DIRECTORY "${JAVA_DIR}"
-  DEPENDS init_gradle)
+  DEPENDS proto_jar)
 add_custom_target(hms_plugin_jar DEPENDS ${HMS_PLUGIN_JAR})
 
 set(MINI_HMS_SRCS
diff --git a/src/kudu/subprocess/CMakeLists.txt 
b/src/kudu/subprocess/CMakeLists.txt
index 65cb40c..4d2ec6a 100644
--- a/src/kudu/subprocess/CMakeLists.txt
+++ b/src/kudu/subprocess/CMakeLists.txt
@@ -43,7 +43,7 @@ add_custom_command(OUTPUT ${SUBPROCESS_JAR}
     
"${JAVA_DIR}/kudu-subprocess/build/libs/kudu-subprocess-${KUDU_VERSION_NUMBER}.jar"
     "${SUBPROCESS_JAR}"
   WORKING_DIRECTORY "${JAVA_DIR}"
-  DEPENDS init_gradle)
+  DEPENDS proto_jar)
 add_custom_target(subprocess_jar DEPENDS ${SUBPROCESS_JAR})
 
 add_library(kudu_subprocess

Reply via email to