From d4d7d7bf22dee14fc33bdcb61427b3505d9c26eb Mon Sep 17 00:00:00 2001 From: Haohui Mai Date: Fri, 8 May 2015 09:57:20 -0700 Subject: [PATCH] HDFS-8346. libwebhdfs build fails during link due to unresolved external symbols. Contributed by Chris Nauroth. --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++ .../hadoop-hdfs/src/contrib/libwebhdfs/CMakeLists.txt | 3 +++ .../src/contrib/libwebhdfs/src/hdfs_http_client.c | 10 +++++++++- .../src/contrib/libwebhdfs/src/hdfs_http_client.h | 2 +- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index f5aa3362534..562c1e5d6ed 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -368,6 +368,9 @@ Release 2.8.0 - UNRELEASED HDFS-6285. tidy an error log inside BlockReceiver. (Liang Xie via umamahesh) + HDFS-8346. libwebhdfs build fails during link due to unresolved external + symbols. (Chris Nauroth via wheat9) + Release 2.7.1 - UNRELEASED INCOMPATIBLE CHANGES diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/contrib/libwebhdfs/CMakeLists.txt b/hadoop-hdfs-project/hadoop-hdfs/src/contrib/libwebhdfs/CMakeLists.txt index 25f95b2b2fe..44f0c42baa9 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/contrib/libwebhdfs/CMakeLists.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/src/contrib/libwebhdfs/CMakeLists.txt @@ -31,6 +31,9 @@ add_dual_library(webhdfs src/hdfs_json_parser.c ../../main/native/libhdfs/exception.c ../../main/native/libhdfs/jni_helper.c + ../../${OS_DIR}/mutexes.c + ../../${OS_DIR}/thread_local_storage.c + ../../main/native/libhdfs/common/htable.c ) target_link_dual_libraries(webhdfs ${JAVA_JVM_LIBRARY} diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/contrib/libwebhdfs/src/hdfs_http_client.c b/hadoop-hdfs-project/hadoop-hdfs/src/contrib/libwebhdfs/src/hdfs_http_client.c index dc58318b025..dc5ca4102de 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/contrib/libwebhdfs/src/hdfs_http_client.c +++ b/hadoop-hdfs-project/hadoop-hdfs/src/contrib/libwebhdfs/src/hdfs_http_client.c @@ -28,7 +28,15 @@ static volatile int curlGlobalInited = 0; const char *hdfs_strerror(int errnoval) { - return terror(errnoval); +#if defined(__sun) +// MT-Safe under Solaris which doesn't support sys_errlist/sys_nerr + return strerror(errnoval); +#else + if ((errnoval < 0) || (errnoval >= sys_nerr)) { + return "unknown error."; + } + return sys_errlist[errnoval]; +#endif } int initResponseBuffer(struct ResponseBuffer **buffer) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/contrib/libwebhdfs/src/hdfs_http_client.h b/hadoop-hdfs-project/hadoop-hdfs/src/contrib/libwebhdfs/src/hdfs_http_client.h index 0e70decac57..8d1c3db1006 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/contrib/libwebhdfs/src/hdfs_http_client.h +++ b/hadoop-hdfs-project/hadoop-hdfs/src/contrib/libwebhdfs/src/hdfs_http_client.h @@ -284,7 +284,7 @@ int launchDnAPPEND(const char *url, struct webhdfsBuffer *buffer, struct Response **response) __attribute__ ((warn_unused_result)); /** - * Call sys_errlist to get the error message string for the given error code + * Thread-safe strerror alternative. * * @param errnoval The error code value * @return The error message string mapped to the given error code