Merge pull request #56996 from zdover23/wip-doc-2024-04-19-dev-peering-image
[ceph.git] / src / multi-dump.sh
1 #!/usr/bin/env bash
2
3 #
4 # multi-dump.sh
5 #
6 # Dumps interesting information about the Ceph cluster at a series of epochs.
7 #
8
9 ### Functions
10 usage() {
11         cat <<EOF
12 multi-dump.sh: dumps out ceph maps
13
14 -D                         Enable diff-mode
15 -e <start-epoch>           What epoch to end with.
16 -h                         This help message
17 -s <start-epoch>           What epoch to start with. Defaults to 1.
18 -t <map-type>              What type of map to dump. Defaults to osdmap.
19                            Valid map types are: osdmap, 
20 EOF
21 }
22
23 cleanup() {
24         [ -n ${TEMPDIR} ] && rm -rf "${TEMPDIR}"
25 }
26
27 die() {
28         echo $@
29         exit 1
30 }
31
32 dump_osdmap() {
33         for v in `seq $START_EPOCH $END_EPOCH`; do
34                 ./ceph osd getmap $v -o $TEMPDIR/$v >> $TEMPDIR/cephtool-out \
35                         || die "cephtool failed to dump epoch $v"
36         done
37         if [ $DIFFMODE -eq 1 ]; then
38                 for v in `seq $START_EPOCH $END_EPOCH`; do
39                         ./osdmaptool --print $TEMPDIR/$v > $TEMPDIR/$v.out
40                 done
41                 cat $TEMPDIR/$START_EPOCH.out
42                 E=$((END_EPOCH-1))
43                 for v in `seq $START_EPOCH $E`; do
44                         S=$((v+1))
45                         echo "************** $S **************"
46                         diff  $TEMPDIR/$v.out $TEMPDIR/$S.out
47                 done
48         else
49                 for v in `seq $START_EPOCH $END_EPOCH`; do
50                         echo "************** $v **************"
51                         ./osdmaptool --print $TEMPDIR/$v \
52                                 || die "osdmaptool failed to print epoch $v"
53                 done
54         fi
55 }
56
57 ### Setup
58 trap cleanup INT TERM EXIT
59 TEMPDIR=`mktemp -d`
60 MYDIR=`dirname $0`
61 MYDIR=`readlink -f $MYDIR`
62 MAP_TYPE=osdmap
63 cd $MYDIR
64
65 ### Parse arguments
66 DIFFMODE=0
67 START_EPOCH=1
68 END_EPOCH=0
69
70 while getopts  "De:hs:t:" flag; do
71 case $flag in
72         D) DIFFMODE=1;;
73
74         e) END_EPOCH=$OPTARG;;
75
76         h)  usage
77             exit 0
78             ;;
79
80         s) START_EPOCH=$OPTARG;;
81
82         t) MAP_TYPE=$OPTARG;;
83
84         *) usage
85            exit 1;;
86 esac
87 done
88 [ $END_EPOCH -eq 0 ] && die "You must supply an end epoch with -e"
89
90 ### Dump maps
91 case $MAP_TYPE in
92         "osdmap") dump_osdmap;;
93
94         *) die "sorry, don't know how to handle MAP_TYPE '$MAP_TYPE'"
95 esac
96
97 exit 0