From 9a675fcdfcf57d018d0d57bad0d9ddf82278090a Mon Sep 17 00:00:00 2001 From: zclllyybb Date: Fri, 20 Oct 2023 13:12:24 +0800 Subject: [PATCH] [chore](be) Add default timezone files (#25097) --- .gitignore | 1 + be/src/common/config.cpp | 3 +++ be/src/common/config.h | 3 +++ be/src/util/timezone_utils.cpp | 15 ++++++++++----- be/test/vec/function/function_time_test.cpp | 1 - build.sh | 7 +++++++ resource/zoneinfo.tar.gz | Bin 0 -> 671860 bytes 7 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 resource/zoneinfo.tar.gz diff --git a/.gitignore b/.gitignore index 10fc199fc3..84fc3064e6 100644 --- a/.gitignore +++ b/.gitignore @@ -97,6 +97,7 @@ be/tags be/test/olap/test_data/tablet_meta_test.hdr be/.devcontainer/ be/src/apache-orc/ +zoneinfo/ ## tools tools/ssb-tools/ssb-data/ diff --git a/be/src/common/config.cpp b/be/src/common/config.cpp index 780eeca097..1634ea575f 100644 --- a/be/src/common/config.cpp +++ b/be/src/common/config.cpp @@ -1114,6 +1114,9 @@ DEFINE_Bool(enable_cpu_hard_limit, "false"); DEFINE_Bool(ignore_always_true_predicate_for_segment, "true"); +// Dir of default timezone files +DEFINE_String(default_tzfiles_path, "${DORIS_HOME}/zoneinfo"); + // clang-format off #ifdef BE_TEST // test s3 diff --git a/be/src/common/config.h b/be/src/common/config.h index caca2255cb..e17e4b5f67 100644 --- a/be/src/common/config.h +++ b/be/src/common/config.h @@ -1184,6 +1184,9 @@ DECLARE_Bool(enable_flush_file_cache_async); // Remove predicate that is always true for a segment. DECLARE_Bool(ignore_always_true_predicate_for_segment); +// Dir of default timezone files +DECLARE_String(default_tzfiles_path); + #ifdef BE_TEST // test s3 DECLARE_String(test_s3_resource); diff --git a/be/src/util/timezone_utils.cpp b/be/src/util/timezone_utils.cpp index a90f30820a..d3f6ff9af4 100644 --- a/be/src/util/timezone_utils.cpp +++ b/be/src/util/timezone_utils.cpp @@ -36,6 +36,7 @@ #include #include +#include "common/config.h" #include "common/exception.h" #include "common/logging.h" @@ -77,8 +78,10 @@ void TimezoneUtils::load_timezone_names() { path += '/'; if (!std::filesystem::exists(path)) { - LOG_WARNING("Cannot find system tzfile. Abandon to preload timezone name cache."); - return; + LOG_WARNING("Cannot find system tzfile. Use default instead."); + path = config::default_tzfiles_path + '/'; + CHECK(std::filesystem::exists(path)) + << "Can't find system tzfiles or default tzfiles neither."; } auto path_prefix_len = path.size(); @@ -236,10 +239,12 @@ void TimezoneUtils::load_timezones_to_cache() { base_str += tzdir; base_str += '/'; - const auto root_path = std::filesystem::path {base_str}; + auto root_path = std::filesystem::path {base_str}; if (!std::filesystem::exists(root_path)) { - LOG_WARNING("Cannot find system tzfile. Abandon to preload timezone cache."); - return; + LOG_WARNING("Cannot find system tzfile. Use default instead."); + root_path = config::default_tzfiles_path + '/'; + CHECK(std::filesystem::exists(root_path)) + << "Can't find system tzfiles or default tzfiles neither."; } std::set ignore_paths = {"posix", "right"}; // duplications diff --git a/be/test/vec/function/function_time_test.cpp b/be/test/vec/function/function_time_test.cpp index 56f49ec6c9..cf64fd9e55 100644 --- a/be/test/vec/function/function_time_test.cpp +++ b/be/test/vec/function/function_time_test.cpp @@ -202,7 +202,6 @@ TEST(VTimestampFunctionsTest, timediff_test) { } TEST(VTimestampFunctionsTest, convert_tz_test) { - GTEST_SKIP() << "Skip temporarily. need fix"; std::string func_name = "convert_tz"; TimezoneUtils::clear_timezone_caches(); diff --git a/build.sh b/build.sh index 4f6a58ec71..9c8f415d77 100755 --- a/build.sh +++ b/build.sh @@ -95,6 +95,7 @@ clean_be() { rm -rf "${CMAKE_BUILD_DIR}" rm -rf "${DORIS_HOME}/be/output" + rm -rf "${DORIS_HOME}/zoneinfo" popd } @@ -634,6 +635,12 @@ if [[ "${OUTPUT_BE_BINARY}" -eq 1 ]]; then cp -r -p "${DORIS_HOME}/be/output/bin"/* "${DORIS_OUTPUT}/be/bin"/ cp -r -p "${DORIS_HOME}/be/output/conf"/* "${DORIS_OUTPUT}/be/conf"/ cp -r -p "${DORIS_HOME}/be/output/dict" "${DORIS_OUTPUT}/be/" + if [[ ! -r "${DORIS_HOME}/zoneinfo/Africa/Abidjan" ]]; then + rm -rf "${DORIS_HOME}/zoneinfo" + echo "Generating zoneinfo files" + tar -xzf "${DORIS_HOME}/resource/zoneinfo.tar.gz" -C "${DORIS_HOME}"/ + fi + cp -r -p "${DORIS_HOME}/zoneinfo" "${DORIS_OUTPUT}/be/" if [[ -d "${DORIS_THIRDPARTY}/installed/lib/hadoop_hdfs/" ]]; then cp -r -p "${DORIS_THIRDPARTY}/installed/lib/hadoop_hdfs/" "${DORIS_OUTPUT}/be/lib/" diff --git a/resource/zoneinfo.tar.gz b/resource/zoneinfo.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..db010ccce99775cd22ea8d17570a6053bf8f81cc GIT binary patch literal 671860 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