Skip to content

Commit 67a58e8

Browse files
authored
[techsupport] [202012] Removed -i option for docker commands and Improved Error Reporting (#1833)
PR #1723 cannot be cherry-picked directly to 202012. Thus raised a separate PR
1 parent 912d443 commit 67a58e8

File tree

2 files changed

+76
-11
lines changed

2 files changed

+76
-11
lines changed

scripts/generate_dump

+72-10
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ HOME=${HOME:-/root}
3737
USER=${USER:-root}
3838
TIMEOUT_MIN="5"
3939
SKIP_BCMCMD=0
40+
SAVE_STDERR=true
41+
RETURN_CODE=0
4042

4143
handle_signal()
4244
{
@@ -46,7 +48,15 @@ handle_signal()
4648
}
4749
trap 'handle_signal' SIGINT
4850

51+
handle_error() {
52+
if [ "$1" != "0" ]; then
53+
echo "ERR: RC:-$1 observed on line $2" >&2
54+
RETURN_CODE=1
55+
fi
56+
}
57+
4958
save_bcmcmd() {
59+
trap 'handle_error $? $LINENO' ERR
5060
local start_t=$(date +%s%3N)
5161
local end_t=0
5262
local cmd="$1"
@@ -106,6 +116,7 @@ save_bcmcmd() {
106116
# None
107117
###############################################################################
108118
save_bcmcmd_all_ns() {
119+
trap 'handle_error $? $LINENO' ERR
109120
local do_gzip=${3:-false}
110121

111122
if [[ ( "$NUM_ASICS" > 1 ) ]]; then
@@ -142,6 +153,7 @@ save_bcmcmd_all_ns() {
142153
# None
143154
###############################################################################
144155
save_cmd() {
156+
trap 'handle_error $? $LINENO' ERR
145157
local start_t=$(date +%s%3N)
146158
local end_t=0
147159
local cmd="$1"
@@ -150,6 +162,15 @@ save_cmd() {
150162
local do_gzip=${3:-false}
151163
local tarpath="${BASE}/dump/$filename"
152164
local timeout_cmd="timeout --foreground ${TIMEOUT_MIN}m"
165+
local redirect='&>'
166+
local redirect_eval='2>&1'
167+
168+
if ! $SAVE_STDERR
169+
then
170+
redirect=">"
171+
redirect_eval=""
172+
fi
173+
153174
[ ! -d $LOGDIR ] && $MKDIR $V -p $LOGDIR
154175

155176
# eval required here to re-evaluate the $cmd properly at runtime
@@ -159,7 +180,7 @@ save_cmd() {
159180
if $do_gzip; then
160181
tarpath="${tarpath}.gz"
161182
filepath="${filepath}.gz"
162-
local cmds="$cmd 2>&1 | gzip -c > '${filepath}'"
183+
local cmds="$cmd $redirect_eval | gzip -c > '${filepath}'"
163184
if $NOOP; then
164185
echo "${timeout_cmd} bash -c \"${cmds}\""
165186
else
@@ -170,9 +191,9 @@ save_cmd() {
170191
fi
171192
else
172193
if $NOOP; then
173-
echo "${timeout_cmd} $cmd &> '$filepath'"
194+
echo "${timeout_cmd} $cmd $redirect '$filepath'"
174195
else
175-
eval "${timeout_cmd} $cmd" &> "$filepath"
196+
eval "${timeout_cmd} $cmd" "$redirect" "$filepath"
176197
if [ $? -ne 0 ]; then
177198
echo "Command: $cmd timedout after ${TIMEOUT_MIN} minutes."
178199
fi
@@ -198,6 +219,7 @@ save_cmd() {
198219
# None
199220
###############################################################################
200221
save_cmd_all_ns() {
222+
trap 'handle_error $? $LINENO' ERR
201223
local do_zip=${3:-false}
202224

203225
# host or default namespace
@@ -226,14 +248,15 @@ save_cmd_all_ns() {
226248
# None
227249
###############################################################################
228250
copy_from_docker() {
251+
trap 'handle_error $? $LINENO' ERR
229252
local start_t=$(date +%s%3N)
230253
local end_t=0
231254
local docker=$1
232255
local filename=$2
233256
local dstpath=$3
234257
local timeout_cmd="timeout --foreground ${TIMEOUT_MIN}m"
235258

236-
local touch_cmd="sudo docker exec -i ${docker} touch ${filename}"
259+
local touch_cmd="sudo docker exec ${docker} touch ${filename}"
237260
local cp_cmd="sudo docker cp ${docker}:${filename} ${dstpath}"
238261

239262
if $NOOP; then
@@ -267,6 +290,7 @@ copy_from_docker() {
267290
# None
268291
###############################################################################
269292
copy_from_masic_docker() {
293+
trap 'handle_error $? $LINENO' ERR
270294
local docker=$1
271295
local filename=$2
272296
local dstpath=$3
@@ -292,6 +316,7 @@ copy_from_masic_docker() {
292316
# vtysh namespace option
293317
###############################################################################
294318
get_vtysh_namespace() {
319+
trap 'handle_error $? $LINENO' ERR
295320
local asic_id=${1:-""}
296321
local ns=""
297322
if [[ ( $asic_id = "" ) ]] ; then
@@ -316,6 +341,7 @@ get_vtysh_namespace() {
316341
# None
317342
###############################################################################
318343
save_vtysh() {
344+
trap 'handle_error $? $LINENO' ERR
319345
local vtysh_cmd=$1
320346
local filename=$2
321347
local do_gzip=${3:-false}
@@ -345,6 +371,7 @@ save_vtysh() {
345371
# None
346372
###############################################################################
347373
save_ip() {
374+
trap 'handle_error $? $LINENO' ERR
348375
local ip_args=$1
349376
local filename="ip.$2"
350377
local do_gzip=${3:-false}
@@ -363,6 +390,7 @@ save_ip() {
363390
# None
364391
###############################################################################
365392
save_bridge() {
393+
trap 'handle_error $? $LINENO' ERR
366394
local br_args=$1
367395
local filename="bridge.$2"
368396
local do_gzip=${3:-false}
@@ -379,6 +407,7 @@ save_bridge() {
379407
# None
380408
###############################################################################
381409
save_bridge_info() {
410+
trap 'handle_error $? $LINENO' ERR
382411
save_bridge "fdb show" "fdb"
383412
save_bridge "vlan show" "vlan"
384413
}
@@ -395,6 +424,7 @@ save_bridge_info() {
395424
# None
396425
###############################################################################
397426
save_bgp_neighbor() {
427+
trap 'handle_error $? $LINENO' ERR
398428
local timeout_cmd="timeout --foreground ${TIMEOUT_MIN}m"
399429
local asic_id=${1:-""}
400430
local ns=$(get_vtysh_namespace $asic_id)
@@ -431,6 +461,7 @@ save_bgp_neighbor() {
431461
# None
432462
###############################################################################
433463
save_bgp_neighbor_all_ns() {
464+
trap 'handle_error $? $LINENO' ERR
434465
if [[ ( "$NUM_ASICS" == 1 ) ]] ; then
435466
save_bgp_neighbor
436467
else
@@ -451,6 +482,7 @@ save_bgp_neighbor_all_ns() {
451482
# None
452483
###############################################################################
453484
save_nat_info() {
485+
trap 'handle_error $? $LINENO' ERR
454486
save_cmd_all_ns "iptables -t nat -nv -L" "nat.iptables"
455487
save_cmd_all_ns "conntrack -j -L" "nat.conntrack"
456488
save_cmd_all_ns "conntrack -j -L | wc" "nat.conntrackcount"
@@ -469,6 +501,7 @@ save_nat_info() {
469501
# None
470502
###############################################################################
471503
save_bfd_info() {
504+
trap 'handle_error $? $LINENO' ERR
472505
save_vtysh "show bfd peers" "frr.bfd.peers"
473506
save_vtysh "show bfd peers counters" "frr.bfd.peers.counters"
474507
save_vtysh "show bfd peers json" "frr.bfd.peers.json"
@@ -485,6 +518,7 @@ save_bfd_info() {
485518
# None
486519
###############################################################################
487520
save_ip_info() {
521+
trap 'handle_error $? $LINENO' ERR
488522
save_ip "link" "link"
489523
save_ip "addr" "addr"
490524
save_ip "rule" "rule"
@@ -503,6 +537,7 @@ save_ip_info() {
503537
# None
504538
###############################################################################
505539
save_bgp_info() {
540+
trap 'handle_error $? $LINENO' ERR
506541
save_vtysh "show ip bgp summary" "bgp.summary"
507542
save_vtysh "show ip bgp neighbors" "bgp.neighbors"
508543
save_vtysh "show ip bgp" "bgp.table"
@@ -522,6 +557,7 @@ save_bgp_info() {
522557
# None
523558
###############################################################################
524559
save_frr_info() {
560+
trap 'handle_error $? $LINENO' ERR
525561
save_vtysh "show running-config" "frr.running_config"
526562
save_vtysh "show ip route vrf all" "frr.ip_route"
527563
save_vtysh "show ipv6 route vrf all" "frr.ip6_route"
@@ -541,6 +577,7 @@ save_frr_info() {
541577
# None
542578
###############################################################################
543579
save_redis_info() {
580+
trap 'handle_error $? $LINENO' ERR
544581
save_redis "APPL_DB"
545582
save_redis "ASIC_DB"
546583
save_redis "COUNTERS_DB"
@@ -568,6 +605,7 @@ save_redis_info() {
568605
# None
569606
###############################################################################
570607
save_proc() {
608+
trap 'handle_error $? $LINENO' ERR
571609
local procfiles="$@"
572610
$MKDIR $V -p $TARDIR/proc
573611
for f in $procfiles
@@ -593,6 +631,7 @@ save_proc() {
593631
# None
594632
###############################################################################
595633
save_redis() {
634+
trap 'handle_error $? $LINENO' ERR
596635
local db_name=$1
597636
if [ $# -ge 2 ] && [ -n "$2" ]; then
598637
local dest_file_name=$2
@@ -612,6 +651,7 @@ save_redis() {
612651
# None
613652
###############################################################################
614653
save_saidump() {
654+
trap 'handle_error $? $LINENO' ERR
615655
if [[ ( "$NUM_ASICS" == 1 ) ]] ; then
616656
save_cmd "docker exec -it syncd saidump" "saidump"
617657
else
@@ -632,6 +672,7 @@ save_saidump() {
632672
# None
633673
###############################################################################
634674
save_platform_info() {
675+
trap 'handle_error $? $LINENO' ERR
635676
save_cmd "show platform syseeprom" "syseeprom"
636677
save_cmd "show platform psustatus" "psustatus"
637678
save_cmd "show platform ssdhealth" "ssdhealth"
@@ -659,6 +700,7 @@ save_platform_info() {
659700
# None
660701
###############################################################################
661702
save_file() {
703+
trap 'handle_error $? $LINENO' ERR
662704
local start_t=$(date +%s%3N)
663705
local end_t=0
664706
local orig_path=$1
@@ -705,6 +747,7 @@ save_file() {
705747
# None
706748
###############################################################################
707749
find_files() {
750+
trap 'handle_error $? $LINENO' ERR
708751
local -r directory=$1
709752
$TOUCH --date="${SINCE_DATE}" "${REFERENCE_FILE}"
710753
local -r find_command="find -L $directory -type f -newer ${REFERENCE_FILE}"
@@ -749,6 +792,7 @@ enable_logrotate() {
749792
# None
750793
###############################################################################
751794
collect_mellanox() {
795+
trap 'handle_error $? $LINENO' ERR
752796
local sai_dump_filename="/tmp/sai_sdk_dump_$(date +"%m_%d_%Y_%I_%M_%p")"
753797
${CMD_PREFIX}docker exec -it syncd saisdkdump -f $sai_dump_filename
754798
${CMD_PREFIX}docker exec syncd tar Ccf $(dirname $sai_dump_filename) - $(basename $sai_dump_filename) | tar Cxf /tmp/ -
@@ -763,9 +807,9 @@ collect_mellanox() {
763807

764808
# Save SDK error dumps
765809
local sdk_dump_path=`${CMD_PREFIX}docker exec syncd cat /tmp/sai.profile|grep "SAI_DUMP_STORE_PATH"|cut -d = -f2`
766-
if [[ $sdk_dump_path ]]; then
810+
if [[ -d $sdk_dump_path ]]; then
767811
copy_from_docker syncd $sdk_dump_path /tmp/sdk-dumps
768-
for file in $(find /tmp/sdk-dumps); do
812+
for file in $(find /tmp/sdk-dumps -type f); do
769813
save_file ${file} sai_sdk_dump false
770814
done
771815
rm -rf /tmp/sdk-dumps
@@ -782,6 +826,7 @@ collect_mellanox() {
782826
# None
783827
###############################################################################
784828
collect_broadcom() {
829+
trap 'handle_error $? $LINENO' ERR
785830
local platform=$(show platform summary --json | python -c 'import sys, json; \
786831
print(json.load(sys.stdin)["platform"])')
787832
local hwsku=$(show platform summary --json | python -c 'import sys, json; \
@@ -868,6 +913,7 @@ collect_broadcom() {
868913
# None
869914
###############################################################################
870915
save_log_files() {
916+
trap 'handle_error $? $LINENO' ERR
871917
disable_logrotate
872918
trap enable_logrotate HUP INT QUIT TERM KILL ABRT ALRM
873919

@@ -907,6 +953,7 @@ save_log_files() {
907953
# None
908954
###############################################################################
909955
save_warmboot_files() {
956+
trap 'handle_error $? $LINENO' ERR
910957
# Copy the warmboot files
911958
start_t=$(date +%s%3N)
912959
if $NOOP; then
@@ -935,6 +982,7 @@ save_warmboot_files() {
935982
###############################################################################
936983
save_crash_files() {
937984
# archive core dump files
985+
trap 'handle_error $? $LINENO' ERR
938986
for file in $(find_files "/var/core/"); do
939987
# don't gzip already-gzipped log files :)
940988
if [ -z "${file##*.gz}" ]; then
@@ -967,9 +1015,15 @@ save_crash_files() {
9671015
# ASIC Count
9681016
###############################################################################
9691017
get_asic_count() {
1018+
trap 'handle_error $? $LINENO' ERR
1019+
local redirect_eval="2>&1"
1020+
if ! $SAVE_STDERR
1021+
then
1022+
redirect_eval=""
1023+
fi
9701024
local cmd="show platform summary --json | python -c 'import sys, json; \
9711025
print(json.load(sys.stdin)[\"asic_count\"])'"
972-
echo `eval ${cmd} 2>&1`
1026+
echo `eval ${cmd} ${redirect_eval}`
9731027
}
9741028

9751029
###############################################################################
@@ -983,6 +1037,7 @@ get_asic_count() {
9831037
# None
9841038
###############################################################################
9851039
save_counter_snapshot() {
1040+
trap 'handle_error $? $LINENO' ERR
9861041
local asic_name="$1"
9871042
local idx=$2
9881043
counter_t=$(date +'%d/%m/%Y %H:%M:%S:%6N')
@@ -1016,6 +1071,7 @@ save_counter_snapshot() {
10161071
# None
10171072
###############################################################################
10181073
main() {
1074+
trap 'handle_error $? $LINENO' ERR
10191075
local start_t=0
10201076
local end_t=0
10211077
if [ `whoami` != root ] && ! $NOOP;
@@ -1094,12 +1150,12 @@ main() {
10941150
if [[ ( "$NUM_ASICS" > 1 ) ]]; then
10951151
for (( i=0; i<$NUM_ASICS; i++ ))
10961152
do
1097-
save_cmd "docker exec -it lldp$i lldpcli show statistics" "lldp$i.statistics"
1153+
save_cmd "docker exec lldp$i lldpcli show statistics" "lldp$i.statistics"
10981154
save_cmd "docker logs bgp$i" "docker.bgp$i.log"
10991155
save_cmd "docker logs swss$i" "docker.swss$i.log"
11001156
done
11011157
else
1102-
save_cmd "docker exec -it lldp lldpcli show statistics" "lldp.statistics"
1158+
save_cmd "docker exec lldp lldpcli show statistics" "lldp.statistics"
11031159
save_cmd "docker logs bgp" "docker.bgp.log"
11041160
save_cmd "docker logs swss" "docker.swss.log"
11051161
fi
@@ -1192,6 +1248,7 @@ main() {
11921248
fi
11931249

11941250
echo ${TARFILE}
1251+
exit $RETURN_CODE
11951252
}
11961253

11971254
###############################################################################
@@ -1247,11 +1304,13 @@ OPTIONS
12471304
"24 March", "yesterday", etc.
12481305
-t TIMEOUT_MINS
12491306
Command level timeout in minutes
1307+
-r
1308+
Redirect any intermediate errors to STDERR
12501309
12511310
EOF
12521311
}
12531312

1254-
while getopts ":xnvhzas:t:" opt; do
1313+
while getopts ":xnvhzas:t:r" opt; do
12551314
case $opt in
12561315
x)
12571316
# enable bash debugging
@@ -1293,6 +1352,9 @@ while getopts ":xnvhzas:t:" opt; do
12931352
t)
12941353
TIMEOUT_MIN="${OPTARG}"
12951354
;;
1355+
r)
1356+
SAVE_STDERR=false
1357+
;;
12961358
/?)
12971359
echo "Invalid option: -$OPTARG" >&2
12981360
exit 1

0 commit comments

Comments
 (0)