~elenst/randgen/mariadb-patches

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
# Copyright (C) 2008 Sun Microsystems, Inc. All rights reserved.  Use
# is subject to license terms.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
# USA

use GenTest::Constants;
use GenTest::Grammar;

# Configuration file template for  util/simplify-grammar.pl
#
# Please
# - Copy this file to for example 1.cfg and
# - Adjust the settings so that they fit to your use case & environment

{

# desired_status_codes
#---------------------
# List of expected status codes.
# Status codes are described in lib/GenTest/Constants.pm
# STATUS_ANY_ERROR means that any RQG error would cause the
# simplification to continue, e.g. both deadlocks and crashes will be
# considered together.
#
    desired_status_codes => [+STATUS_ANY_ERROR],

# expected_output
#----------------
# List of string patterns which all need to occur within the RQG output
# after a successful simplification. The search patterns are usually
# derived from a backtrace.
# Example 1:
#   Starting point is a crash of a server which was compiled with debug.
#    expected_output =>
#    [
#      'assert.{0,150}safe_cond_timedwait.{0,150}thr_mutex\.c.{0,50}Item_func_sleep::val_int.{0,3000}SELECT 1,SLEEP\(10\)'
#    ];
#   Please be careful when using source file line numbers or addresses
#   in search patterns
#   - They increase the selectivity of the search.
#   - There is a significant risk that they do no more fit if the source
#     code of the server gets changed.
# Example 2:
#   Starting point is a crash of a server which was compiled without debug.
#    expected_output => [
#       '0x0000000000413f61',
#       '0x00000000004429a0',
#       '0x0000000000453f0f'
#    ]
#    Just some adresses looks ugly but it works quite good.
# Example 3:
#   If just hunt for some status code ( -> desired_status_codes ) use
#    expected_output => [ '' ]
#

   expected_output => [
      ''
   ],

# initial_grammar_file
#---------------------
# File which should be used as the base for the simplification process.

   initial_grammar_file => 'conf/runtime/WL5004_sql.yy',

# rqg_options
#------------
# runall.pl (RQG) options which should be used

   rqg_options => {
      basedir  => '/work2/6.0/mysql-6.0-codebase-bugfixing1/',
      threads  => 30,
      queries  => 3000,
      duration => 60,
      mysqld => {
         'loose-lock-wait-timeout'  => 1,
         'innodb-lock-wait-timeout' => 1,
         'log-output'               => 'file'
      },
      reporter => 'Deadlock,Backtrace,Shutdown',
      redefine  => 'conf/runtime/WL5004_sql_redefine.yy',
      gendata  => 'conf/runtime/WL5004_data.zz'
   },

# grammar_flags
#--------------
# Set "grammar_flags" to GRAMMAR_FLAG_COMPACT_RULES so that rules such
# as rule: a | a | a | a | a | a | b are compressed to rule: a | b
# before simplification. This will speed up the process as each
# instance of "a" will not be removed separately until they are all
# gone.

   grammar_flags => +GRAMMAR_FLAG_COMPACT_RULES,

# trials
#-------
# This is the number of times the "oracle" function will run RQG in order 
# to get to the desired status code and/or desired strings (expected_output).
# If the error is sporadic, several runs may be required to know if the bug
# is still present in the simplified grammar or not.
# The "seed" value gets incremented per trial.

    trials => 1,

# search_var_size
#----------------
# Number of bytes (counted from the end of the output file) to be used during
# search for expected_output We suck the last "search_var_size" Bytes of the file
# to be searched into a variable.
# A too huge "search_var_size" could cause problems.
# The relevant zone within the file is maybe
# - smaller
#   If our search pattern is unfortunately a bit unspecific and if it
#   could also occur within irrelevant zones of the file than we might
#   get false positives. Decreasing "search_var_size" might help.
# - bigger
#   We might get false negatives. Increasing "search_var_size" might
#   help but I am unsure if any OS and PERL implementation supports
#   such a monstrous variable.

    search_var_size => 3000000,

# initial_seed
#-------------
# Initial seed value to use. This increases the likelihood that the RQG run
# with the initial grammar reaches the desired result.

    initial_seed => 1,

# vardir_prefix
#---------------
# "Server activity" should happen in "vardir" which is a subdirecty of
# "vardir_prefix".
# Important points are:
# - free space within the filesystem
# - performance of the filesystem
# Simplification gets a significant speed up if we could use a memory
# based filesystem.

    vardir_prefix => '/dev/shm',

# storage_prefix
#---------------
# Grammars and logs of the simplification process get stored within a
# subdirectory of "storage_prefix".

    storage_prefix => './storage'

}