Skip to content

Commit 9e4d583

Browse files
authored
[C++ SDK] Added SLO workload dockerfile (#573)
1 parent cc36d77 commit 9e4d583

File tree

9 files changed

+208
-2
lines changed

9 files changed

+208
-2
lines changed

.devcontainer/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 10000 && \
3535

3636
# Install abseil-cpp
3737
ENV ABSEIL_CPP_VERSION=20230802.0
38-
ENV ABSEIL_CPP_INSTALL_DIR=~/ydb_deps/abseil-cpp
38+
ENV ABSEIL_CPP_INSTALL_DIR=~/ydb_deps/absl
3939
RUN wget -O abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz https://github.com/abseil/abseil-cpp/archive/refs/tags/${ABSEIL_CPP_VERSION}.tar.gz && \
4040
tar -xvzf abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz && cd abseil-cpp-${ABSEIL_CPP_VERSION} && \
4141
mkdir build && cd build && \

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,4 @@ llvm.sh
8282
CMakeUserPresets.json
8383

8484
# Dev Containers
85-
!.devcontainer/Dockerfile
85+
!Dockerfile

cmake/testing.cmake

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,24 @@ FetchContent_MakeAvailable(googletest)
1313

1414
include(GoogleTest)
1515

16+
# Set opentelemetry-cpp options as CACHE variables so they're visible to FetchContent
17+
set(WITH_OTLP_HTTP ON CACHE BOOL "" FORCE)
18+
set(WITH_STL CXX20 CACHE STRING "" FORCE)
19+
set(WITH_EXAMPLES OFF CACHE BOOL "" FORCE)
20+
set(WITH_FUNC_TESTS OFF CACHE BOOL "" FORCE)
21+
set(WITH_ABI_VERSION_1 OFF CACHE BOOL "" FORCE)
22+
set(WITH_ABI_VERSION_2 ON CACHE BOOL "" FORCE)
23+
set(WITH_BENCHMARK OFF CACHE BOOL "" FORCE)
24+
set(BUILD_TESTING OFF CACHE BOOL "" FORCE)
25+
26+
FetchContent_Declare(
27+
opentelemetry-cpp
28+
GIT_REPOSITORY https://github.com/open-telemetry/opentelemetry-cpp.git
29+
GIT_TAG v1.24.0
30+
)
31+
32+
FetchContent_MakeAvailable(opentelemetry-cpp)
33+
1634
function(add_ydb_test)
1735
set(opts GTEST)
1836
set(oneval_args NAME WORKING_DIRECTORY OUTPUT_DIRECTORY)

library/cpp/openssl/io/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ target_link_libraries(openssl-io
77
OpenSSL::SSL
88
openssl-init
99
openssl-method
10+
resource
1011
)
1112

1213
target_sources(openssl-io PRIVATE

tests/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
add_subdirectory(integration)
2+
add_subdirectory(slo_workloads)
23
add_subdirectory(unit)

tests/slo_workloads/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
add_subdirectory(key_value)
2+
add_subdirectory(utils)

tests/slo_workloads/Dockerfile

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
FROM ubuntu:22.04
2+
3+
ARG PRESET=release-test-clang
4+
5+
# Install software-properties-common for add-apt-repository
6+
RUN apt-get -y update && apt-get -y install software-properties-common && add-apt-repository ppa:ubuntu-toolchain-r/test
7+
8+
# Install C++ tools and libraries
9+
RUN apt-get -y update && apt-get -y install \
10+
git gdb wget ninja-build libidn11-dev ragel yasm libc-ares-dev libre2-dev \
11+
rapidjson-dev zlib1g-dev libxxhash-dev libzstd-dev libsnappy-dev libgtest-dev libgmock-dev \
12+
libbz2-dev liblz4-dev libdouble-conversion-dev libssl-dev libstdc++-13-dev gcc-13 g++-13 \
13+
&& apt-get clean && rm -rf /var/lib/apt/lists/*
14+
15+
# Install CMake
16+
ENV CMAKE_VERSION=3.27.7
17+
RUN wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-x86_64.sh \
18+
-q -O cmake-install.sh \
19+
&& chmod u+x cmake-install.sh \
20+
&& ./cmake-install.sh --skip-license --prefix=/usr/local \
21+
&& rm cmake-install.sh
22+
23+
# Install LLVM
24+
ENV LLVM_VERSION=16
25+
RUN wget https://apt.llvm.org/llvm.sh && \
26+
chmod u+x llvm.sh && \
27+
./llvm.sh ${LLVM_VERSION} && \
28+
rm llvm.sh
29+
30+
# Update alternatives to use clang-16 by default
31+
RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${LLVM_VERSION} 10000 && \
32+
update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-${LLVM_VERSION} 10000 && \
33+
update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${LLVM_VERSION} 10000
34+
35+
# Update alternatives to use gcc-13 by default
36+
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 10000 && \
37+
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 10000
38+
39+
# Install abseil-cpp
40+
ENV ABSEIL_CPP_VERSION=20230802.0
41+
ENV ABSEIL_CPP_INSTALL_DIR=/root/ydb_deps/absl
42+
RUN wget -O abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz https://github.com/abseil/abseil-cpp/archive/refs/tags/${ABSEIL_CPP_VERSION}.tar.gz && \
43+
tar -xvzf abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz && cd abseil-cpp-${ABSEIL_CPP_VERSION} && \
44+
mkdir build && cd build && \
45+
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DABSL_PROPAGATE_CXX_STD=ON .. && \
46+
cmake --build . --config Release && \
47+
cmake --install . --config Release --prefix ${ABSEIL_CPP_INSTALL_DIR} && \
48+
rm -rf abseil-cpp-${ABSEIL_CPP_VERSION}.tar.gz abseil-cpp-${ABSEIL_CPP_VERSION}
49+
50+
# Install protobuf
51+
ENV PROTOBUF_VERSION=3.21.12
52+
ENV PROTOBUF_INSTALL_DIR=/root/ydb_deps/protobuf
53+
RUN wget -O protobuf-${PROTOBUF_VERSION}.tar.gz https://github.com/protocolbuffers/protobuf/archive/refs/tags/v${PROTOBUF_VERSION}.tar.gz && \
54+
tar -xvzf protobuf-${PROTOBUF_VERSION}.tar.gz && cd protobuf-${PROTOBUF_VERSION} && \
55+
mkdir build && cd build && \
56+
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_INSTALL=ON -Dprotobuf_ABSL_PROVIDER=package .. && \
57+
cmake --build . --config Release && \
58+
cmake --install . --config Release --prefix ${PROTOBUF_INSTALL_DIR} && \
59+
rm -rf protobuf-${PROTOBUF_VERSION}.tar.gz protobuf-${PROTOBUF_VERSION}
60+
61+
# Install grpc
62+
ENV GRPC_VERSION=1.54.3
63+
ENV GRPC_INSTALL_DIR=/root/ydb_deps/grpc
64+
RUN wget -O grpc-${GRPC_VERSION}.tar.gz https://github.com/grpc/grpc/archive/refs/tags/v${GRPC_VERSION}.tar.gz && \
65+
tar -xvzf grpc-${GRPC_VERSION}.tar.gz && cd grpc-${GRPC_VERSION} && \
66+
mkdir build && cd build && \
67+
cmake -G Ninja -DCMAKE_PREFIX_PATH="${ABSEIL_CPP_INSTALL_DIR};${PROTOBUF_INSTALL_DIR}" \
68+
-DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 \
69+
-DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF -DgRPC_BUILD_CSHARP_EXT=OFF \
70+
-DgRPC_ZLIB_PROVIDER=package -DgRPC_CARES_PROVIDER=package -DgRPC_RE2_PROVIDER=package \
71+
-DgRPC_SSL_PROVIDER=package -DgRPC_PROTOBUF_PROVIDER=package -DgRPC_ABSL_PROVIDER=package \
72+
-DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF -DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF \
73+
-DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF -DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF -DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF .. && \
74+
cmake --build . --config Release && \
75+
cmake --install . --config Release --prefix ${GRPC_INSTALL_DIR} && \
76+
rm -rf grpc-${GRPC_VERSION}.tar.gz grpc-${GRPC_VERSION}
77+
78+
# Install base64
79+
ENV BASE64_VERSION=0.5.2
80+
ENV BASE64_INSTALL_DIR=/root/ydb_deps/base64
81+
RUN wget -O base64-${BASE64_VERSION}.tar.gz https://github.com/aklomp/base64/archive/refs/tags/v${BASE64_VERSION}.tar.gz && \
82+
tar -xvzf base64-${BASE64_VERSION}.tar.gz && cd base64-${BASE64_VERSION} && \
83+
mkdir build && cd build && \
84+
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \
85+
cmake --build . --config Release && \
86+
cmake --install . --config Release --prefix ${BASE64_INSTALL_DIR} && \
87+
rm -rf base64-${BASE64_VERSION}.tar.gz base64-${BASE64_VERSION}
88+
89+
# Install brotli
90+
ENV BROTLI_VERSION=1.1.0
91+
ENV BROTLI_INSTALL_DIR=/root/ydb_deps/brotli
92+
RUN wget -O brotli-${BROTLI_VERSION}.tar.gz https://github.com/google/brotli/archive/refs/tags/v${BROTLI_VERSION}.tar.gz && \
93+
tar -xvzf brotli-${BROTLI_VERSION}.tar.gz && cd brotli-${BROTLI_VERSION} && \
94+
mkdir build && cd build && \
95+
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \
96+
cmake --build . --config Release && \
97+
cmake --install . --config Release --prefix ${BROTLI_INSTALL_DIR} && \
98+
rm -rf brotli-${BROTLI_VERSION}.tar.gz brotli-${BROTLI_VERSION}
99+
100+
# Install jwt-cpp
101+
ENV JWT_CPP_VERSION=0.7.0
102+
ENV JWT_CPP_INSTALL_DIR=/root/ydb_deps/jwt-cpp
103+
RUN wget -O jwt-cpp-${JWT_CPP_VERSION}.tar.gz https://github.com/Thalhammer/jwt-cpp/archive/refs/tags/v${JWT_CPP_VERSION}.tar.gz && \
104+
tar -xvzf jwt-cpp-${JWT_CPP_VERSION}.tar.gz && cd jwt-cpp-${JWT_CPP_VERSION} && \
105+
mkdir build && cd build && \
106+
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .. && \
107+
cmake --build . --config Release && \
108+
cmake --install . --config Release --prefix ${JWT_CPP_INSTALL_DIR} && \
109+
rm -rf jwt-cpp-${JWT_CPP_VERSION}.tar.gz jwt-cpp-${JWT_CPP_VERSION}
110+
111+
# Install ccache 4.8.1 or above
112+
ENV CCACHE_VERSION=4.8.1
113+
RUN wget https://github.com/ccache/ccache/releases/download/v${CCACHE_VERSION}/ccache-${CCACHE_VERSION}-linux-x86_64.tar.xz \
114+
&& tar -xf ccache-${CCACHE_VERSION}-linux-x86_64.tar.xz \
115+
&& cp ccache-${CCACHE_VERSION}-linux-x86_64/ccache /usr/local/bin/ \
116+
&& rm -rf ccache-${CCACHE_VERSION}-linux-x86_64 ccache-${CCACHE_VERSION}-linux-x86_64.tar.xz
117+
118+
COPY . /ydb-cpp-sdk
119+
WORKDIR /ydb-cpp-sdk
120+
RUN rm -rf build
121+
122+
RUN cmake --preset ${PRESET}
123+
RUN cmake --build --preset default --target slo-key-value
124+
125+
ENTRYPOINT ["./build/tests/slo_workloads/key_value/slo-key-value"]
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
add_executable(slo-key-value)
2+
3+
target_link_libraries(slo-key-value PUBLIC
4+
yutil
5+
getopt
6+
slo-utils
7+
YDB-CPP-SDK::Table
8+
)
9+
10+
target_sources(slo-key-value PRIVATE
11+
create.cpp
12+
drop.cpp
13+
generate.cpp
14+
key_value.cpp
15+
main.cpp
16+
run.cpp
17+
)
18+
19+
vcs_info(slo-key-value)
20+
21+
if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64")
22+
target_link_libraries(slo-key-value PUBLIC
23+
cpuid_check
24+
)
25+
endif()
26+
27+
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
28+
target_link_options(slo-key-value PRIVATE
29+
-ldl
30+
-lrt
31+
-Wl,--no-as-needed
32+
-lpthread
33+
)
34+
elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
35+
target_link_options(slo-key-value PRIVATE
36+
-Wl,-platform_version,macos,11.0,11.0
37+
-framework
38+
CoreFoundation
39+
)
40+
endif()
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
add_library(slo-utils)
2+
3+
target_link_libraries(slo-utils PUBLIC
4+
yutil
5+
getopt
6+
YDB-CPP-SDK::Table
7+
YDB-CPP-SDK::Iam
8+
opentelemetry-cpp::metrics
9+
opentelemetry-cpp::otlp_http_metric_exporter
10+
)
11+
12+
target_sources(slo-utils PRIVATE
13+
executor.cpp
14+
generator.cpp
15+
job.cpp
16+
metrics.cpp
17+
statistics.cpp
18+
utils.cpp
19+
)

0 commit comments

Comments
 (0)