-
Notifications
You must be signed in to change notification settings - Fork 57
/
Copy pathe2e.sh
executable file
·121 lines (104 loc) · 3.49 KB
/
e2e.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/env bash
# fail on error
set -o errexit
set -o nounset
set -o pipefail
readonly SCRIPT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)"
readonly PROJECT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." >/dev/null && pwd)"
# This file contatins psql views with complex types to validate and troubleshoot dbeam
PSQL_DOCKER_IMAGE=postgres:16
PSQL_USER=postgres
PSQL_PASSWORD=tempandnotasecret
PSQL_DB=dbeam_test
DOCKER_NETWORK=dbeam1-network
JAVA_DOCKER_IMAGE=gcr.io/distroless/java17-debian12
startPostgres() {
set -o xtrace
docker --version
docker network create "$DOCKER_NETWORK" || true
mkdir -p /tmp/pgdata
docker run --detach --name dbeam-postgres \
--net "$DOCKER_NETWORK" \
--env "POSTGRES_DB=dbeam_test" \
--env "POSTGRES_PASSWORD=$PSQL_PASSWORD" \
--mount="type=bind,source=/tmp/pgdata,target=/var/lib/postgresql/data" \
--publish="54321:5432/tcp" "$PSQL_DOCKER_IMAGE" || docker start dbeam-postgres
sleep 1
docker ps
docker logs dbeam-postgres
# https://stackoverflow.com/questions/35069027/docker-wait-for-postgresql-to-be-running
time docker run --interactive --rm \
--net "$DOCKER_NETWORK" \
--env "PGPASSWORD=$PSQL_PASSWORD" \
"$PSQL_DOCKER_IMAGE" \
timeout 45s bash -xc 'until psql -h dbeam-postgres -U postgres dbeam_test -c "select 1"; do sleep 1; done; echo "psql up and running.."'
sleep 3
time docker run --interactive --rm \
--net "$DOCKER_NETWORK" \
--env "PGPASSWORD=$PSQL_PASSWORD" \
"$PSQL_DOCKER_IMAGE" \
timeout 30s psql -h dbeam-postgres -U postgres dbeam_test < "$SCRIPT_PATH/ddl.sql"
timeout 1 bash -c "cat < /dev/null > /dev/tcp/0.0.0.0/54321" && echo "success"
}
dockerClean() {
docker rm -f dbeam-postgres
docker network rm "$DOCKER_NETWORK"
}
JAVA_OPTS=(
-XX:+UseParallelGC
-Xmx1g
-Xms1g
)
pack() {
java -version
# create a fat jar
(cd "$PROJECT_PATH"; mvn package -Ppack -DskipTests -Dmaven.test.skip=true -Dmaven.site.skip=true -Dmaven.javadoc.skip=true)
}
run_docker_dbeam() {
time docker run --interactive --rm \
--net="$DOCKER_NETWORK" \
--mount="type=bind,source=$PROJECT_PATH/dbeam-core/target,target=/dbeam" \
--mount="type=bind,source=$SCRIPT_PATH,target=$SCRIPT_PATH" \
--memory=1G \
--entrypoint=/usr/bin/java \
"$JAVA_DOCKER_IMAGE" \
"${JAVA_OPTS[@]}" -cp /dbeam/dbeam-core-shaded.jar com.spotify.dbeam.jobs.BenchJdbcAvroJob "$@"
}
runDBeamDockerCon() {
OUTPUT="$SCRIPT_PATH/results/testn/$(date +%FT%H%M%S)/"
set -o xtrace
time \
run_docker_dbeam \
--skipPartitionCheck \
--targetParallelism=1 \
"--connectionUrl=jdbc:postgresql://dbeam-postgres:5432/$PSQL_DB?binaryTransfer=${BINARY_TRANSFER:-false}" \
"--username=$PSQL_USER" \
"--password=$PSQL_PASSWORD" \
"--table=${table:-demo_table}" \
"--partition=$(date +%F)" \
"--output=$OUTPUT" \
"--minRows=${minRows:-1000000}" \
"$@" 2>&1 | tee -a /tmp/debeam_e2e.log
}
runSuite() {
table=demo_table
BINARY_TRANSFER='false' runDBeamDockerCon --executions=3 --avroCodec=deflate1
BINARY_TRANSFER='false' runDBeamDockerCon --executions=3 --avroCodec=zstandard1
BINARY_TRANSFER='false' runDBeamDockerCon --executions=3 --avroCodec=deflate1 --queryParallelism=5 --splitColumn=row_number
}
light() {
pack
table=demo_table
BINARY_TRANSFER='false' runDBeamDockerCon --executions=3 --avroCodec=deflate1
}
main() {
if [[ $# -gt 0 ]]; then
"$@"
else
# pack # assume pack already ran before
time startPostgres
runSuite
dockerClean
fi
}
main "$@"