@@ -4,80 +4,88 @@ set -eux -o pipefail
44
55# === Auto setup defaults ===
66
7- DB= " ${DB:- cassandra} "
8- SKIP_SCHEMA_SETUP= " ${SKIP_SCHEMA_SETUP:- false} "
9- SKIP_DB_CREATE= " ${SKIP_DB_CREATE:- false} "
7+ : " ${DB:= cassandra} "
8+ : " ${SKIP_SCHEMA_SETUP:= false} "
9+ : " ${SKIP_DB_CREATE:= false} "
1010
1111# Cassandra
12- KEYSPACE= " ${KEYSPACE:- temporal} "
13- VISIBILITY_KEYSPACE= " ${VISIBILITY_KEYSPACE:- temporal_visibility} "
14-
15- CASSANDRA_SEEDS= " ${CASSANDRA_SEEDS:- } "
16- CASSANDRA_PORT= " ${CASSANDRA_PORT:- 9042} "
17- CASSANDRA_USER= " ${CASSANDRA_USER:- } "
18- CASSANDRA_PASSWORD= " ${CASSANDRA_PASSWORD:- } "
19- CASSANDRA_TLS_ENABLED= " ${CASSANDRA_TLS_ENABLED:- } "
20- CASSANDRA_CERT= " ${CASSANDRA_CERT:- } "
21- CASSANDRA_CERT_KEY= " ${CASSANDRA_CERT_KEY:- } "
22- CASSANDRA_CA= " ${CASSANDRA_CA:- } "
23- CASSANDRA_REPLICATION_FACTOR= " ${CASSANDRA_REPLICATION_FACTOR:- 1} "
12+ : " ${KEYSPACE:= temporal} "
13+ : " ${VISIBILITY_KEYSPACE:= temporal_visibility} "
14+
15+ : " ${CASSANDRA_SEEDS:= } "
16+ : " ${CASSANDRA_PORT:= 9042} "
17+ : " ${CASSANDRA_USER:= } "
18+ : " ${CASSANDRA_PASSWORD:= } "
19+ : " ${CASSANDRA_TLS_ENABLED:= } "
20+ : " ${CASSANDRA_CERT:= } "
21+ : " ${CASSANDRA_CERT_KEY:= } "
22+ : " ${CASSANDRA_CA:= } "
23+ : " ${CASSANDRA_REPLICATION_FACTOR:= 1} "
2424
2525# MySQL/PostgreSQL
26- DBNAME= " ${DBNAME:- temporal} "
27- VISIBILITY_DBNAME= " ${VISIBILITY_DBNAME:- temporal_visibility} "
28- DB_PORT= " ${DB_PORT:- 3306} "
26+ : " ${DBNAME:= temporal} "
27+ : " ${VISIBILITY_DBNAME:= temporal_visibility} "
28+ : " ${DB_PORT:= 3306} "
2929
30- MYSQL_SEEDS= " ${MYSQL_SEEDS:- } "
31- MYSQL_USER= " ${MYSQL_USER:- } "
32- MYSQL_PWD= " ${MYSQL_PWD:- } "
33- MYSQL_TX_ISOLATION_COMPAT= " ${MYSQL_TX_ISOLATION_COMPAT:- false} "
30+ : " ${MYSQL_SEEDS:= } "
31+ : " ${MYSQL_USER:= } "
32+ : " ${MYSQL_PWD:= } "
33+ : " ${MYSQL_TX_ISOLATION_COMPAT:= false} "
3434
35- POSTGRES_SEEDS= " ${POSTGRES_SEEDS:- } "
36- POSTGRES_USER= " ${POSTGRES_USER:- } "
37- POSTGRES_PWD= " ${POSTGRES_PWD:- } "
35+ : " ${POSTGRES_SEEDS:= } "
36+ : " ${POSTGRES_USER:= } "
37+ : " ${POSTGRES_PWD:= } "
3838
3939# Elasticsearch
40- ENABLE_ES= " ${ENABLE_ES:- false} "
41- ES_SCHEME= " ${ES_SCHEME:- http} "
42- ES_SEEDS= " ${ES_SEEDS:- } "
43- ES_PORT= " ${ES_PORT:- 9200} "
44- ES_USER= " ${ES_USER:- } "
45- ES_PWD= " ${ES_PWD:- } "
46- ES_VERSION= " ${ES_VERSION:- v7} "
47- ES_VIS_INDEX= " ${ES_VIS_INDEX:- temporal_visibility_v1_dev} "
48- ES_SCHEMA_SETUP_TIMEOUT_IN_SECONDS= " ${ES_SCHEMA_SETUP_TIMEOUT_IN_SECONDS:- 0} "
40+ : " ${ENABLE_ES:= false} "
41+ : " ${ES_SCHEME:= http} "
42+ : " ${ES_SEEDS:= } "
43+ : " ${ES_PORT:= 9200} "
44+ : " ${ES_USER:= } "
45+ : " ${ES_PWD:= } "
46+ : " ${ES_VERSION:= v7} "
47+ : " ${ES_VIS_INDEX:= temporal_visibility_v1_dev} "
48+ : " ${ES_SCHEMA_SETUP_TIMEOUT_IN_SECONDS:= 0} "
4949
5050# Server setup
51- TEMPORAL_CLI_ADDRESS= " ${TEMPORAL_CLI_ADDRESS:- } "
51+ : " ${TEMPORAL_CLI_ADDRESS:= } "
5252
53- SKIP_DEFAULT_NAMESPACE_CREATION= " ${SKIP_DEFAULT_NAMESPACE_CREATION:- false} "
54- DEFAULT_NAMESPACE= " ${DEFAULT_NAMESPACE:- default} "
55- DEFAULT_NAMESPACE_RETENTION= ${DEFAULT_NAMESPACE_RETENTION:- 1}
53+ : " ${SKIP_DEFAULT_NAMESPACE_CREATION:= false} "
54+ : " ${DEFAULT_NAMESPACE:= default} "
55+ : " ${DEFAULT_NAMESPACE_RETENTION:= 1} "
5656
57- SKIP_ADD_CUSTOM_SEARCH_ATTRIBUTES=" ${SKIP_ADD_CUSTOM_SEARCH_ATTRIBUTES:- false} "
57+ : " ${SKIP_ADD_CUSTOM_SEARCH_ATTRIBUTES:= false} "
58+
59+ # === Helper functions ===
60+
61+ die () {
62+ echo " $* " 1>&2
63+ exit 1
64+ }
5865
5966# === Main database functions ===
6067
6168validate_db_env () {
62- if [ " ${DB} " == " mysql" ]; then
63- if [ -z " ${MYSQL_SEEDS} " ]; then
64- echo " MYSQL_SEEDS env must be set if DB is ${DB} ."
65- exit 1
66- fi
67- elif [ " ${DB} " == " postgresql" ]; then
68- if [ -z " ${POSTGRES_SEEDS} " ]; then
69- echo " POSTGRES_SEEDS env must be set if DB is ${DB} ."
70- exit 1
71- fi
72- elif [ " ${DB} " == " cassandra" ]; then
73- if [ -z " ${CASSANDRA_SEEDS} " ]; then
74- echo " CASSANDRA_SEEDS env must be set if DB is ${DB} ."
75- exit 1
76- fi
77- else
78- echo " Unsupported DB type: ${DB} ."
79- exit 1
80- fi
69+ case ${DB} in
70+ mysql)
71+ if [[ -z ${MYSQL_SEEDS} ]]; then
72+ die " MYSQL_SEEDS env must be set if DB is ${DB} ."
73+ fi
74+ ;;
75+ postgresql)
76+ if [[ -z ${POSTGRES_SEEDS} ]]; then
77+ die " POSTGRES_SEEDS env must be set if DB is ${DB} ."
78+ fi
79+ ;;
80+ cassandra)
81+ if [[ -z ${CASSANDRA_SEEDS} ]]; then
82+ die " CASSANDRA_SEEDS env must be set if DB is ${DB} ."
83+ fi
84+ ;;
85+ * )
86+ die " Unsupported DB type: ${DB} ."
87+ ;;
88+ esac
8189}
8290
8391wait_for_cassandra () {
@@ -117,16 +125,20 @@ wait_for_postgres() {
117125}
118126
119127wait_for_db () {
120- if [ " ${DB} " == " mysql" ]; then
121- wait_for_mysql
122- elif [ " ${DB} " == " postgresql" ]; then
123- wait_for_postgres
124- elif [ " ${DB} " == " cassandra" ]; then
125- wait_for_cassandra
126- else
127- echo " Unsupported DB type: ${DB} ."
128- exit 1
129- fi
128+ case ${DB} in
129+ mysql)
130+ wait_for_mysql
131+ ;;
132+ postgresql)
133+ wait_for_postgres
134+ ;;
135+ cassandra)
136+ wait_for_cassandra
137+ ;;
138+ * )
139+ die " Unsupported DB type: ${DB} ."
140+ ;;
141+ esac
130142}
131143
132144setup_cassandra_schema () {
@@ -141,14 +153,14 @@ setup_cassandra_schema() {
141153 { export CASSANDRA_PASSWORD=${CASSANDRA_PASSWORD} ; } 2> /dev/null
142154
143155 SCHEMA_DIR=${TEMPORAL_HOME} /schema/cassandra/temporal/versioned
144- if [ " ${SKIP_DB_CREATE} " != " true" ]; then
156+ if [[ ${SKIP_DB_CREATE} != true ] ]; then
145157 temporal-cassandra-tool --ep " ${CASSANDRA_SEEDS} " create -k " ${KEYSPACE} " --rf " ${CASSANDRA_REPLICATION_FACTOR} "
146158 fi
147159 temporal-cassandra-tool --ep " ${CASSANDRA_SEEDS} " -k " ${KEYSPACE} " setup-schema -v 0.0
148160 temporal-cassandra-tool --ep " ${CASSANDRA_SEEDS} " -k " ${KEYSPACE} " update-schema -d " ${SCHEMA_DIR} "
149161
150162 VISIBILITY_SCHEMA_DIR=${TEMPORAL_HOME} /schema/cassandra/visibility/versioned
151- if [ " ${SKIP_DB_CREATE} " != " true" ]; then
163+ if [[ ${SKIP_DB_CREATE} != true ] ]; then
152164 temporal-cassandra-tool --ep " ${CASSANDRA_SEEDS} " create -k " ${VISIBILITY_KEYSPACE} " --rf " ${CASSANDRA_REPLICATION_FACTOR} "
153165 fi
154166 temporal-cassandra-tool --ep " ${CASSANDRA_SEEDS} " -k " ${VISIBILITY_KEYSPACE} " setup-schema -v 0.0
@@ -159,21 +171,21 @@ setup_mysql_schema() {
159171 # TODO (alex): Remove exports
160172 { export SQL_PASSWORD=${MYSQL_PWD} ; } 2> /dev/null
161173
162- if [ " ${MYSQL_TX_ISOLATION_COMPAT} " == " true" ]; then
174+ if [[ ${MYSQL_TX_ISOLATION_COMPAT} == true ] ]; then
163175 MYSQL_CONNECT_ATTR=(--connect-attributes " tx_isolation=READ-COMMITTED" )
164176 else
165177 MYSQL_CONNECT_ATTR=()
166178 fi
167179
168180 SCHEMA_DIR=${TEMPORAL_HOME} /schema/mysql/v57/temporal/versioned
169- if [ " ${SKIP_DB_CREATE} " != " true" ]; then
181+ if [[ ${SKIP_DB_CREATE} != true ] ]; then
170182 temporal-sql-tool --ep " ${MYSQL_SEEDS} " -u " ${MYSQL_USER} " " ${MYSQL_CONNECT_ATTR[@]} " create --db " ${DBNAME} "
171183 fi
172184 temporal-sql-tool --ep " ${MYSQL_SEEDS} " -u " ${MYSQL_USER} " " ${MYSQL_CONNECT_ATTR[@]} " --db " ${DBNAME} " setup-schema -v 0.0
173185 temporal-sql-tool --ep " ${MYSQL_SEEDS} " -u " ${MYSQL_USER} " " ${MYSQL_CONNECT_ATTR[@]} " --db " ${DBNAME} " update-schema -d " ${SCHEMA_DIR} "
174186
175187 VISIBILITY_SCHEMA_DIR=${TEMPORAL_HOME} /schema/mysql/v57/visibility/versioned
176- if [ " ${SKIP_DB_CREATE} " != " true" ]; then
188+ if [[ ${SKIP_DB_CREATE} != true ] ]; then
177189 temporal-sql-tool --ep " ${MYSQL_SEEDS} " -u " ${MYSQL_USER} " " ${MYSQL_CONNECT_ATTR[@]} " create --db " ${VISIBILITY_DBNAME} "
178190 fi
179191 temporal-sql-tool --ep " ${MYSQL_SEEDS} " -u " ${MYSQL_USER} " " ${MYSQL_CONNECT_ATTR[@]} " --db " ${VISIBILITY_DBNAME} " setup-schema -v 0.0
@@ -193,33 +205,39 @@ setup_postgres_schema() {
193205 temporal-sql-tool --plugin postgres --ep " ${POSTGRES_SEEDS} " -u " ${POSTGRES_USER} " -p " ${DB_PORT} " --db " ${DBNAME} " update-schema -d " ${SCHEMA_DIR} "
194206
195207 VISIBILITY_SCHEMA_DIR=${TEMPORAL_HOME} /schema/postgresql/v96/visibility/versioned
196- if [ " ${VISIBILITY_DBNAME} " != " ${POSTGRES_USER} " ] && [ " ${SKIP_DB_CREATE} " != " true" ]; then
208+ if [[ ${VISIBILITY_DBNAME} != " ${POSTGRES_USER} " && ${SKIP_DB_CREATE} != true ] ]; then
197209 temporal-sql-tool --plugin postgres --ep " ${POSTGRES_SEEDS} " -u " ${POSTGRES_USER} " -p " ${DB_PORT} " create --db " ${VISIBILITY_DBNAME} "
198210 fi
199211 temporal-sql-tool --plugin postgres --ep " ${POSTGRES_SEEDS} " -u " ${POSTGRES_USER} " -p " ${DB_PORT} " --db " ${VISIBILITY_DBNAME} " setup-schema -v 0.0
200212 temporal-sql-tool --plugin postgres --ep " ${POSTGRES_SEEDS} " -u " ${POSTGRES_USER} " -p " ${DB_PORT} " --db " ${VISIBILITY_DBNAME} " update-schema -d " ${VISIBILITY_SCHEMA_DIR} "
201213}
202214
203215setup_schema () {
204- if [ " ${DB} " == " mysql" ]; then
205- echo ' Setup MySQL schema.'
206- setup_mysql_schema
207- elif [ " ${DB} " == " postgresql" ]; then
208- echo ' Setup PostgreSQL schema.'
209- setup_postgres_schema
210- else
211- echo ' Setup Cassandra schema.'
212- setup_cassandra_schema
213- fi
216+ case ${DB} in
217+ mysql)
218+ echo ' Setup MySQL schema.'
219+ setup_mysql_schema
220+ ;;
221+ postgresql)
222+ echo ' Setup PostgreSQL schema.'
223+ setup_postgres_schema
224+ ;;
225+ cassandra)
226+ echo ' Setup Cassandra schema.'
227+ setup_cassandra_schema
228+ ;;
229+ * )
230+ die " Unsupported DB type: ${DB} ."
231+ ;;
232+ esac
214233}
215234
216235# === Elasticsearch functions ===
217236
218237validate_es_env () {
219- if [ " ${ENABLE_ES} " == " true" ]; then
220- if [ -z " ${ES_SEEDS} " ]; then
221- echo " ES_SEEDS env must be set if ENABLE_ES is ${ENABLE_ES} "
222- exit 1
238+ if [[ ${ENABLE_ES} == true ]]; then
239+ if [[ -z ${ES_SEEDS} ]]; then
240+ die " ES_SEEDS env must be set if ENABLE_ES is ${ENABLE_ES} "
223241 fi
224242 fi
225243}
@@ -229,10 +247,10 @@ wait_for_es() {
229247
230248 ES_SERVER=" ${ES_SCHEME} ://${ES_SEEDS%% ,* } :${ES_PORT} "
231249
232- until curl --silent --fail --user " ${ES_USER} " :" ${ES_PWD} " " ${ES_SERVER} " > /dev/null 2>&1 ; do
250+ until curl --silent --fail --user " ${ES_USER} " :" ${ES_PWD} " " ${ES_SERVER} " >& /dev/null; do
233251 DURATION=${SECONDS}
234252
235- if [ " ${ES_SCHEMA_SETUP_TIMEOUT_IN_SECONDS} " -gt 0 ] && [ ${DURATION} -ge " ${ES_SCHEMA_SETUP_TIMEOUT_IN_SECONDS} " ]; then
253+ if [[ ${ES_SCHEMA_SETUP_TIMEOUT_IN_SECONDS} -gt 0 && ${DURATION} -ge " ${ES_SCHEMA_SETUP_TIMEOUT_IN_SECONDS} " ] ]; then
236254 echo ' WARNING: timed out waiting for Elasticsearch to start up. Skipping index creation.'
237255 return ;
238256 fi
@@ -290,30 +308,30 @@ add_custom_search_attributes() {
290308setup_server (){
291309 echo " Temporal CLI address: ${TEMPORAL_CLI_ADDRESS} ."
292310
293- until tctl cluster health | grep SERVING; do
311+ until tctl cluster health | grep -q SERVING; do
294312 echo " Waiting for Temporal server to start..."
295313 sleep 1
296314 done
297315 echo " Temporal server started."
298316
299- if [ " ${SKIP_DEFAULT_NAMESPACE_CREATION} " != " true" ]; then
317+ if [[ ${SKIP_DEFAULT_NAMESPACE_CREATION} != true ] ]; then
300318 register_default_namespace
301319 fi
302320
303- if [ " ${SKIP_ADD_CUSTOM_SEARCH_ATTRIBUTES} " != " true" ]; then
321+ if [[ ${SKIP_ADD_CUSTOM_SEARCH_ATTRIBUTES} != true ] ]; then
304322 add_custom_search_attributes
305323 fi
306324}
307325
308326# === Main ===
309327
310- if [ " ${SKIP_SCHEMA_SETUP} " != " true" ]; then
328+ if [[ ${SKIP_SCHEMA_SETUP} != true ] ]; then
311329 validate_db_env
312330 wait_for_db
313331 setup_schema
314332fi
315333
316- if [ " ${ENABLE_ES} " == " true" ]; then
334+ if [[ ${ENABLE_ES} == true ] ]; then
317335 validate_es_env
318336 wait_for_es
319337 setup_es_index
0 commit comments