@@ -15,28 +15,37 @@ while true; do
15
15
--pg-version )
16
16
PG_VERSION=" $2 " ; shift 2 ;;
17
17
--pg-config )
18
- PG_CONFIG=" $2 " ; shift 2 ;;
18
+ # Still unsupported
19
+ PG_CONFIG=" $2 " ; shift 2;;
19
20
--db-prepared-snapshot )
21
+ # Still unsupported
20
22
DB_PREPARED_SNAPSHOT=" $2 " ; shift 2 ;;
21
23
--db-dump-path )
22
24
DB_DUMP_PATH=" $2 " ; shift 2 ;;
23
25
--after-db-init-code )
26
+ # s3 url|filename +
24
27
AFTER_DB_INIT_CODE=" $2 " ; shift 2 ;;
25
28
--workload-full-path )
29
+ # s3 url
26
30
WORKLOAD_FULL_PATH=" $2 " ; shift 2 ;;
27
31
--workload-basis-path )
32
+ # Still unsuported
28
33
WORKLOAD_BASIS_PATH=" $2 " ; shift 2 ;;
29
34
--workload-custom-sql )
35
+ # s3 url|filename +
30
36
WORKLOAD_CUSTOM_SQL=" $2 " ; shift 2 ;;
31
37
--workload-replay-speed )
32
38
WORKLOAD_REPLAY_SPEED=" $2 " ; shift 2 ;;
33
39
--target-ddl-do )
40
+ # s3 url|filename +
34
41
TARGET_DDL_DO=" $2 " ; shift 2 ;;
35
42
--target-ddl-undo )
43
+ # s3 url|filename +
36
44
TARGET_DDL_UNDO=" $2 " ; shift 2 ;;
37
45
--clean-run-only )
38
46
CLEAN_RUN_ONLY=1; shift 1 ;;
39
47
--target-config )
48
+ # s3 url|filename +
40
49
TARGET_CONFIG=" $2 " ; shift 2 ;;
41
50
--artifacts-destination )
42
51
ARTIFACTS_DESTINATION=" $2 " ; shift 2 ;;
83
92
echo " after-db-init-code: $AFTER_DB_INIT_CODE "
84
93
fi
85
94
95
+ function checkPath() {
96
+ if [ ! -v $1 ]
97
+ then
98
+ return 1
99
+ fi
100
+ eval path=\$ $1
101
+ if [[ $path =~ " s3://" ]]
102
+ then
103
+ return 0; # # do not check
104
+ fi
105
+ if [[ $path =~ " file:///" ]]
106
+ then
107
+ path=${path/ file: \/\/ / }
108
+ if [ -f $path ]
109
+ then
110
+ eval " $1 =\" $path \" " # update original variable
111
+ return 0 # file found
112
+ else
113
+ return 2 # file not found
114
+ fi
115
+ fi
116
+ if [[ $path =~ " file://" ]]
117
+ then
118
+ curdir=$( pwd)
119
+ path=$curdir /${path/ file: \/\/ / }
120
+ if [ -f $path ]
121
+ then
122
+ eval " $1 =\" $path \" " # update original variable
123
+ return 0 # file found
124
+ else
125
+ return 3 # file not found
126
+ fi
127
+ fi
128
+ if [ -f $path ]
129
+ then
130
+ return 0;
131
+ fi
132
+ return -1 # incorrect path
133
+ }
134
+
86
135
# # Check params
87
136
function checkParams() {
88
137
if ([ ! -v AWS_KEY_PAIR ] || [ ! -v AWS_KEY_PATH ])
@@ -171,6 +220,22 @@ function checkParams() {
171
220
>&2 echo " WARNING: Artifacts destination not given. Will use $DOCKER_MACHINE "
172
221
ARTIFACTS_FILENAME=$DOCKER_MACHINE
173
222
fi
223
+
224
+ [ -v WORKLOAD_FULL_PATH ] && ! checkPath WORKLOAD_FULL_PATH && >&2 echo " WARNING: file $AFTER_DB_INIT_CODE not found"
225
+
226
+ [ -v WORKLOAD_BASIS_PATH ] && ! checkPath WORKLOAD_BASIS_PATH && >&2 echo " WARNING: file $WORKLOAD_BASIS_PATH not found"
227
+
228
+ [ -v WORKLOAD_CUSTOM_SQL ] && ! checkPath WORKLOAD_CUSTOM_SQL && >&2 echo " WARNING: file $WORKLOAD_CUSTOM_SQL not found"
229
+
230
+ [ -v DB_DUMP_PATH ] && ! checkPath DB_DUMP_PATH && >&2 echo " WARNING: file $DB_DUMP_PATH not found"
231
+
232
+ [ -v AFTER_DB_INIT_CODE ] && ! checkPath AFTER_DB_INIT_CODE && >&2 echo " WARNING: file $AFTER_DB_INIT_CODE not found"
233
+
234
+ [ -v TARGET_DDL_DO ] && ! checkPath TARGET_DDL_DO && >&2 echo " WARNING: file $TARGET_DDL_DO not found"
235
+
236
+ [ -v TARGET_DDL_UNDO ] && ! checkPath TARGET_DDL_UNDO && >&2 echo " WARNING: file $TARGET_DDL_UNDO not found"
237
+
238
+ [ -v TARGET_CONFIG ] && ! checkPath TARGET_CONFIG && >&2 echo " WARNING: file $TARGET_CONFIG not found"
174
239
}
175
240
176
241
checkParams;
@@ -189,7 +254,8 @@ function waitDockerReady() {
189
254
(( STOP== 1 )) && return 0
190
255
if [ $checkPrice -eq 1 ]
191
256
then
192
- status=$( aws ec2 describe-spot-instance-requests --filters=" Name=launch.instance-type,Values=$AWS_EC2_TYPE " | jq ' .SpotInstanceRequests[] | .Status.Code' | tail -n 1 )
257
+ # status=$(aws ec2 describe-spot-instance-requests --filters="Name=launch.instance-type,Values=$AWS_EC2_TYPE" | jq '.SpotInstanceRequests[] | .Status.Code' | tail -n 1 )
258
+ status=$( aws ec2 describe-spot-instance-requests --filters=" Name=launch.instance-type,Values=$AWS_EC2_TYPE " | jq ' .SpotInstanceRequests | sort_by(.CreateTime) | .[] | .Status.Code' | tail -n 1)
193
259
if [ " $status " == " \" price-too-low\" " ]
194
260
then
195
261
echo " price-too-low" ; # this value is result of function (not message for user), will check later
@@ -264,50 +330,50 @@ function cleanup {
264
330
}
265
331
trap cleanup EXIT
266
332
267
- # # Prepare conf, queries and dump files
268
- if ([ " $TARGET_CONFIG " != " " ] && [ " $TARGET_CONFIG " != " null" ])
333
+ shopt -s expand_aliases
334
+ alias sshdo=' docker $dockerConfig exec -i pg_nancy '
335
+
336
+ # # Copy data to docker machine
337
+ docker-machine scp $S3_CFG_PATH $DOCKER_MACHINE :/home/ubuntu
338
+ sshdo cp /machine_home/.s3cfg /root/.s3cfg
339
+ sshdo s3cmd sync $DB_DUMP_PATH ./
340
+ if ([ -v TARGET_CONFIG ] && [ " $TARGET_CONFIG " != " " ])
269
341
then
270
- echo " TARGET_CONFIG is not empty: $TARGET_CONFIG "
271
- echo " $TARGET_CONFIG " > $TMP_PATH /conf_$DOCKER_MACHINE .tmp
342
+ if [[ $TARGET_CONFIG =~ " s3://" ]]; then
343
+ sshdo s3cmd sync $TARGET_CONFIG /machine_home/
344
+ else
345
+ docker-machine scp $TARGET_CONFIG $DOCKER_MACHINE :/home/ubuntu
346
+ fi
272
347
fi
273
348
274
349
if ([ -v TARGET_DDL_DO ] && [ " $TARGET_DDL_DO " != " " ])
275
350
then
276
- echo " TARGET_DDL_DO is not empty: $TARGET_DDL_DO "
277
- echo " $TARGET_DDL_DO " > $TMP_PATH /ddl_do_$DOCKER_MACHINE .sql
351
+ if [[ $TARGET_DDL_DO =~ " s3://" ]]; then
352
+ sshdo s3cmd sync $TARGET_DDL_DO /machine_home/
353
+ else
354
+ docker-machine scp $TARGET_DDL_DO $DOCKER_MACHINE :/home/ubuntu
355
+ fi
278
356
fi
279
357
280
358
if ([ -v TARGET_DDL_UNDO ] && [ " $TARGET_DDL_UNDO " != " " ])
281
359
then
282
- echo " TARGET_DDL_UNDO is not empty: $TARGET_DDL_UNDO "
283
- echo " $TARGET_DDL_UNDO " > $TMP_PATH /ddl_undo_$DOCKER_MACHINE .sql
360
+ if [[ $TARGET_DDL_UNDO =~ " s3://" ]]; then
361
+ sshdo s3cmd sync $TARGET_DDL_UNDO /machine_home/
362
+ else
363
+ docker-machine scp $TARGET_DDL_UNDO $DOCKER_MACHINE :/home/ubuntu
364
+ fi
284
365
fi
285
366
286
367
if ([ -v WORKLOAD_CUSTOM_SQL ] && [ " $WORKLOAD_CUSTOM_SQL " != " " ])
287
368
then
288
- echo " WORKLOAD_CUSTOM_SQL is not empty: $WORKLOAD_CUSTOM_SQL "
289
- echo " $WORKLOAD_CUSTOM_SQL " > $TMP_PATH /queries_custom_$DOCKER_MACHINE .sql
369
+ WORKLOAD_CUSTOM_FILENAME=$( basename $WORKLOAD_CUSTOM_SQL )
370
+ if [[ $WORKLOAD_CUSTOM_SQL =~ " s3://" ]]; then
371
+ sshdo s3cmd sync $WORKLOAD_CUSTOM_SQL /machine_home/
372
+ else
373
+ docker-machine scp $WORKLOAD_CUSTOM_SQL $DOCKER_MACHINE :/home/ubuntu
374
+ fi
290
375
fi
291
376
292
- shopt -s expand_aliases
293
- alias sshdo=' docker $dockerConfig exec -i pg_nancy '
294
-
295
- # # Copy data to docker machine
296
- docker-machine scp $S3_CFG_PATH $DOCKER_MACHINE :/home/ubuntu
297
- sshdo cp /machine_home/.s3cfg /root/.s3cfg
298
- sshdo s3cmd sync $DB_DUMP_PATH ./
299
- if [ -f " $TMP_PATH /conf_$DOCKER_MACHINE .tmp" ]; then
300
- docker-machine scp $TMP_PATH /conf_$DOCKER_MACHINE .tmp $DOCKER_MACHINE :/home/ubuntu
301
- fi
302
- if [ -f " $TMP_PATH /ddl_do_$DOCKER_MACHINE .sql" ]; then
303
- docker-machine scp $TMP_PATH /ddl_do_$DOCKER_MACHINE .sql $DOCKER_MACHINE :/home/ubuntu
304
- fi
305
- if [ -f " $TMP_PATH /ddl_undo_$DOCKER_MACHINE .sql" ]; then
306
- docker-machine scp $TMP_PATH /ddl_undo_$DOCKER_MACHINE .sql $DOCKER_MACHINE :/home/ubuntu
307
- fi
308
- if [ -f " $TMP_PATH /queries_custom_$DOCKER_MACHINE .sql" ]; then
309
- docker-machine scp $TMP_PATH /queries_custom_$DOCKER_MACHINE .sql $DOCKER_MACHINE :/home/ubuntu
310
- fi
311
377
if ([ " $WORKLOAD_FULL_PATH " != " " ] && [ " $WORKLOAD_FULL_PATH " != " null" ])
312
378
then
313
379
sshdo s3cmd sync $WORKLOAD_FULL_PATH ./
@@ -321,17 +387,25 @@ sshdo bash -c "bzcat ./$DB_DUMP_FILENAME | psql --set ON_ERROR_STOP=on -U postgr
321
387
# After init database sql code apply
322
388
if ([ -v AFTER_DB_INIT_CODE ] && [ " $AFTER_DB_INIT_CODE " != " " ])
323
389
then
324
- sshdo psql -U postgres test -c " $AFTER_DB_INIT_CODE "
390
+ AFTER_DB_INIT_CODE_FILENAME=$( basename $AFTER_DB_INIT_CODE )
391
+ if [[ $AFTER_DB_INIT_CODE =~ " s3://" ]]; then
392
+ sshdo s3cmd sync $AFTER_DB_INIT_CODE /machine_home/
393
+ else
394
+ docker-machine scp $AFTER_DB_INIT_CODE $DOCKER_MACHINE :/home/ubuntu
395
+ fi
396
+ sshdo bash -c " psql -U postgres test -E -f /machine_home/$AFTER_DB_INIT_CODE_FILENAME "
325
397
fi
326
398
# Apply DDL code
327
- echo " Apply DDL SQL code from /machine_home/ddl_do_$DOCKER_MACHINE .sql"
328
- if [ -f " $TMP_PATH /ddl_do_$DOCKER_MACHINE .sql" ]; then
329
- sshdo bash -c " psql -U postgres test -E -f /machine_home/ddl_do_$DOCKER_MACHINE .sql"
399
+ echo " Apply DDL SQL code"
400
+ if ([ -v TARGET_DDL_DO ] && [ " $TARGET_DDL_DO " != " " ]); then
401
+ TARGET_DDL_DO_FILENAME=$( basename $TARGET_DDL_DO )
402
+ sshdo bash -c " psql -U postgres test -E -f /machine_home/$TARGET_DDL_DO_FILENAME "
330
403
fi
331
404
# Apply postgres configuration
332
405
echo " Apply postgres conf from /machine_home/conf_$DOCKER_MACHINE .tmp"
333
- if [ -f " $TMP_PATH /conf_$DOCKER_MACHINE .tmp" ]; then
334
- sshdo bash -c " cat /machine_home/conf_$DOCKER_MACHINE .tmp >> /etc/postgresql/$PG_VERSION /main/postgresql.conf"
406
+ if ([ -v TARGET_CONFIG ] && [ " $TARGET_CONFIG " != " " ]); then
407
+ TARGET_CONFIG_FILENAME=$( basename $TARGET_CONFIG )
408
+ sshdo bash -c " cat /machine_home/$TARGET_CONFIG_FILENAME >> /etc/postgresql/$PG_VERSION /main/postgresql.conf"
335
409
sshdo bash -c " sudo /etc/init.d/postgresql restart"
336
410
fi
337
411
# Clear statistics and log
@@ -340,16 +414,17 @@ sshdo vacuumdb -U postgres test -j $(cat /proc/cpuinfo | grep processor | wc -l)
340
414
sshdo bash -c " echo '' > /var/log/postgresql/postgresql-$PG_VERSION -main.log"
341
415
# Execute workload
342
416
echo " Execute workload..."
343
- if ([ " $WORKLOAD_FULL_PATH " != " " ] && [ " $WORKLOAD_FULL_PATH " != " null" ])
417
+ if ([ -v WORKLOAD_FULL_PATH ] && [ " $WORKLOAD_FULL_PATH " != " " ] && [ " $WORKLOAD_FULL_PATH " != " null" ])
344
418
then
345
419
echo " Execute pgreplay queries..."
346
420
sshdo psql -U postgres test -c ' create role testuser superuser login;'
347
421
WORKLOAD_FILE_NAME=$( basename $WORKLOAD_FULL_PATH )
348
422
sshdo bash -c " pgreplay -r -j ./$WORKLOAD_FILE_NAME "
349
423
else
350
- if [ -f " $TMP_PATH /queries_custom_$DOCKER_MACHINE .sql" ]; then
424
+ if ([ -v WORKLOAD_CUSTOM_SQL ] && [ " $WORKLOAD_CUSTOM_SQL " != " " ]); then
425
+ WORKLOAD_CUSTOM_FILENAME=$( basename $WORKLOAD_CUSTOM_SQL )
351
426
echo " Execute custom sql queries..."
352
- sshdo bash -c " psql -U postgres test -E -f /machine_home/queries_custom_ $DOCKER_MACHINE .sql "
427
+ sshdo bash -c " psql -U postgres test -E -f /machine_home/$WORKLOAD_CUSTOM_FILENAME "
353
428
fi
354
429
fi
355
430
@@ -363,14 +438,18 @@ if [[ $ARTIFACTS_DESTINATION =~ "s3://" ]]; then
363
438
sshdo s3cmd put /$ARTIFACTS_FILENAME .json $ARTIFACTS_DESTINATION /
364
439
else
365
440
sshdo cp /$ARTIFACTS_FILENAME .json /machine_home/
366
- docker-machine scp $DOCKER_MACHINE :/home/ubuntu/$ARTIFACTS_FILENAME .json $ARTIFACTS_DESTINATION /
441
+ docker-machine scp $DOCKER_MACHINE :/home/ubuntu/$ARTIFACTS_FILENAME .json $ARTIFACTS_DESTINATION /
367
442
fi
368
443
369
444
echo " Apply DDL undo SQL code from /machine_home/ddl_undo_$DOCKER_MACHINE .sql"
370
- if [ -f " $TMP_PATH /ddl_undo_$DOCKER_MACHINE .sql" ]; then
371
- sshdo bash -c " psql -U postgres test -E -f /machine_home/ddl_undo_$DOCKER_MACHINE .sql"
445
+ if ([ -v TARGET_DDL_UNDO ] && [ " $TARGET_DDL_UNDO " != " " ]); then
446
+ TARGET_DDL_UNDO_FILENAME=$( basename $TARGET_DDL_UNDO )
447
+ sshdo bash -c " psql -U postgres test -E -f /machine_home/$TARGET_DDL_UNDO_FILENAME "
372
448
fi
373
449
450
+ echo " Run done!"
451
+ echo " Result log: $ARTIFACTS_DESTINATION /$ARTIFACTS_FILENAME .json"
452
+
374
453
sleep $DEBUG_TIMEOUT
375
454
376
455
echo Bye!
0 commit comments