From c27805447df9117551b0999991d32cb35bb68dd0 Mon Sep 17 00:00:00 2001 From: Bob Chen Date: Tue, 26 Dec 2023 09:28:10 +0800 Subject: [PATCH 1/5] Don't use gtest_main and gflags_nothreads (#316) --- CMake/Findgflags.cmake | 2 +- CMake/Findgoogletest.cmake | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/CMake/Findgflags.cmake b/CMake/Findgflags.cmake index 13d8b5f5..c93c2374 100644 --- a/CMake/Findgflags.cmake +++ b/CMake/Findgflags.cmake @@ -1,6 +1,6 @@ find_path(GFLAGS_INCLUDE_DIRS gflags/gflags.h) -find_library(GFLAGS_LIBRARIES gflags_nothreads) +find_library(GFLAGS_LIBRARIES gflags) find_package_handle_standard_args(gflags DEFAULT_MSG GFLAGS_LIBRARIES GFLAGS_INCLUDE_DIRS) diff --git a/CMake/Findgoogletest.cmake b/CMake/Findgoogletest.cmake index b88ede98..0de8d20f 100644 --- a/CMake/Findgoogletest.cmake +++ b/CMake/Findgoogletest.cmake @@ -1,15 +1,11 @@ find_path(GOOGLETEST_INCLUDE_DIRS gtest/gtest.h gmock/gmock.h) find_library(GOOGLETEST_GTEST_LIBRARIES gtest) -find_library(GOOGLETEST_GTEST_MAIN_LIBRARIES gtest_main) find_library(GOOGLETEST_GMOCK_LIBRARIES gmock) -find_library(GOOGLETEST_GMOCK_MAIN_LIBRARIES gmock_main) set(GOOGLETEST_LIBRARIES ${GOOGLETEST_GTEST_LIBRARIES} - ${GOOGLETEST_GTEST_MAIN_LIBRARIES} ${GOOGLETEST_GMOCK_LIBRARIES} - ${GOOGLETEST_GMOCK_MAIN_LIBRARIES} ) find_package_handle_standard_args(googletest DEFAULT_MSG GOOGLETEST_LIBRARIES GOOGLETEST_INCLUDE_DIRS) From 51be942a4ddc5de2effa874222977d734de539f2 Mon Sep 17 00:00:00 2001 From: Bob Chen Date: Wed, 27 Dec 2023 10:41:58 +0800 Subject: [PATCH 2/5] Don't use gtest_main and gflags_nothreads (#318) --- CMake/build-from-src.cmake | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/CMake/build-from-src.cmake b/CMake/build-from-src.cmake index dad13278..4e91b65f 100644 --- a/CMake/build-from-src.cmake +++ b/CMake/build-from-src.cmake @@ -10,6 +10,7 @@ function(build_from_src [dep]) aio URL ${PHOTON_AIO_SOURCE} URL_MD5 605237f35de238dfacc83bcae406d95d + UPDATE_DISCONNECTED ON BUILD_IN_SOURCE ON CONFIGURE_COMMAND "" BUILD_COMMAND $(MAKE) prefix=${BINARY_DIR} install @@ -24,6 +25,7 @@ function(build_from_src [dep]) zlib URL ${PHOTON_ZLIB_SOURCE} URL_MD5 9b8aa094c4e5765dabf4da391f00d15c + UPDATE_DISCONNECTED ON BUILD_IN_SOURCE ON CONFIGURE_COMMAND CFLAGS=-fPIC ./configure --prefix=${BINARY_DIR} --static BUILD_COMMAND $(MAKE) @@ -38,6 +40,7 @@ function(build_from_src [dep]) uring URL ${PHOTON_URING_SOURCE} URL_MD5 2e8c3c23795415475654346484f5c4b8 + UPDATE_DISCONNECTED ON BUILD_IN_SOURCE ON CONFIGURE_COMMAND ./configure --prefix=${BINARY_DIR} BUILD_COMMAND V=1 CFLAGS=-fPIC $(MAKE) -C src @@ -59,7 +62,7 @@ function(build_from_src [dep]) endif () ExternalProject_Get_Property(gflags BINARY_DIR) set(GFLAGS_INCLUDE_DIRS ${BINARY_DIR}/include PARENT_SCOPE) - set(GFLAGS_LIBRARIES ${BINARY_DIR}/lib/libgflags${POSTFIX}.a ${BINARY_DIR}/lib/libgflags_nothreads${POSTFIX}.a PARENT_SCOPE) + set(GFLAGS_LIBRARIES ${BINARY_DIR}/lib/libgflags${POSTFIX}.a PARENT_SCOPE) elseif (dep STREQUAL "googletest") ExternalProject_Add( @@ -72,8 +75,7 @@ function(build_from_src [dep]) ExternalProject_Get_Property(googletest SOURCE_DIR) ExternalProject_Get_Property(googletest BINARY_DIR) set(GOOGLETEST_INCLUDE_DIRS ${SOURCE_DIR}/googletest/include ${SOURCE_DIR}/googlemock/include PARENT_SCOPE) - set(GOOGLETEST_LIBRARIES ${BINARY_DIR}/lib/libgmock.a ${BINARY_DIR}/lib/libgmock_main.a - ${BINARY_DIR}/lib/libgtest.a ${BINARY_DIR}/lib/libgtest_main.a PARENT_SCOPE) + set(GOOGLETEST_LIBRARIES ${BINARY_DIR}/lib/libgmock.a ${BINARY_DIR}/lib/libgtest.a PARENT_SCOPE) elseif (dep STREQUAL "openssl") set(BINARY_DIR ${PROJECT_BINARY_DIR}/openssl-build) @@ -81,6 +83,7 @@ function(build_from_src [dep]) openssl URL ${PHOTON_OPENSSL_SOURCE} URL_MD5 bad68bb6bd9908da75e2c8dedc536b29 + UPDATE_DISCONNECTED ON BUILD_IN_SOURCE ON CONFIGURE_COMMAND ./config -fPIC --prefix=${BINARY_DIR} --openssldir=${BINARY_DIR} shared BUILD_COMMAND make -j 1 # https://github.com/openssl/openssl/issues/5762#issuecomment-376622684 @@ -102,6 +105,7 @@ function(build_from_src [dep]) curl URL ${PHOTON_CURL_SOURCE} URL_MD5 a66270f11e3fbfad709600bbd1686704 + UPDATE_DISCONNECTED ON BUILD_IN_SOURCE ON CONFIGURE_COMMAND autoreconf -i COMMAND ./configure --with-ssl=${OPENSSL_ROOT_DIR} --without-libssh2 --enable-static --enable-shared=no --enable-optimize From 49a271009481a00319e12cde28294b3f151506e0 Mon Sep 17 00:00:00 2001 From: Bob Chen Date: Mon, 8 Jan 2024 09:36:07 +0800 Subject: [PATCH 3/5] Re-define an undefined endpoint (#322) --- CMake/build-from-src.cmake | 2 +- net/kernel_socket.cpp | 4 ++-- net/socket.h | 5 +++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CMake/build-from-src.cmake b/CMake/build-from-src.cmake index 4e91b65f..abfcbe1b 100644 --- a/CMake/build-from-src.cmake +++ b/CMake/build-from-src.cmake @@ -87,7 +87,7 @@ function(build_from_src [dep]) BUILD_IN_SOURCE ON CONFIGURE_COMMAND ./config -fPIC --prefix=${BINARY_DIR} --openssldir=${BINARY_DIR} shared BUILD_COMMAND make -j 1 # https://github.com/openssl/openssl/issues/5762#issuecomment-376622684 - INSTALL_COMMAND $(MAKE) install + INSTALL_COMMAND make install LOG_CONFIGURE ON LOG_BUILD ON LOG_INSTALL ON diff --git a/net/kernel_socket.cpp b/net/kernel_socket.cpp index 08715afa..ada1c05a 100644 --- a/net/kernel_socket.cpp +++ b/net/kernel_socket.cpp @@ -1035,8 +1035,8 @@ extern "C" ISocketServer* new_fstack_dpdk_socket_server() { /* Implementations in socket.h */ -EndPoint::EndPoint(const char* s) { - estring_view ep(s); +EndPoint::EndPoint(const char* _ep) { + estring_view ep(_ep); auto pos = ep.find_last_of(':'); if (pos == estring::npos) return; diff --git a/net/socket.h b/net/socket.h index c0914ef8..93b45283 100644 --- a/net/socket.h +++ b/net/socket.h @@ -150,7 +150,8 @@ namespace net { uint16_t port = 0; EndPoint() = default; EndPoint(IPAddr ip, uint16_t port) : addr(ip), port(port) {} - explicit EndPoint(const char* s); + explicit EndPoint(const char* ep); + EndPoint(const char* ip, uint16_t port) : addr(ip), port(port) {} bool is_ipv4() const { return addr.is_ipv4(); }; @@ -161,7 +162,7 @@ namespace net { return !operator==(rhs); } bool undefined() const { - return addr.undefined() && port == 0; + return addr.undefined(); } }; From bd08579603765cb8814da89f7050c18c2e1464af Mon Sep 17 00:00:00 2001 From: Bob Chen Date: Wed, 10 Jan 2024 14:22:56 +0800 Subject: [PATCH 4/5] iouring: remove RLIMIT_MEMLOCK check for new kernel --- .github/workflows/ci.linux.x86.yml | 2 -- io/iouring-wrapper.cpp | 10 +++++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.linux.x86.yml b/.github/workflows/ci.linux.x86.yml index d19e377b..b0101a2b 100644 --- a/.github/workflows/ci.linux.x86.yml +++ b/.github/workflows/ci.linux.x86.yml @@ -86,7 +86,6 @@ jobs: container: image: dokken/centos-stream-8:sha-40294ce - # In order to run io_uring, the docker daemon should add --default-ulimit memlock=-1:-1 options: --cpus 4 steps: @@ -116,6 +115,5 @@ jobs: - name: Test run: | cd build - ulimit -l unlimited export PHOTON_CI_EV_ENGINE=io_uring ctest --timeout 3600 -V diff --git a/io/iouring-wrapper.cpp b/io/iouring-wrapper.cpp index 77579daa..ab3aadd1 100644 --- a/io/iouring-wrapper.cpp +++ b/io/iouring-wrapper.cpp @@ -76,10 +76,14 @@ class iouringEngine : public MasterEventEngine, public CascadingEventEngine, pub } int init() { - rlimit resource_limit{.rlim_cur = RLIM_INFINITY, .rlim_max = RLIM_INFINITY}; - if (setrlimit(RLIMIT_MEMLOCK, &resource_limit) != 0) { - LOG_ERROR_RETURN(0, -1, "iouring: failed to set resource limit. Use command `ulimit -l unlimited`, or change to root"); + int compare_result; + if (kernel_version_compare("5.11", compare_result) == 0 && compare_result <= 0) { + rlimit resource_limit{.rlim_cur = RLIM_INFINITY, .rlim_max = RLIM_INFINITY}; + if (setrlimit(RLIMIT_MEMLOCK, &resource_limit) != 0) + LOG_ERROR_RETURN(0, -1, "iouring: failed to set resource limit. " + "Use command `ulimit -l unlimited`, or change to root"); } + check_register_file_support(); check_cooperative_task_support(); set_submit_wait_function(); From b57b2774cd528c8e2a7bc3b2103f034cdbb92ed5 Mon Sep 17 00:00:00 2001 From: Bob Chen Date: Mon, 15 Jan 2024 21:23:13 +0800 Subject: [PATCH 5/5] [http] Wrong domain name fail immediately --- net/http/client.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/http/client.cpp b/net/http/client.cpp index 57fac913..7c9cf547 100644 --- a/net/http/client.cpp +++ b/net/http/client.cpp @@ -70,7 +70,7 @@ ISocketStream* PooledDialer::dial(std::string_view host, uint16_t port, bool sec std::string strhost(host); auto ipaddr = resolver->resolve(strhost.c_str()); if (ipaddr.undefined()) { - LOG_ERROR_RETURN(0, nullptr, "DNS resolve failed, name = `", host) + LOG_ERROR_RETURN(ENOENT, nullptr, "DNS resolve failed, name = `", host) } EndPoint ep(ipaddr, port); @@ -165,7 +165,7 @@ class ClientImpl : public Client { ? m_dialer.dial(m_proxy_url, tmo.timeout()) : m_dialer.dial(req, tmo.timeout()); if (!s) { - if (errno == ECONNREFUSED) { + if (errno == ECONNREFUSED || errno == ENOENT) { LOG_ERROR_RETURN(0, ROUNDTRIP_FAST_RETRY, "connection refused") } LOG_ERROR_RETURN(0, ROUNDTRIP_NEED_RETRY, "connection failed");