~drizzle-trunk/drizzle/development

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
# 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

# Configuration file template for  util/bughunt.pl
#
# Please
# - copy this file to for example bughunt1.cfg and
# - adjust the settings so that they fit to your usage case and
#   environment
#

{

# desired_status_codes
#---------------------
# List of status codes we are hunting for.
# Status codes are described in lib/GenTest/Constants.pm
# STATUS_ANY_ERROR means any RQG error like for example deadlock or server crash.
#

   desired_status_codes => [+STATUS_ANY_ERROR],

# expected_output
#----------------
# String pattern which needs to occur within the RQG output.
# The search pattern is usually derived from a backtrace.
# Example 1:
#   Starting point is a crash of a server which was compiled with debug.
#    @expected_output =>
#    [
#      'mysql_execute_command .* at sql_parse.cc\:4441',
#      'mysql_parse .* at sql_parse.cc\:5991',
#      'dispatch_command .* at sql_parse.cc\:1074'
#    ];
#   Please be careful when using source file line numbers in search patterns
#   - They increase the selectivity of the search.
#   - There is a significant risk that the line numbers 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 you just hunt for some status code ( -> desired_status_codes ) use
#   expected_output => [ ]

   expected_outputs => [ '' ],

# grammar
#--------
# RQG grammar file which should be used for the bug hunting process.
#

   grammar => 'conf/replication/replication-dml_sql.yy',

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

   rqg_options => {
      basedir  => '/work2/5.1/mysql-5.1-rep+3/',
      rpl_mode => 'mixed',
      threads  => 10,
      queries  => 10000,
      duration => 1200,
      reporter => 'Deadlock,Backtrace,ErrorLog',
      gendata  => 'conf/replication/replication-dml_data.zz'
   },

# Mysqld options
#---------------
# Mysql server options passed to RQG in addition to the rqg_options
#

   mysqld => {
      'loose-innodb-lock-wait-timeout' => 1,
      'table-lock-wait-timeout'        => 1,
      'log-output'                     => 'file',
      'plugin-dir'                     => '/work2/5.1/mysql-5.1-rep+3/plugin/semisync/.libs',
      'plugin-load'                    => 'rpl_semi_sync_master=libsemisync_master.so:rpl_semi_sync_slave=libsemisync_slave.so',
      'rpl_semi_sync_master_enabled'   => 1,
      'rpl_semi_sync_slave_enabled'    => 1
   },

# trials
#-------
# This is the number of times the oracle() will run the RQG in order to get to
# the desired status code and/or desired string (expected_output).
# If an error is sporadic, several runs may be required to show that this error
# is present.
# The "mask" and "seed" values get incremented per trial.
#

   trials => 50,

#--------------------------------------------------------------------------
# PARAMETERS AFFECTING THE VARIATIONS OF THE TEST PERFORMED DURING BUG HUNT
#--------------------------------------------------------------------------

# Seed affects which alternative of a grammar element or random value is selected
#--------------------------------------------------------------------------------
# The variation of the seed value has a smaller impact than the masking of grammar
# element alternatives.
#
# initial_seed
#-------------
# Seed value to use for the first RQG run. The seed value changes per RQG run.
#

   initial_seed => 1,

# Masking of alternatives within grammar elements
#------------------------------------------------
# Masking has a much bigger impact on what gets finally executed than a variation
# of the seed value. It could destroy well balanced ratios between for example
# DROP and CREATE or DELETE and INSERT. The final outcome might be an exceptional
# growth of the stored data or most statements meeting no or empty tables.
# If you want to switch off "masking" for all RQG runs than please
# set "mask_level => 0"
#
# mask_level
#-------------------
# Level within the grammar hierarchy till which masking has to be applied.
# This value is to be used for all RQG runs.
# A value of 0 causes that no masking will be applied.
# Values > 30 affect most probably all grammar elements.
#

  mask_level => 0,

# initial_mask
#-------------
# Masking value to be used for the first RQG run. The mask value changes per RQG run.
# Though a value of 0 causes that no masking gets applied for the current RQG run,
# a successing run will be withg masking.
#

   initial_mask => 0,



# vardir_prefix
#--------------
# "Server activity" should happen in "vardir" which is a subdirecty of
# "vardir_prefix".
# Important points are:
# - Sufficient free space within the filesystem
# - performance of the filesystem
# RQG runs get a significant speed up if a memory based filesystem is used.
#

   vardir_prefix => '/dev/shm',

# storage_prefix
#---------------
# Grammars and logs of RQG runs which showed the errors and output we are hunting
# for are stored in a subdirectory of "storage_prefix".
#

   storage_prefix => './storage',

# 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 => 1000000

}