File: report_mysql_info.sh

package info (click to toggle)
percona-toolkit 3.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 68,916 kB
  • sloc: perl: 241,287; sql: 22,868; sh: 19,746; javascript: 6,799; makefile: 353; awk: 38; python: 30; sed: 1
file content (814 lines) | stat: -rw-r--r-- 35,073 bytes parent folder | download | duplicates (2)
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
#!/usr/bin/env bash

plan 44

. "$LIB_DIR/alt_cmds.sh"
. "$LIB_DIR/log_warn_die.sh"
. "$LIB_DIR/summary_common.sh"
. "$LIB_DIR/report_formatting.sh"
. "$LIB_DIR/report_mysql_info.sh"

PT_TMPDIR="$TEST_PT_TMPDIR"
PATH="$PATH:$PERCONA_TOOLKIT_SANDBOX/bin"
TOOL="pt-mysql-summary"

samples="$PERCONA_TOOLKIT_BRANCH/t/pt-mysql-summary/samples"
NAME_VAL_LEN=20
# ###########################################################################
# table_cache
# ###########################################################################

rm $PT_TMPDIR/table_cache_tests 2>/dev/null
touch $PT_TMPDIR/table_cache_tests

is                                                  \
   $(get_table_cache "$PT_TMPDIR/table_cache_tests")   \
   0                                                \
   "0 if neither table_cache nor table_open_cache are present"

cat <<EOF > $PT_TMPDIR/table_cache_tests
table_cache       5
table_open_cache  4
EOF

is                                                 \
   $(get_table_cache "$PT_TMPDIR/table_cache_tests")  \
   4                                               \
   "If there's a table_open_cache present, uses that"

cat <<EOF > $PT_TMPDIR/table_cache_tests
table_cache       5
EOF

is                                                 \
   $(get_table_cache "$PT_TMPDIR/table_cache_tests")  \
   5                                               \
   "Otherwise, defaults to table_cache"

# ###########################################################################
# summarize_processlist
# ###########################################################################

cat <<EOF > $PT_TMPDIR/expected

  Command                        COUNT(*) Working SUM(Time) MAX(Time)
  ------------------------------ -------- ------- --------- ---------
  Binlog Dump                           1       1   9000000   9000000
  Connect                               2       2   6000000   5000000
  Query                                 2       2         0         0
  Sleep                               150       0    150000     20000

  User                           COUNT(*) Working SUM(Time) MAX(Time)
  ------------------------------ -------- ------- --------- ---------
  acjcxx                                4       0         0         0
  aecac                                 1       0         0         0
  babeecc                              20       0         0         0
  centous                               2       0         0         0
  crcpcpc                               2       0         0         0
  crgcp4c                               3       0         0         0
  eanecj                               30       1         0         0
  ebace                                10       0         0         0
  etace                                80       0         0         0
  goate                                 8       0         0         0
  qjveec                                1       0         0         0
  repl                                  1       1   9000000   9000000
  root                                  1       1         0         0
  system user                           2       2   6000000   5000000

  Host                           COUNT(*) Working SUM(Time) MAX(Time)
  ------------------------------ -------- ------- --------- ---------
  10.14.82.196                          6       0         0         0
  10.14.82.202                         20       0         0         0
  10.17.85.100                          9       0         0         0
  10.17.85.74                           1       1   9000000   9000000
  10.17.85.86                          35       0         0         0
  10.17.85.88                           5       0         0         0
  10.17.85.90                          10       0         0         0
  10.36.34.66                          35       1         0         0
                                        2       2   6000000   5000000
  localhost                             1       1         0         0
  someserver.woozle.com11               1       0         0         0
  someserver.woozle.com14               1       0         0         0
  someserver.woozle.com                40       0         0         0

  db                             COUNT(*) Working SUM(Time) MAX(Time)
  ------------------------------ -------- ------- --------- ---------
  aetecjc                             175       1         0         0
  NULL                                  4       4  15000000   9000000

  State                          COUNT(*) Working SUM(Time) MAX(Time)
  ------------------------------ -------- ------- --------- ---------
                                      150       0         0         0
  Has read all relay log; waitin        1       1    300000    300000
  Has sent all binlog to slave;         1       1   9000000   9000000
  NULL                                  2       2         0         0
  Waiting for master to send eve        1       1   5000000   5000000

EOF

summarize_processlist "$samples/processlist-001.txt" > "$PT_TMPDIR/got"
no_diff "$PT_TMPDIR/got" "$PT_TMPDIR/expected" "summarize_processlist" \
   || cat "$PT_TMPDIR/got" "$PT_TMPDIR/expected" >&2

# ###########################################################################
# summarize_binlogs
# ###########################################################################
NAME_VAL_LEN=25
cat <<EOF > "$PT_TMPDIR/expected"
                  Binlogs | 20
               Zero-Sized | 3
               Total Size | 6.5G
EOF

summarize_binlogs "$samples/mysql-master-logs-001.txt" > "$PT_TMPDIR/got"
no_diff "$PT_TMPDIR/expected" "$PT_TMPDIR/got" "summarize_binlogs"

# ###########################################################################
# Reporting semisync replication
# ###########################################################################

cat <<EOF > "$PT_TMPDIR/expected"
   master semisync status | 
       master trace level | 32, net wait (more information about network waits)
master timeout in milliseconds | 10000
  master waits for slaves | ON
           master clients | 
 master net_avg_wait_time | 
     master net_wait_time | 
         master net_waits | 
          master no_times | 
             master no_tx | 
 master timefunc_failures | 
  master tx_avg_wait_time | 
      master tx_wait_time | 
          master tx_waits | 
master wait_pos_backtraverse | 
     master wait_sessions | 
            master yes_tx | 
EOF

_semi_sync_stats_for "master" "$samples/mysql-variables-with-semisync.txt" > "$PT_TMPDIR/got"
no_diff "$PT_TMPDIR/expected" "$PT_TMPDIR/got" "semisync replication"

# ###########################################################################
# pretty_print_cnf_file
# ###########################################################################

cat <<EOF > $PT_TMPDIR/expected

[mysqld]
datadir                             = /mnt/data/mysql
socket                              = /mnt/data/mysql/mysql.sock
old_passwords                       = 1
ssl-key                             = /opt/mysql.pdns/.cert/server-key.pem
ssl-cert                            = /opt/mysql.pdns/.cert/server-cert.pem
ssl-ca                              = /opt/mysql.pdns/.cert/ca-cert.pem
innodb_buffer_pool_size             = 16M
innodb_flush_method                 = O_DIRECT
innodb_log_file_size                = 64M
innodb_log_buffer_size              = 1M
innodb_flush_log_at_trx_commit      = 2
innodb_file_per_table               = 1
ssl                                 = 1
server-id                           = 1
log-bin                             = sl1-bin
wsrep_provider_options              = "gcache.size=64M;base_host=10.1.2.102; base_port=4567; cert.log_conflicts=no;etc=etc;"

[mysql.server]
user                                = mysql
basedir                             = /mnt/data

[mysqld_safe]
log-error                           = /var/log/mysqld.log
pid-file                            = /var/run/mysqld/mysqld.pid

[mysql]

[xtrabackup]
target-dir                          = /data/backup
EOF

pretty_print_cnf_file "$samples/my.cnf-001.txt" > "$PT_TMPDIR/got"
no_diff "$PT_TMPDIR/got" "$PT_TMPDIR/expected" "pretty_print_cnf_file"


# TODO BUG NUMBER#
cp "$samples/my.cnf-001.txt" "$PT_TMPDIR/test_pretty_print_cnf_file"
echo "some_var_yadda=0" >> "$PT_TMPDIR/test_pretty_print_cnf_file"
echo "some_var_yadda                      = 0" >> "$PT_TMPDIR/expected"

pretty_print_cnf_file "$PT_TMPDIR/test_pretty_print_cnf_file" > "$PT_TMPDIR/got"
no_diff "$PT_TMPDIR/got" "$PT_TMPDIR/expected" "pretty_print_cnf_file, bug XXXXXX"


# ###########################################################################
# plugin_status
# ###########################################################################

cat <<EOF > $PT_TMPDIR/plugins
binlog   ACTIVE   STORAGE ENGINE NULL  GPL
partition   ACTIVE   STORAGE ENGINE NULL  GPL
ARCHIVE  ACTIVE   STORAGE ENGINE NULL  GPL
BLACKHOLE   ACTIVE   STORAGE ENGINE NULL  GPL
CSV   ACTIVE   STORAGE ENGINE NULL  GPL
FEDERATED   DISABLED STORAGE ENGINE NULL  GPL
MEMORY   ACTIVE   STORAGE ENGINE NULL  GPL
InnoDB   ACTIVE   STORAGE ENGINE NULL  GPL
MyISAM   ACTIVE   STORAGE ENGINE NULL  GPL
MRG_MYISAM  ACTIVE   STORAGE ENGINE NULL  GPL
EOF

is \
   "$(get_plugin_status $PT_TMPDIR/plugins InnoDB )"  \
   "ACTIVE"                                  \
   "Sanity test, finds InnoDB as active"

is \
   "$(get_plugin_status $PT_TMPDIR/plugins some_plugin_that_doesnt_exist )"  \
   "Not found"                                  \
   "Doesn't find a nonexistent plugin"

echo "INNODB_CMP  ACTIVE" >> $PT_TMPDIR/plugins
is \
   "$(get_plugin_status $PT_TMPDIR/plugins "INNODB_CMP" )"  \
   "ACTIVE"

cat <<EOF > $PT_TMPDIR/plugins
binlog   ACTIVE   STORAGE ENGINE NULL  GPL
mysql_native_password   ACTIVE   AUTHENTICATION NULL  GPL
mysql_old_password   ACTIVE   AUTHENTICATION NULL  GPL
MRG_MYISAM  ACTIVE   STORAGE ENGINE NULL  GPL
MyISAM   ACTIVE   STORAGE ENGINE NULL  GPL
CSV   ACTIVE   STORAGE ENGINE NULL  GPL
MEMORY   ACTIVE   STORAGE ENGINE NULL  GPL
FEDERATED   DISABLED STORAGE ENGINE NULL  GPL
ARCHIVE  ACTIVE   STORAGE ENGINE NULL  GPL
BLACKHOLE   ACTIVE   STORAGE ENGINE NULL  GPL
InnoDB   ACTIVE   STORAGE ENGINE NULL  GPL
INNODB_TRX  ACTIVE   INFORMATION SCHEMA   NULL  GPL
INNODB_LOCKS   ACTIVE   INFORMATION SCHEMA   NULL  GPL
INNODB_LOCK_WAITS ACTIVE   INFORMATION SCHEMA   NULL  GPL
INNODB_CMP  ACTIVE   INFORMATION SCHEMA   NULL  GPL
INNODB_CMP_RESET  ACTIVE   INFORMATION SCHEMA   NULL  GPL
INNODB_CMPMEM  ACTIVE   INFORMATION SCHEMA   NULL  GPL
INNODB_CMPMEM_RESET  ACTIVE   INFORMATION SCHEMA   NULL  GPL
PERFORMANCE_SCHEMA   ACTIVE   STORAGE ENGINE NULL  GPL
partition   ACTIVE   STORAGE ENGINE NULL  GPL
EOF

is \
   "$(get_plugin_status $PT_TMPDIR/plugins "INNODB_CMP" )"  \
   "ACTIVE"                                              \
   "Multiple plugins with the same prefix"

# ###########################################################################
# parse_mysqld_instances
# ###########################################################################

_NO_FALSE_NEGATIVES=1

cat <<EOF > $PT_TMPDIR/expected
  Port  Data Directory             Nice OOM Socket
  ===== ========================== ==== === ======
   3306 /var/lib/mysql             ?    ?   /var/run/mysqld/mysqld.sock
  12345 /tmp/12345/data            ?    ?   /tmp/12345/mysql_sandbox12345.sock
  12346 /tmp/12346/data            ?    ?   /tmp/12346/mysql_sandbox12346.sock
EOF
touch "$PT_TMPDIR/empty"
parse_mysqld_instances "$samples/ps-mysqld-001.txt" "$PT_TMPDIR/empty" > "$PT_TMPDIR/got"
no_diff "$PT_TMPDIR/got" "$PT_TMPDIR/expected" "ps-mysqld-001.txt"

cat <<EOF > "$PT_TMPDIR/expected"
  Port  Data Directory             Nice OOM Socket
  ===== ========================== ==== === ======
        /var/lib/mysql             ?    ?   /var/lib/mysql/mysql.sock
EOF
parse_mysqld_instances "$samples/ps-mysqld-002.txt" "$PT_TMPDIR/empty" > "$PT_TMPDIR/got"
no_diff "$PT_TMPDIR/got" "$PT_TMPDIR/expected" "ps-mysqld-002.txt"

#parse_mysqld_instances
cat <<EOF > $PT_TMPDIR/expected
  Port  Data Directory             Nice OOM Socket
  ===== ========================== ==== === ======
   3306 /mnt/data-store/mysql/data ?    ?   /tmp/mysql.sock
EOF
parse_mysqld_instances "$samples/ps-mysqld-003.txt" "$PT_TMPDIR/empty" > "$PT_TMPDIR/got"
no_diff "$PT_TMPDIR/got" "$PT_TMPDIR/expected" "ps-mysqld-003.txt"

cat <<EOF > "$PT_TMPDIR/expected"
  Port  Data Directory             Nice OOM Socket
  ===== ========================== ==== === ======
        /var/db/mysql              ?    ?   
EOF

cat <<EOF > "$PT_TMPDIR/in"
mysql   767  0.0  0.9  3492  1100  v0  I     3:01PM   0:00.07 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/var/db/mysql/my.cnf --user=mysql --datadir=/var/db/mysql --pid-file=/var/db/mysql/freebsd.hsd1.va.comcast.net..pid
mysql   818  0.0 17.4 45292 20584  v0  I     3:01PM   0:02.28 /usr/local/libexec/mysqld --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local --datadir=/var/db/mysql --user=mysql --log-error=/var/db/mysql/freebsd.hsd1.va.comcast.net..err --pid-file=/var/db/mysql/freebsd.hsd1.va.comcast.net..pid
EOF
parse_mysqld_instances "$PT_TMPDIR/in" "$PT_TMPDIR/empty" > "$PT_TMPDIR/got"
no_diff "$PT_TMPDIR/got" "$PT_TMPDIR/expected" "parse_mysqld_instances"

cat <<EOF > "$PT_TMPDIR/expected"
  Port  Data Directory             Nice OOM Socket
  ===== ========================== ==== === ======
  12345 /tmp/12345/data            ?    ?   /tmp/12345/mysql_sandbox12345.sock
  12346 /tmp/12346/data            ?    ?   /tmp/12346/mysql_sandbox12346.sock
  12347 /tmp/12347/data            ?    ?   /tmp/12347/mysql_sandbox12347.sock
EOF
parse_mysqld_instances "$samples/ps-mysqld-006.txt" "$PT_TMPDIR/empty" > "$PT_TMPDIR/got"
no_diff "$PT_TMPDIR/got" "$PT_TMPDIR/expected" "ps-mysqld-006.txt (uses --defaults-file)"

# ###########################################################################
# get_mysql_*
# ###########################################################################
NAME_VAL_LEN=20

cp $samples/mysql-variables-001.txt $PT_TMPDIR/mysql-variables
is \
   $(get_mysql_timezone "$PT_TMPDIR/mysql-variables") \
   "EDT" \
   "get_mysql_timezone"

cat <<EOF > $PT_TMPDIR/expected
2010-05-27 11:38 (up 0+02:08:52)
EOF
cp $samples/mysql-status-001.txt $PT_TMPDIR/mysql-status
uptime="$(get_var Uptime $PT_TMPDIR/mysql-status)"
current_time="$(echo -e "2010-05-27 11:38\n")"
get_mysql_uptime "${uptime}" "${current_time}" > $PT_TMPDIR/got
no_diff "$PT_TMPDIR/got" "$PT_TMPDIR/expected" "get_mysql_uptime"

cat <<EOF > $PT_TMPDIR/expected
             Version | 5.0.51a-24+lenny2 (Debian)
            Built On | debian-linux-gnu i486
EOF
cp "$samples/mysql-variables-001.txt" "$PT_TMPDIR/mysql-variables"
get_mysql_version "$PT_TMPDIR/mysql-variables" > "$PT_TMPDIR/got"
no_diff "$PT_TMPDIR/got" "$PT_TMPDIR/expected" "get_mysql_version"

# ###########################################################################
# format_status_variables
# ###########################################################################

cat <<EOF > "$PT_TMPDIR/expected"
Variable                                Per day  Per second      5 secs
Bytes_received                          8000000         100            
Bytes_sent                             35000000         400            
Com_admin_commands                           20                        
Com_change_db                              1000                        
Com_delete                                 8000                        
Com_insert                                 8000                        
Com_lock_tables                             200                        
Com_replace                                1250                        
Com_select                                22500                        
Com_set_option                            22500                        
Com_show_binlogs                             10                        
Com_show_create_db                          400                        
Com_show_create_table                      7000                        
Com_show_databases                          125                        
Com_show_fields                            7000                        
Com_show_innodb_status                      300                        
Com_show_open_tables                         10                        
Com_show_processlist                        300                        
Com_show_slave_status                       300                        
Com_show_status                             350                        
Com_show_storage_engines                     10                        
Com_show_tables                             400                        
Com_show_triggers                          7000                        
Com_show_variables                          450                        
Com_truncate                                300                        
Com_unlock_tables                           250                        
Com_update                                  900                        
Connections                                2500                        
Created_tmp_disk_tables                   15000                        
Created_tmp_files                            60                        
Created_tmp_tables                        22500                        
Flush_commands                               10                        
Handler_delete                             8000                        
Handler_read_first                         2250                        
Handler_read_key                          30000                        
Handler_read_next                         15000                        
Handler_read_rnd                           9000                        
Handler_read_rnd_next                    300000           3            
Handler_update                            17500                        
Handler_write                            250000           2            
Innodb_buffer_pool_pages_data               225                        
Innodb_buffer_pool_pages_free              5000                        
Innodb_buffer_pool_pages_total             6000                        
Innodb_buffer_pool_read_ahead_rnd            10                        
Innodb_buffer_pool_read_requests           2250                        
Innodb_buffer_pool_reads                    150                        
Innodb_data_fsyncs                           35                        
Innodb_data_read                       30000000         350            
Innodb_data_reads                           300                        
Innodb_data_writes                           35                        
Innodb_data_written                       17500                        
Innodb_log_writes                            10                        
Innodb_os_log_fsyncs                         35                        
Innodb_os_log_written                      6000                        
Innodb_page_size                         175000           2            
Innodb_pages_read                           225                        
Key_blocks_unused                        150000           1            
Key_blocks_used                             175                        
Key_read_requests                        100000           1            
Key_reads                                   600                        
Key_write_requests                        70000                        
Key_writes                                17500                        
Max_used_connections                         45                        
Open_files                                 1500                        
Open_tables                                 700                        
Opened_tables                             15000                        
Qcache_free_blocks                           80                        
Qcache_free_memory                    175000000        2250            
Qcache_hits                                8000                        
Qcache_inserts                            20000                        
Qcache_not_cached                         10000                        
Qcache_queries_in_cache                     225                        
Qcache_total_blocks                         600                        
Questions                                100000           1            
Select_scan                               25000                        
Sort_rows                                  8000                        
Sort_scan                                   300                        
Table_locks_immediate                     50000                   17500
Table_locks_waited                           10                       1
Threads_cached                               35                        
Threads_connected                            10                        
Threads_created                              45                        
Threads_running                              10                        
Uptime                                    90000           1           1
Uptime_since_flush_status                 90000           1            
EOF

join "$samples/mysql-status-001.txt" "$samples/mysql-status-002.txt" > "$PT_TMPDIR/in"
format_status_variables "$PT_TMPDIR/in" > "$PT_TMPDIR/got"
no_diff "$PT_TMPDIR/got" "$PT_TMPDIR/expected" "format_status_variables"

# ###########################################################################
# format_overall_db_stats
# ###########################################################################

cat <<EOF > "$PT_TMPDIR/expected"

  Database Tables Views SPs Trigs Funcs   FKs Partn
  mysql        17                                  
  sakila       17     7   3     6     3    22     1

  Database MyISAM InnoDB
  mysql        17       
  sakila        2     15

  Database BTREE FULLTEXT
  mysql       24         
  sakila      63        1

             c   t   s   e   t   s   i   t   b   l   b   v   d   y   d   m
             h   i   e   n   i   m   n   e   l   o   i   a   a   e   e   e
             a   m   t   u   n   a   t   x   o   n   g   r   t   a   c   d
             r   e       m   y   l       t   b   g   i   c   e   r   i   i
                 s           i   l               b   n   h   t       m   u
                 t           n   i               l   t   a   i       a   m
                 a           t   n               o       r   m       l   i
                 m               t               b           e           n
                 p                                                       t
  Database === === === === === === === === === === === === === === === ===
  mysql     38   5   5  69   2   3  16   2   4   1   2                    
  sakila     1  15   1   3  19  26   3   4   1          45   4   1   7   2

EOF
format_overall_db_stats "$samples/mysql-schema-001.txt" > "$PT_TMPDIR/got"
no_diff "$PT_TMPDIR/got" "$PT_TMPDIR/expected"

cat <<EOF > $PT_TMPDIR/expected

  Database Tables Views SPs Trigs Funcs   FKs Partn
  {chosen}      1                                  

  Database InnoDB
  {chosen}      1

  Database BTREE
  {chosen}     2

             t   v
             i   a
             n   r
             y   c
             i   h
             n   a
             t   r
  Database === ===
  {chosen}   1   1

EOF
format_overall_db_stats "$samples/mysql-schema-002.txt" > "$PT_TMPDIR/got"
no_diff \
   "$PT_TMPDIR/got" \
   "$PT_TMPDIR/expected" \
   "format_overall_db_stats: single DB without CREATE DATABASE nor USE db defaults to {chosen}"

# ###########################################################################
# format_innodb_status
# ###########################################################################

cat <<EOF > $PT_TMPDIR/expected
      Checkpoint Age | 619k
        InnoDB Queue | 0 queries inside InnoDB, 0 queries in queue
  Oldest Transaction | 3 Seconds
    History List Len | 255
          Read Views | 23
    Undo Log Entries | 0 transactions, 0 total undo, 0 max undo
   Pending I/O Reads | 14 buf pool reads, 6 normal AIO, 0 ibuf AIO, 23 preads
  Pending I/O Writes | 63 buf pool (63 LRU, 0 flush list, 0 page); 0 AIO, 0 sync, 0 log IO (1 log, 0 chkp); 0 pwrites
 Pending I/O Flushes | 0 buf pool, 1 log
  Transaction States | 1xACTIVE
Semaphore Waits
     69 btr/btr0cur.c line 457
     47 btr/btr0cur.c line 523
     17 trx/trx0trx.c line 1621
     12 row/row0sel.c line 3549
      4 lock/lock0lock.c line 4944
      3 lock/lock0lock.c line 5316
      2 lock/lock0lock.c line 3224
      2 btr/btr0sea.c line 1032
      1 trx/trx0trx.c line 738
      1 row/row0sel.c line 4574
      1 lock/lock0lock.c line 5163
      1 lock/lock0lock.c line 3249
      1 ./include/btr0btr.ic line 53
      1 fsp/fsp0fsp.c line 3395
      1 btr/btr0cur.c line 672
      1 btr/btr0cur.c line 450
Semaphore Holders
     66 thread id 139960165583184
     45 thread id 139960567171408
      4 thread id 139960404199760
      1 thread id 139961215367504
      1 thread id 139960969292112
      1 thread id 139960676096336
Mutexes/Locks Waited For
     65 lock on RW-latch at 0x905d33d0 '&new_index->lock'
     45 lock on RW-latch at 0x7f4bedbf8810 '&block->lock'
     30 Mutex at 0xf89ab0 '&kernel_mutex'
     15 lock on RW-latch at 0x90075530 '&btr_search_latch'
      4 lock on RW-latch at 0x90a42ca0 '&new_index->lock'
      1 lock on RW-latch at 0x90fe1c80 '&new_index->lock'
      1 lock on RW-latch at 0x90078f10 '&space->latch'
      1 lock on RW-latch at 0x7f4c0d3abba8 '&block->lock'
      1 lock on RW-latch at 0x7f4bfc558040 '&block->lock'
      1 lock on RW-latch at 0x7f4bd0a8c8d0 '&block->lock'
EOF

format_innodb_status $samples/innodb-status.001.txt > $PT_TMPDIR/got
no_diff $PT_TMPDIR/got $PT_TMPDIR/expected "innodb-status.001.txt" \
   || cat "$PT_TMPDIR/got" "$PT_TMPDIR/expected" >&2

cat <<'EOF' > $PT_TMPDIR/expected
      Checkpoint Age | 348M
        InnoDB Queue | 0 queries inside InnoDB, 0 queries in queue
  Oldest Transaction | 4 Seconds
    History List Len | 426
          Read Views | 583
    Undo Log Entries | 71 transactions, 247 total undo, 46 max undo
   Pending I/O Reads | 0 buf pool reads, 0 normal AIO, 0 ibuf AIO, 0 preads
  Pending I/O Writes | 0 buf pool (0 LRU, 0 flush list, 0 page); 0 AIO, 0 sync, 0 log IO (0 log, 0 chkp); 0 pwrites
 Pending I/O Flushes | 0 buf pool, 0 log
  Transaction States | 1xACTIVE, 70xACTIVE (PREPARED)
Tables Locked
     62 `citydb`.`player_buildings`
     46 `citydb`.`players`
     22 `citydb`.`city_grid`
     17 `citydb`.`player_stats`
      6 `citydb`.`player_contracts`
      1 `citydb`.`player_achievements`
Semaphore Waits
     23 trx/trx0undo.c line 1796
     10 trx/trx0trx.c line 1888
      8 trx/trx0trx.c line 1033
      7 trx/trx0trx.c line 738
      1 lock/lock0lock.c line 3770
      1 ./include/log0log.ic line 322
Mutexes/Locks Waited For
     33 Mutex at 0x2abf68b76a18 '&rseg->mutex'
     16 Mutex at 0x48ace40 '&kernel_mutex'
      1 Mutex at 0x2abf68b6c0d0 '&log_sys->mutex'
EOF

format_innodb_status $samples/innodb-status.002.txt > $PT_TMPDIR/got
no_diff $PT_TMPDIR/got $PT_TMPDIR/expected "innodb-status.002.txt"

cat <<'EOF' > $PT_TMPDIR/expected
      Checkpoint Age | 0
        InnoDB Queue | 0 queries inside InnoDB, 0 queries in queue
  Oldest Transaction | 35 Seconds
    History List Len | 11
          Read Views | 1
    Undo Log Entries | 0 transactions, 0 total undo, 0 max undo
   Pending I/O Reads | 0 buf pool reads, 0 normal AIO, 0 ibuf AIO, 0 preads
  Pending I/O Writes | 0 buf pool (0 LRU, 0 flush list, 0 page); 0 AIO, 0 sync, 0 log IO (0 log, 0 chkp); 0 pwrites
 Pending I/O Flushes | 0 buf pool, 0 log
  Transaction States | 1xACTIVE, 1xnot started
Tables Locked
      1 `test`.`t`
EOF

format_innodb_status $samples/innodb-status.003.txt > $PT_TMPDIR/got
no_diff $PT_TMPDIR/got $PT_TMPDIR/expected "innodb-status.003.txt" \
   || cat "$PT_TMPDIR/got" "$PT_TMPDIR/expected" >&2

cat <<'EOF' > $PT_TMPDIR/expected
      Checkpoint Age | 93M
        InnoDB Queue | 9 queries inside InnoDB, 0 queries in queue
  Oldest Transaction | 263 Seconds
    History List Len | 1282
          Read Views | 10
    Undo Log Entries | 3 transactions, 276797 total undo, 153341 max undo
   Pending I/O Reads | 50 buf pool reads, 48 normal AIO, 0 ibuf AIO, 2 preads
  Pending I/O Writes | 0 buf pool (0 LRU, 0 flush list, 0 page); 0 AIO, 0 sync, 0 log IO (0 log, 0 chkp); 0 pwrites
 Pending I/O Flushes | 0 buf pool, 0 log
  Transaction States | 9xACTIVE, 57xnot started
Semaphore Waits
      3 row/row0sel.c line 3495
      2 btr/btr0sea.c line 1024
      1 btr/btr0sea.c line 1170
      1 btr/btr0cur.c line 443
      1 btr/btr0cur.c line 1501
Semaphore Holders
      7 thread id 1220999488
      1 thread id 1229429056
Mutexes/Locks Waited For
      7 lock on RW-latch at 0x2aaab42120b8 created in file btr/btr0sea.c line 139
      1 lock on RW-latch at 0x2ab2c679a550 created in file buf/buf0buf.c line 550
EOF

format_innodb_status $samples/innodb-status.004.txt > $PT_TMPDIR/got
no_diff $PT_TMPDIR/got $PT_TMPDIR/expected "innodb-status.004.txt" \
   || cat "$PT_TMPDIR/got" "$PT_TMPDIR/expected" >&2

# ###########################################################################
# section_innodb
# ###########################################################################

test_format_innodb () {
   local NAME_VAL_LEN=25
   cat <<EOF > $PT_TMPDIR/expected
                  Version | 1.0.17-13.2
         Buffer Pool Size | 128.0M
         Buffer Pool Fill | 1%
        Buffer Pool Dirty | 0%
           File Per Table | OFF
                Page Size | 16k
            Log File Size | 2 * 1.5G = 2.9G
          Log Buffer Size | 8M
             Flush Method | 
      Flush Log At Commit | 1
               XA Support | ON
                Checksums | ON
              Doublewrite | ON
          R/W I/O Threads | 4 4
             I/O Capacity | 200
       Thread Concurrency | 0
      Concurrency Tickets | 500
       Commit Concurrency | 0
      Txn Isolation Level | REPEATABLE-READ
        Adaptive Flushing | OFF
      Adaptive Checkpoint | estimate
EOF

   section_innodb "$samples/temp001/mysql-variables" "$samples/temp001/mysql-status" > "$PT_TMPDIR/got"
   no_diff "$PT_TMPDIR/got" "$PT_TMPDIR/expected" "Format InnoDB"
}

test_format_innodb

# ###########################################################################
# format_innodb_filters
# ###########################################################################

test_format_innodb_filters () {
   local NAME_VAL_LEN=20

   cat <<EOF > $PT_TMPDIR/expected
        binlog_do_db | foo
    binlog_ignore_db | mysql,test
EOF

   format_binlog_filters "$samples/mysql-show-master-status-001.txt" > "$PT_TMPDIR/got"
   no_diff "$PT_TMPDIR/got" "$PT_TMPDIR/expected" "Format InnoDB filters"
}

test_format_innodb_filters

# ###########################################################################
# format_overall_db_stats
# ###########################################################################

format_overall_db_stats "$samples/mysqldump-001.txt" > "$PT_TMPDIR/got"

no_diff \
   "$PT_TMPDIR/got" \
   "$samples/expected_output_format_db_stats.txt" \
   "Bug 903229: Format overall DB stats should be case-insensitive for engines"

# ###########################################################################
# report_mysql_summary
# ###########################################################################

OPT_SLEEP=1
OPT_DATABASES=""
OPT_READ_SAMPLES=""
OPT_ALL_DATABASES=""
NAME_VAL_LEN=25
report_mysql_summary "$samples/tempdir" | tail -n+3 > "$PT_TMPDIR/got"
no_diff "$PT_TMPDIR/got" "$samples/expected_result_report_summary.txt"

_NO_FALSE_NEGATIVES=""
OPT_SLEEP=10
report_mysql_summary "$samples/temp002" 2>/dev/null | tail -n+3 > "$PT_TMPDIR/got"
no_diff \
   "$PT_TMPDIR/got" \
   "$samples/expected_output_temp002.txt" \
   "report_mysql_summary, dir: temp002"

report_mysql_summary "$samples/temp003" 2>/dev/null | tail -n+3 > "$PT_TMPDIR/got"
no_diff \
   "$PT_TMPDIR/got" \
   "$samples/expected_output_temp003.txt" \
   "report_mysql_summary, dir: temp003"

report_mysql_summary "$samples/temp004" 2>/dev/null | tail -n+3 > "$PT_TMPDIR/got"
no_diff \
   "$PT_TMPDIR/got" \
   "$samples/expected_output_temp004.txt" \
   "report_mysql_summary, dir: temp004"

report_mysql_summary "$samples/temp006" 2>/dev/null | tail -n+3 > "$PT_TMPDIR/got"
no_diff \
   "$PT_TMPDIR/got" \
   "$samples/expected_output_temp006.txt" \
   "report_mysql_summary, dir: temp006 (PXC, cluster node)"

report_mysql_summary "$samples/temp007" 2>/dev/null | tail -n+3 > "$PT_TMPDIR/got"
no_diff \
   "$PT_TMPDIR/got" \
   "$samples/expected_output_temp007.txt" \
   "report_mysql_summary, dir: temp007 (PXC, traditional master)"

# ###########################################################################
# parse_wsrep_provider_options
# ###########################################################################

vars_file="$samples/temp006/mysql-variables"
is \
   "$(parse_wsrep_provider_options "base_host" "$vars_file")" \
   "192.168.122.1" \
   "parse_wsrep_provider_options works for the first option"

is \
   "$(parse_wsrep_provider_options "replicator.commit_order" "$vars_file")" \
   "3" \
   "parse_wsrep_provider_options works for the last option"

is \
   "$(parse_wsrep_provider_options "pc.ignore_sb" "$vars_file")" \
   "false" \
   "parse_wsrep_provider_options works for pc.ignore_sb"

is \
   "$(parse_wsrep_provider_options "pc.ignore_quorum" "$vars_file")" \
   "false" \
   "parse_wsrep_provider_options works for pc.ignore_quorum"

is \
   "$(parse_wsrep_provider_options "gcache.name" "$vars_file")" \
   "/tmp/12345/data//galera.cache" \
   "parse_wsrep_provider_options works for gcache.name"


# ###########################################################################
# pt-mysql-summary not Percona Server 5.5-ready
# https://bugs.launchpad.net/percona-toolkit/+bug/1015590
# ###########################################################################

section_percona_server_features "$samples/percona-server-5.5-variables" > "$PT_TMPDIR/got"

no_diff \
   "$PT_TMPDIR/got" \
   "$samples/expected_output_ps-features.txt" \
   "Bug 1015590: pt-mysql-summary not Percona Server 5.5-ready"

section_percona_server_features "$samples/percona-server-5.1-variables" > "$PT_TMPDIR/got"
no_diff \
   "$PT_TMPDIR/got" \
   "$samples/expected_output_ps-5.1-features.txt" \
   "Bug 1015590: section_percona_server_features works on 5.1 with innodb_adaptive_checkpoint=none"

section_percona_server_features "$samples/percona-server-5.1-variables-martin" > "$PT_TMPDIR/got"
cp "$PT_TMPDIR/got" /tmp/dasgot
no_diff \
   "$PT_TMPDIR/got" \
   "$samples/expected_output_ps-5.1-martin.txt" \
   "section_percona_server_features works on 5.1"

# ###########################################################################
# Done
# ###########################################################################