# 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_by_pattern.pl # # Please # - copy this file to for example 1.cfg and # - adjust the settings so that they fit to your usage case and # 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 => # [ # '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 just hunt for some status code ( -> desired_status_codes ) use # expected_output => [ ] expected_output => [ 'mysql_execute_command .* at sql_parse.cc', 'mysql_parse .* at sql_parse.cc', 'dispatch_command .* at sql_parse.cc' ], # initial_grammar_file #--------------------- # File which should be used as the base for the simplification process. initial_grammar_file => 'conf/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 => { 'table-lock-wait-timeout' => 1, 'innodb-lock-wait-timeout' => 1, 'log-output' => 'file' }, reporter => 'Deadlock,Backtrace,Shutdown', gendata => 'conf/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() will run the 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 => 10, # 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, # 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 => 852, # 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' }