This is an automated email from the ASF dual-hosted git repository. xyz pushed a commit to branch branch-3.8 in repository https://gitbox.apache.org/repos/asf/pulsar-client-cpp.git
commit bf7acb29fdee844aed694668c93a95e399b8bf9b Author: Yunze Xu <[email protected]> AuthorDate: Fri Oct 17 02:05:02 2025 +0800 Replace Roaring64Map with unordered_set to unblock fat static library build issue (#514) (cherry picked from commit 3be5267ef781b9a1928c009da1ac53dc60a12a35) --- .github/workflows/ci-pr-validation.yaml | 4 +++- .github/workflows/codeql-analysis.yml | 2 +- CMakeLists.txt | 2 -- LegacyFindPackages.cmake | 22 ---------------------- lib/NegativeAcksTracker.cc | 2 +- lib/NegativeAcksTracker.h | 9 ++------- pkg/mac/build-static-library.sh | 2 +- vcpkg.json | 4 ---- 8 files changed, 8 insertions(+), 39 deletions(-) diff --git a/.github/workflows/ci-pr-validation.yaml b/.github/workflows/ci-pr-validation.yaml index c73ec51..29026e6 100644 --- a/.github/workflows/ci-pr-validation.yaml +++ b/.github/workflows/ci-pr-validation.yaml @@ -172,7 +172,7 @@ jobs: sudo apt-get install -y libcurl4-openssl-dev libssl-dev \ protobuf-compiler libprotobuf-dev libboost-dev \ libboost-dev libboost-program-options-dev \ - libzstd-dev libsnappy-dev libgmock-dev libgtest-dev libroaring-dev + libzstd-dev libsnappy-dev libgmock-dev libgtest-dev - name: CMake run: cmake -B build -DBUILD_PERF_TOOLS=ON -DCMAKE_CXX_STANDARD=20 - name: Build @@ -341,6 +341,8 @@ jobs: - name: Build packages run: pkg/${{matrix.pkg.type}}/docker-build-${{matrix.pkg.type}}-${{matrix.cpu.platform}}.sh build:latest + # TODO: verify the pre-built package works without linking issue + cpp-build-macos: timeout-minutes: 120 name: Build CPP Client on macOS with static dependencies diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 70f833c..c877c64 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -60,7 +60,7 @@ jobs: sudo apt-get install -y libcurl4-openssl-dev libssl-dev \ protobuf-compiler libprotobuf-dev libboost-dev \ libboost-dev libboost-program-options-dev \ - libzstd-dev libsnappy-dev libroaring-dev + libzstd-dev libsnappy-dev - name: Build run: | diff --git a/CMakeLists.txt b/CMakeLists.txt index 792c2ef..c261031 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -128,7 +128,6 @@ if (INTEGRATE_VCPKG) find_package(protobuf CONFIG REQUIRED) find_package(zstd CONFIG REQUIRED) find_package(Snappy CONFIG REQUIRED) - find_package(roaring CONFIG REQUIRED) set(COMMON_LIBS CURL::libcurl ZLIB::ZLIB OpenSSL::SSL @@ -136,7 +135,6 @@ if (INTEGRATE_VCPKG) protobuf::libprotobuf $<IF:$<TARGET_EXISTS:zstd::libzstd_shared>,zstd::libzstd_shared,zstd::libzstd_static> Snappy::snappy - roaring::roaring ) if (USE_ASIO) find_package(asio CONFIG REQUIRED) diff --git a/LegacyFindPackages.cmake b/LegacyFindPackages.cmake index 2c70ec2..5004545 100644 --- a/LegacyFindPackages.cmake +++ b/LegacyFindPackages.cmake @@ -117,25 +117,6 @@ if (NOT ZLIB_INCLUDE_DIRS OR NOT ZLIB_LIBRARIES) message(FATAL_ERROR "Could not find zlib") endif () -find_package(roaring QUIET) -if (NOT ROARING_FOUND) - find_path(ROARING_INCLUDE_DIRS NAMES roaring/roaring.hh) - find_library(ROARING_LIBRARIES NAMES roaring libroaring) -endif () -message("ROARING_INCLUDE_DIRS: " ${ROARING_INCLUDE_DIRS}) -message("ROARING_LIBRARIES: " ${ROARING_LIBRARIES}) -if (NOT ROARING_INCLUDE_DIRS OR NOT ROARING_LIBRARIES) - message(FATAL_ERROR "Could not find libroaring") -endif () -file(READ "${ROARING_INCLUDE_DIRS}/roaring/roaring.hh" ROARING_HEADER_CONTENTS) -string(REGEX MATCH "namespace roaring" ROARING_HAS_NAMESPACE "${ROARING_HEADER_CONTENTS}") -if (ROARING_HAS_NAMESPACE) - message(STATUS "Roaring64Map is in namespace roaring") -else () - message(STATUS "Roaring64Map is in global namespace") - add_definitions(-DROARING_NAMESPACE_GLOBAL) -endif () - if (LINK_STATIC AND NOT VCPKG_TRIPLET) find_library(LIB_ZSTD NAMES libzstd.a) message(STATUS "ZStd: ${LIB_ZSTD}") @@ -148,7 +129,6 @@ if (LINK_STATIC AND NOT VCPKG_TRIPLET) elseif (LINK_STATIC AND VCPKG_TRIPLET) find_package(Protobuf REQUIRED) message(STATUS "Found protobuf static library: " ${Protobuf_LIBRARIES}) - find_package(roaring REQUIRED) if (MSVC AND (${CMAKE_BUILD_TYPE} STREQUAL Debug)) find_library(ZLIB_LIBRARIES NAMES zlibd) else () @@ -251,7 +231,6 @@ include_directories( ${Boost_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS} - ${ROARING_INCLUDE_DIRS} ${CURL_INCLUDE_DIRS} ${Protobuf_INCLUDE_DIRS} ${GTEST_INCLUDE_PATH} @@ -267,7 +246,6 @@ set(COMMON_LIBS ${CURL_LIBRARIES} ${OPENSSL_LIBRARIES} ${ZLIB_LIBRARIES} - ${ROARING_LIBRARIES} ${ADDITIONAL_LIBRARIES} ${CMAKE_DL_LIBS} ) diff --git a/lib/NegativeAcksTracker.cc b/lib/NegativeAcksTracker.cc index e5f439d..b691b18 100644 --- a/lib/NegativeAcksTracker.cc +++ b/lib/NegativeAcksTracker.cc @@ -127,7 +127,7 @@ void NegativeAcksTracker::add(const MessageId &m) { auto trimmedTimestamp = trimLowerBit(now + nackDelay_, nackPrecisionBit_); // If the timestamp is already in the map, we can just add the message to the existing entry // Erase batch id to group all nacks from same batch - nackedMessages_[trimmedTimestamp][msgId.ledgerId()].add((uint64_t)msgId.entryId()); + nackedMessages_[trimmedTimestamp][msgId.ledgerId()].insert(msgId.entryId()); } scheduleTimer(); diff --git a/lib/NegativeAcksTracker.h b/lib/NegativeAcksTracker.h index 8199966..10578f1 100644 --- a/lib/NegativeAcksTracker.h +++ b/lib/NegativeAcksTracker.h @@ -27,8 +27,8 @@ #include <map> #include <memory> #include <mutex> -#include <roaring/roaring64map.hh> #include <unordered_map> +#include <unordered_set> #include "AsioDefines.h" #include "AsioTimer.h" @@ -42,11 +42,6 @@ using ClientImplPtr = std::shared_ptr<ClientImpl>; class ExecutorService; using ExecutorServicePtr = std::shared_ptr<ExecutorService>; using LedgerId = int64_t; -#ifdef ROARING_NAMESPACE_GLOBAL -using ConditionalRoaringMap = Roaring64Map; -#else -using ConditionalRoaringMap = roaring::Roaring64Map; -#endif class NegativeAcksTracker : public std::enable_shared_from_this<NegativeAcksTracker> { public: @@ -74,7 +69,7 @@ class NegativeAcksTracker : public std::enable_shared_from_this<NegativeAcksTrac std::chrono::milliseconds timerInterval_; int nackPrecisionBit_; typedef typename std::chrono::steady_clock Clock; - std::map<Clock::time_point, std::unordered_map<LedgerId, ConditionalRoaringMap>> nackedMessages_; + std::map<Clock::time_point, std::unordered_map<LedgerId, std::unordered_set<int64_t>>> nackedMessages_; const DeadlineTimerPtr timer_; std::atomic_bool closed_{false}; diff --git a/pkg/mac/build-static-library.sh b/pkg/mac/build-static-library.sh index 32c6042..449222b 100755 --- a/pkg/mac/build-static-library.sh +++ b/pkg/mac/build-static-library.sh @@ -72,5 +72,5 @@ cp ./build-osx/libpulsarwithdeps.a $INSTALL_DIR/lib/ # Test the libraries clang++ win-examples/example.cc -o dynamic.out -std=c++11 -arch $ARCH -I $INSTALL_DIR/include -L $INSTALL_DIR/lib -Wl,-rpath $INSTALL_DIR/lib -lpulsar ./dynamic.out -clang++ win-examples/example.cc -o static.out -std=c++11 -arch $ARCH -I $INSTALL_DIR/include $INSTALL_DIR/lib/libpulsarwithdeps.a $PWD/build-osx/vcpkg_installed/$VCPKG_TRIPLET/lib/libroaring.a +clang++ win-examples/example.cc -o static.out -std=c++11 -arch $ARCH -I $INSTALL_DIR/include $INSTALL_DIR/lib/libpulsarwithdeps.a ./static.out diff --git a/vcpkg.json b/vcpkg.json index 83c926a..5c40c19 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -43,10 +43,6 @@ "name": "protobuf", "version>=": "3.21.12" }, - { - "name": "roaring", - "version>=": "4.3.1" - }, { "name": "snappy", "version>=": "1.1.10"
