Imported Upstream version 1.41.0
[platform/upstream/grpc.git] / tools / internal_ci / linux / grpc_e2e_performance_v2.sh
1 #!/usr/bin/env bash
2 # Copyright 2021 The gRPC Authors
3 #
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
7 #
8 #     http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 set -ex
16
17 # Enter the gRPC repo root.
18 cd "$(dirname "$0")/../../.."
19
20 source tools/internal_ci/helper_scripts/prepare_build_linux_rc
21
22 # This is to ensure we can push and pull images from gcr.io. We do not
23 # necessarily need it to run load tests, but will need it when we employ
24 # pre-built images in the optimization.
25 gcloud auth configure-docker
26
27 # Connect to benchmarks-prod2 cluster.
28 gcloud config set project grpc-testing
29 gcloud container clusters get-credentials benchmarks-prod2 \
30     --zone us-central1-b --project grpc-testing
31
32 # Set up environment variables.
33 LOAD_TEST_PREFIX="${KOKORO_BUILD_INITIATOR}"
34 # BEGIN differentiate experimental configuration from master configuration.
35 if [[ "${KOKORO_BUILD_INITIATOR}" == kokoro ]]; then
36     LOAD_TEST_PREFIX=kokoro-test
37 fi
38 BIGQUERY_TABLE_8CORE=e2e_benchmarks.experimental_results
39 BIGQUERY_TABLE_32CORE=e2e_benchmarks.experimental_results_32core
40 # END differentiate experimental configuration from master configuration.
41 CLOUD_LOGGING_URL="https://source.cloud.google.com/results/invocations/${KOKORO_BUILD_ID}"
42 PREBUILT_IMAGE_PREFIX="gcr.io/grpc-testing/e2etesting/pre_built_workers/${LOAD_TEST_PREFIX}"
43 UNIQUE_IDENTIFIER="$(date +%Y%m%d%H%M%S)"
44 ROOT_DIRECTORY_OF_DOCKERFILES="../test-infra/containers/pre_built_workers/"
45 # Head of the workspace checked out by Kokoro.
46 GRPC_GITREF="$(git show --format="%H" --no-patch)"
47 # Prebuilt workers for core languages are always built from grpc/grpc.
48 if [[ "${KOKORO_GITHUB_COMMIT_URL%/*}" == "https://github.com/grpc/grpc/commit" ]]; then
49     GRPC_CORE_GITREF="${KOKORO_GIT_COMMIT}"
50 else
51     GRPC_CORE_GITREF="$(git ls-remote https://github.com/grpc/grpc.git master | cut -f1)"
52 fi
53 GRPC_GO_GITREF="$(git ls-remote https://github.com/grpc/grpc-go.git master | cut -f1)"
54 GRPC_JAVA_GITREF="$(git ls-remote https://github.com/grpc/grpc-java.git master | cut -f1)"
55 # Kokoro jobs run on dedicated pools.
56 DRIVER_POOL=drivers-ci
57 WORKER_POOL_8CORE=workers-8core-ci
58 WORKER_POOL_32CORE=workers-32core-ci
59
60 # Update go version.
61 TEST_INFRA_GOVERSION=go1.17
62 go get "golang.org/dl/${TEST_INFRA_GOVERSION}"
63 "${TEST_INFRA_GOVERSION}" download
64
65 # Clone test-infra repository to one upper level directory than grpc.
66 pushd ..
67 git clone --recursive https://github.com/grpc/test-infra.git
68 cd test-infra
69 make GOCMD="${TEST_INFRA_GOVERSION}" all-tools
70 popd
71
72 # Build test configurations.
73 buildConfigs() {
74     local -r pool="$1"
75     local -r table="$2"
76     shift 2
77     tools/run_tests/performance/loadtest_config.py "$@" \
78         -t ./tools/run_tests/performance/templates/loadtest_template_prebuilt_all_languages.yaml \
79         -s driver_pool="${DRIVER_POOL}" -s driver_image= \
80         -s client_pool="${pool}" -s server_pool="${pool}" \
81         -s big_query_table="${table}" -s timeout_seconds=900 \
82         -s prebuilt_image_prefix="${PREBUILT_IMAGE_PREFIX}" \
83         -s prebuilt_image_tag="${UNIQUE_IDENTIFIER}" \
84         -a ci_buildNumber="${KOKORO_BUILD_NUMBER}" \
85         -a ci_buildUrl="${CLOUD_LOGGING_URL}" \
86         -a ci_jobName="${KOKORO_JOB_NAME}" \
87         -a ci_gitCommit="${GRPC_GITREF}" \
88         -a ci_gitActualCommit="${KOKORO_GIT_COMMIT}" \
89         --prefix="${LOAD_TEST_PREFIX}" -u "${UNIQUE_IDENTIFIER}" -u "${pool}" \
90         -a pool="${pool}" --category=scalable \
91         --allow_client_language=c++ --allow_server_language=c++ \
92         -o "./loadtest_with_prebuilt_workers_${pool}.yaml"
93 }
94
95 buildConfigs "${WORKER_POOL_8CORE}" "${BIGQUERY_TABLE_8CORE}" -l c++ -l csharp -l go -l java -l php7 -l php7_protobuf_c -l python -l ruby
96 buildConfigs "${WORKER_POOL_32CORE}" "${BIGQUERY_TABLE_32CORE}" -l c++ -l csharp -l go -l java
97
98 # Delete prebuilt images on exit.
99 deleteImages() {
100     echo "deleting images on exit"
101     ../test-infra/bin/delete_prebuilt_workers \
102     -p "${PREBUILT_IMAGE_PREFIX}" \
103     -t "${UNIQUE_IDENTIFIER}"
104 }
105 trap deleteImages EXIT
106
107 # Build and push prebuilt images for running tests.
108 time ../test-infra/bin/prepare_prebuilt_workers \
109     -l "cxx:${GRPC_CORE_GITREF}" \
110     -l "csharp:${GRPC_CORE_GITREF}" \
111     -l "go:${GRPC_GO_GITREF}" \
112     -l "java:${GRPC_JAVA_GITREF}" \
113     -l "php7:${GRPC_CORE_GITREF}" \
114     -l "python:${GRPC_CORE_GITREF}" \
115     -l "ruby:${GRPC_CORE_GITREF}" \
116     -p "${PREBUILT_IMAGE_PREFIX}" \
117     -t "${UNIQUE_IDENTIFIER}" \
118     -r "${ROOT_DIRECTORY_OF_DOCKERFILES}"
119
120 # Create reports directories.
121 mkdir -p "runner/${WORKER_POOL_8CORE}" "runner/${WORKER_POOL_32CORE}"
122
123 # Run tests.
124 time ../test-infra/bin/runner \
125     -i "../grpc/loadtest_with_prebuilt_workers_${WORKER_POOL_8CORE}.yaml" \
126     -i "../grpc/loadtest_with_prebuilt_workers_${WORKER_POOL_32CORE}.yaml" \
127     -c "${WORKER_POOL_8CORE}:2" -c "${WORKER_POOL_32CORE}:2" \
128     -o "runner/sponge_log.xml"