~ubuntu-branches/ubuntu/vivid/drizzle/vivid-proposed

« back to all changes in this revision

Viewing changes to tests/kewpie/randgen/lib/GenTest/Validator/Performance.pm

  • Committer: Package Import Robot
  • Author(s): Tobias Frost
  • Date: 2013-08-22 20:18:31 UTC
  • mto: (20.1.1 sid)
  • mto: This revision was merged to the branch mainline in revision 21.
  • Revision ID: package-import@ubuntu.com-20130822201831-gn3ozsh7o7wmc5tk
Tags: upstream-7.2.3
ImportĀ upstreamĀ versionĀ 7.2.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# This program is free software; you can redistribute it and/or modify
2
 
# it under the terms of the GNU General Public License as published by
3
 
# the Free Software Foundation; version 2 of the License.
4
 
#
5
 
# This program is distributed in the hope that it will be useful, but
6
 
# WITHOUT ANY WARRANTY; without even the implied warranty of
7
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
8
 
# General Public License for more details.
9
 
#
10
 
# You should have received a copy of the GNU General Public License
11
 
# along with this program; if not, write to the Free Software
12
 
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
13
 
# USA
14
 
 
15
 
require Exporter;
16
 
 
17
 
package GenTest::Validator::Performance;
18
 
 
19
 
@ISA = qw(GenTest GenTest::Validator);
20
 
 
21
 
use strict;
22
 
 
23
 
use GenTest;
24
 
use GenTest::Constants;
25
 
use GenTest::Executor;
26
 
use GenTest::Result;
27
 
use GenTest::Validator;
28
 
use GenTest::Comparator;
29
 
use Data::Dumper;
30
 
 
31
 
my %counters;
32
 
 
33
 
sub init {
34
 
        my ($comparator, $executors) = @_;
35
 
 
36
 
        foreach my $executor (@$executors) {
37
 
                if (!$executor->read_only()) {
38
 
                        say("Executor for dsn: ".$executor->dsn()." has been granted more than just SELECT privilege. Please restrict the user and try again");
39
 
                        return STATUS_ENVIRONMENT_FAILURE;
40
 
                } else {
41
 
                        $executor->setFlags($executor->flags() | EXECUTOR_FLAG_PERFORMANCE | EXECUTOR_FLAG_HASH_DATA );
42
 
                }
43
 
        }
44
 
        return STATUS_OK;
45
 
}
46
 
 
47
 
 
48
 
sub validate {
49
 
        my ($comparator, $executors, $results) = @_;
50
 
 
51
 
        die "Performance validator only works with two servers" if $#$results != 1;
52
 
 
53
 
        if ($results->[0]->query() !~ m{^\s*SELECT}sio) {
54
 
                $counters{'non-SELECT queries'}++;
55
 
                return STATUS_WONT_HANDLE;
56
 
        } elsif ($results->[0]->status() != $results->[1]->status()) {
57
 
                say("The two servers returned different status codes for query: ".$results->[0]->query());
58
 
                say("Server 1: status: ".$results->[0]->status()."; errstr: ".$results->[0]->errstr());
59
 
                say("Server 2: status: ".$results->[1]->status()."; errstr: ".$results->[1]->errstr());
60
 
                return STATUS_ERROR_MISMATCH;
61
 
        } elsif (GenTest::Comparator::compare($results->[0], $results->[1]) != STATUS_OK) {
62
 
                say("The two servers returned different result sets for query: ".$results->[0]->query());
63
 
                return STATUS_CONTENT_MISMATCH;
64
 
        }
65
 
 
66
 
 
67
 
        my @performances = ($results->[0]->performance(), $results->[1]->performance() );
68
 
        my @status_variables = ($performances[0]->sessionStatusVariables(), $performances[1]->sessionStatusVariables());
69
 
 
70
 
        my @variable_names = keys %{$status_variables[0]};
71
 
 
72
 
        my $notable = 0;
73
 
 
74
 
        say("====");
75
 
 
76
 
        foreach my $variable_name (@variable_names) {
77
 
                my @values = ($status_variables[0]->{$variable_name} , $status_variables[1]->{$variable_name});
78
 
                next if not defined $values[0] || not defined $values[1];
79
 
                next if $values[0] eq '' || $values[1] eq '';
80
 
                next if $values[0] eq $values[1];
81
 
 
82
 
                my $diff = abs($values[0] - $values[1]);
83
 
                next if $diff <= 2;
84
 
 
85
 
                my ($bigger_server, $smaller_server);
86
 
                if ($values[0] > $values[1]) {
87
 
                        $bigger_server = 0;
88
 
                        $smaller_server = 1;
89
 
                } else {
90
 
                        $bigger_server = 1;
91
 
                        $smaller_server = 0;
92
 
                }
93
 
 
94
 
 
95
 
#               if ($values[$smaller_server] eq '0') {
96
 
#                       $notable++;
97
 
#                       say ("Variable $variable_name is non-zero on $bigger_server: $values[$bigger_server]");
98
 
#               } else {
99
 
                        my $increase = $values[$smaller_server] == 0 ? $values[$bigger_server] : ($values[$bigger_server] / $values[$smaller_server]);
100
 
                        if ($increase > 10) {
101
 
                                $notable++;
102
 
# = $notable + ( $bigger_server == 0 ? 1 : -1 );
103
 
                                say ("Variable $variable_name is bigger on $bigger_server: $values[$bigger_server] vs. $values[$smaller_server]");
104
 
                        }
105
 
#               }
106
 
        }
107
 
 
108
 
        if ($notable != 0) {
109
 
                say("^^^ ($notable) query was: ".$results->[0]->query());
110
 
        }
111
 
 
112
 
        return STATUS_OK;       
113
 
}
114
 
 
115
 
1;