Skip to content

Commit 279c3d7

Browse files
authored
feat: Pulsar external stream (#891)
1 parent c1754a7 commit 279c3d7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+69691
-262
lines changed

.github/workflows/manual_trigger_build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ jobs:
225225
export CC=$(brew --prefix llvm@17)/bin/clang
226226
export CXX=$(brew --prefix llvm@17)/bin/clang++
227227
export PATH=$(brew --prefix llvm@17)/bin:$PATH
228-
cmake -B ${{ env.build_directory }} -G "Ninja" -DCMAKE_BUILD_TYPE=${{ env.build_type }} -DENABLE_TESTS=OFF -DENABLE_UTILS=OFF -DENABLE_EXAMPLES=OFF
228+
cmake -B ${{ env.build_directory }} -G "Ninja" -DCMAKE_BUILD_TYPE=${{ env.build_type }} -DENABLE_TESTS=OFF -DENABLE_UTILS=OFF -DENABLE_EXAMPLES=OFF -DENABLE_PULSAR=OFF
229229
230230
- name: Build with Ninja
231231
run: cmake --build ${{ env.build_directory }}

.github/workflows/release_build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ jobs:
322322
export CC=$(brew --prefix llvm@17)/bin/clang
323323
export CXX=$(brew --prefix llvm@17)/bin/clang++
324324
export PATH=$(brew --prefix llvm@17)/bin:$PATH
325-
cmake -B ${{ env.build_directory }} -G "Ninja" -DCMAKE_BUILD_TYPE=${{ env.build_type }} -DENABLE_TESTS=OFF -DENABLE_UTILS=OFF -DENABLE_EXAMPLES=OFF
325+
cmake -B ${{ env.build_directory }} -G "Ninja" -DCMAKE_BUILD_TYPE=${{ env.build_type }} -DENABLE_TESTS=OFF -DENABLE_UTILS=OFF -DENABLE_EXAMPLES=OFF -DENABLE_PULSAR=OFF
326326
327327
# Compile the project using Ninja
328328
- name: Build with Ninja

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,3 +283,6 @@
283283
[submodule "contrib/c-ares"]
284284
path = contrib/c-ares
285285
url = https://github.com/c-ares/c-ares.git
286+
[submodule "contrib/pulsar-cmake/pulsar-client-cpp"]
287+
path = contrib/pulsar-cmake/pulsar-client-cpp
288+
url = https://github.com/apache/pulsar-client-cpp.git

build.sh

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
build_type="$1"
55
build_type="${build_type:=Release}"
66

7+
is_not_darwin=1
8+
if [[ "$(uname)" == "Darwin" ]]; then
9+
is_not_darwin=0
10+
echo "=== This is Darwin ==="
11+
fi
12+
713
sanitizer=""
814
if [ "$build_type" = "Debug" ]; then
915
sanitizer="address"
@@ -74,5 +80,7 @@ cmake .. \
7480
-DENABLE_ENCRYPT_DECRYPT_FUNCS=ON \
7581
-DENABLE_DEBUG_FUNCS=ON \
7682
-DENABLE_URL_FUNCS=ON \
77-
-DENABLE_AVRO=ON
83+
-DENABLE_AVRO=ON \
84+
-DENABLE_CURL=${is_not_darwin} \
85+
-DENABLE_PULSAR=${is_not_darwin}
7886

contrib/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ if (NOT OS_DARWIN)
129129
add_contrib (curl-cmake curl)
130130
add_contrib (azure-cmake azure)
131131
add_contrib (sentry-native-cmake sentry-native) # requires: curl
132+
add_contrib (pulsar-cmake) # requires: curl
132133
endif()
133134

134135
add_contrib (fmtlib-cmake fmtlib)

contrib/pulsar-cmake/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
!generated/lib/PulsarApi.pb.h
2+
!generated/lib/PulsarApi.pb.cc

contrib/pulsar-cmake/CMakeLists.txt

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# Needed when using Apache Pulsar external stream
2+
option (ENABLE_PULSAR "Enable Pulsar" ${ENABLE_LIBRARIES})
3+
4+
if (NOT ENABLE_PULSAR)
5+
message(STATUS "Not using pulsar")
6+
return()
7+
endif()
8+
9+
if (NOT ENABLE_CURL)
10+
message(FATAL_ERROR "Pulsar requires curl")
11+
endif()
12+
13+
if (OS_DARWIN)
14+
message(FATAL_ERROR "Pulsar is not supported on MacOS yet")
15+
endif()
16+
17+
set(PULSAR_CLIENT_CPP_DIR "${CMAKE_CURRENT_LIST_DIR}/pulsar-client-cpp")
18+
set(PROTOC_PATH protoc)
19+
20+
execute_process(COMMAND cat ${PULSAR_CLIENT_CPP_DIR}/version.txt OUTPUT_STRIP_TRAILING_WHITESPACE
21+
OUTPUT_VARIABLE PULSAR_CLIENT_VERSION)
22+
message(STATUS "Pulsar Client version: ${PULSAR_CLIENT_VERSION}")
23+
24+
execute_process(COMMAND ${PULSAR_CLIENT_CPP_DIR}/build-support/gen-pulsar-version-macro.py OUTPUT_STRIP_TRAILING_WHITESPACE
25+
OUTPUT_VARIABLE PULSAR_CLIENT_VERSION_MACRO)
26+
message(STATUS "Pulsar Client version macro: ${PULSAR_CLIENT_VERSION_MACRO}")
27+
28+
set(PVM_COMMENT "This is generated from Version.h.in by CMAKE. DO NOT EDIT DIRECTLY")
29+
configure_file(${PULSAR_CLIENT_CPP_DIR}/templates/Version.h.in ${PULSAR_CLIENT_CPP_DIR}/include/pulsar/Version.h @ONLY)
30+
31+
set(LIB_AUTOGEN_DIR ${CMAKE_CURRENT_LIST_DIR}/generated/lib)
32+
set(PROTO_SOURCES
33+
${LIB_AUTOGEN_DIR}/PulsarApi.pb.cc
34+
${LIB_AUTOGEN_DIR}/PulsarApi.pb.h)
35+
36+
file(GLOB PULSAR_SOURCES
37+
${PULSAR_CLIENT_CPP_DIR}/lib/*.cc
38+
${PULSAR_CLIENT_CPP_DIR}/lib/*.h
39+
${PULSAR_CLIENT_CPP_DIR}/lib/lz4/*.cc
40+
${PULSAR_CLIENT_CPP_DIR}/lib/lz4/*.h
41+
${PULSAR_CLIENT_CPP_DIR}/lib/checksum/*.cc
42+
${PULSAR_CLIENT_CPP_DIR}/lib/checksum/*.h
43+
${PULSAR_CLIENT_CPP_DIR}/lib/stats/*.cc
44+
${PULSAR_CLIENT_CPP_DIR}/lib/stats/*.h
45+
${PULSAR_CLIENT_CPP_DIR}/lib/c/*.cc
46+
${PULSAR_CLIENT_CPP_DIR}/lib/c/*.h
47+
${PULSAR_CLIENT_CPP_DIR}/lib/auth/*.cc
48+
${PULSAR_CLIENT_CPP_DIR}/lib/auth/*.h
49+
${PULSAR_CLIENT_CPP_DIR}/lib/auth/athenz/*.cc
50+
${PULSAR_CLIENT_CPP_DIR}/lib/auth/athenz/*.h)
51+
52+
set(PULSAR_SOURCES ${PULSAR_SOURCES} ${PROTO_SOURCES})
53+
54+
add_library(_pulsar ${PULSAR_SOURCES})
55+
add_library(ch_contrib::pulsar ALIAS _pulsar)
56+
set_target_properties (_pulsar PROPERTIES VERSION ${PULSAR_CLIENT_VERSION})
57+
58+
target_include_directories(_pulsar SYSTEM PUBLIC "${PULSAR_CLIENT_CPP_DIR}/include")
59+
target_include_directories(_pulsar SYSTEM PUBLIC "${PULSAR_CLIENT_CPP_DIR}")
60+
target_include_directories(_pulsar SYSTEM PUBLIC "${LIB_AUTOGEN_DIR}")
61+
62+
target_link_libraries(_pulsar PRIVATE boost::headers_only)
63+
target_link_libraries(_pulsar PRIVATE ch_contrib::curl)
64+
target_link_libraries(_pulsar
65+
PRIVATE
66+
ch_contrib::lz4
67+
ch_contrib::zlib
68+
ch_contrib::zstd
69+
OpenSSL::Crypto
70+
OpenSSL::SSL
71+
ch_contrib::protobuf
72+
ch_contrib::snappy
73+
)

contrib/pulsar-cmake/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## About the `generated` folder ##
2+
3+
In order to build pulsar-client-cpp, it requires `protoc` to generate the C++ code for `PulsarApi.proto`, which just unnecessarily complicates the build tool chain (for us). And also, the bigger problem is that, currently, `proton` still uses a out-of-date protobuf library, thus it requires an old version of `protoc` to generate the code. So we simply just pre-generated the source code from the Protobuf file and hosted the code directly.

0 commit comments

Comments
 (0)