~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to runall-new.pl

  • Committer: Bernt M. Johnsen
  • Date: 2010-03-03 13:41:57 UTC
  • mto: (0.101.22 lp-randgen-xml)
  • mto: This revision was merged to the branch mainline in revision 2435.
  • Revision ID: bernt.johnsen@sun.com-20100303134157-an7zz9p726g3bnfo
More replication fixes + someother stuff

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#!/usr/bin/perl
2
2
 
3
 
# Copyright (C) 2010 Sun Microsystems, Inc. All rights reserved.
 
3
# Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
4
4
# Use is subject to license terms.
5
5
#
6
6
# This program is free software; you can redistribute it and/or modify
25
25
use strict;
26
26
use GenTest;
27
27
use GenTest::Server::MySQLd;
 
28
use GenTest::Server::ReplMySQLd;
28
29
 
29
30
$| = 1;
30
31
if (windows()) {
45
46
use Cwd;
46
47
 
47
48
my $database = 'test';
48
 
my @master_dsns;
 
49
my @dsns;
49
50
 
50
51
my ($gendata, @basedirs, @mysqld_options, @vardirs, $rpl_mode,
51
52
    $engine, $help, $debug, $validators, $reporters, $grammar_file,
97
98
        exit($help ? 0 : 1);
98
99
}
99
100
 
100
 
say("Copyright (c) 2010 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.");
 
101
say("Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms.");
101
102
say("Please see http://forge.mysql.com/wiki/Category:RandomQueryGenerator for more information on this test framework.");
102
103
say("Starting \n# $0 \\ \n# ".join(" \\ \n# ", @ARGV_saved));
103
104
 
119
120
    exit (STATUS_ENVIRONMENT_FAILURE);
120
121
}
121
122
 
122
 
my $master_port = 10000 + 10 * $build_thread;
123
 
my $slave_port = 10000 + 10 * $build_thread + 2;
124
 
my @master_ports = ($master_port,$slave_port);
125
 
 
126
 
say("master_port : $master_port slave_port : $slave_port master_ports : @master_ports MTR_BUILD_THREAD : $build_thread ");
127
 
 
128
 
$ENV{MTR_BUILD_THREAD} = $build_thread;
 
123
my @ports = (10000 + 10 * $build_thread, 10000 + 10 * $build_thread + 2);
 
124
 
 
125
say("master_port : $ports[0] slave_port : $ports[1] ports : @ports MTR_BUILD_THREAD : $build_thread ");
129
126
 
130
127
#
131
128
# If the user has provided two vardirs and one basedir, start second
175
172
#
176
173
 
177
174
my @server;
 
175
my $rplsrv;
178
176
        
179
177
if ($rpl_mode ne '') {
180
 
    croak "replication to be implemented here";
181
 
}
182
 
foreach my $server_id (0..1) {
183
 
        next if $basedirs[$server_id] eq '';
184
 
    
185
 
        my @options;
186
 
        push @options, lc("--$engine") if defined $engine && lc($engine) ne lc('myisam');
187
 
    
188
 
        push @options, "--sql-mode=no_engine_substitution" if join(' ', @ARGV_saved) !~ m{sql-mode}io;
189
 
    
190
 
        if (defined $mysqld_options[$server_id]) {
191
 
        push @options, @{$mysqld_options[$server_id]};
 
178
    my @options;
 
179
    push @options, lc("--$engine") if defined $engine && lc($engine) ne lc('myisam');
 
180
    
 
181
    push @options, "--sql-mode=no_engine_substitution" if join(' ', @ARGV_saved) !~ m{sql-mode}io;
 
182
    
 
183
    if (defined $mysqld_options[0]) {
 
184
        push @options, @{$mysqld_options[0]};
192
185
    }
193
186
    
194
 
        if (
195
 
                ($rpl_mode ne '') &&
196
 
                ($server_id == 0) &&
197
 
                (not defined $vardirs[1]) &&
198
 
                (not defined $mysqld_options[1])
199
 
        ) {
200
 
                push @options, "--slave_port=".$slave_port;
201
 
        }
202
 
    
203
 
    $server[$server_id] = GenTest::Server::MySQLd->new(basedir => $basedirs[$server_id],
204
 
                                                       vardir => $vardirs[$server_id],
205
 
                                                       port => $master_ports[$server_id],
206
 
                                                       start_dirty => $start_dirty,
207
 
                                                       valgrind => $valgrind,
208
 
                                                       valgrind_options => \@valgrind_options,
209
 
                                                       \@options);
210
 
    
211
 
    my $status = $server[$server_id]->startServer;
 
187
    $rplsrv = GenTest::Server::ReplMySQLd->new(basedir => $basedirs[0],
 
188
                                               master_vardir => $vardirs[0],
 
189
                                               master_port => $ports[0],
 
190
                                               slave_vardir => $vardirs[1],
 
191
                                               slave_port => $ports[1],
 
192
                                               mode => $rpl_mode,
 
193
                                               server_options => \@options,
 
194
                                               valgrind => $valgrind,
 
195
                                               valgrind_options => \@valgrind_options,
 
196
                                               start_dirty => $start_dirty);
 
197
    
 
198
    my $status = $rplsrv->startServer();
212
199
    
213
200
    if ($status > STATUS_OK) {
214
201
        stopServers();
215
 
        say(system("ls -l ".$server[$server_id]->datadir));
216
 
        croak("Could not start all servers");
217
 
    }
218
 
    
219
 
        if (
220
 
                ($server_id == 0) ||
221
 
                ($rpl_mode eq '') 
222
 
        ) {
223
 
        $master_dsns[$server_id] = $server[$server_id]->dsn($database);
224
 
        }
225
 
    
226
 
        if ((defined $master_dsns[$server_id]) && (defined $engine)) {
227
 
                my $dbh = DBI->connect($master_dsns[$server_id], undef, undef, { RaiseError => 1 } );
228
 
                $dbh->do("SET GLOBAL storage_engine = '$engine'");
229
 
        }
230
 
}
231
 
 
232
 
my $master_dbh = DBI->connect($server[0]->dsn($database), undef, undef, { RaiseError => 1 } );
233
 
 
234
 
if ($rpl_mode) {
235
 
    croak "replication to be implemented here";
 
202
        say(system("ls -l ".$rplsrv->master->datadir));
 
203
        say(system("ls -l ".$rplsrv->slave->datadir));
 
204
        croak("Could not start replicating server pair");
 
205
    }
 
206
    
 
207
    $dsns[0] = $rplsrv->master->dsn($database);
 
208
    $dsns[1] = undef; ## passed to gentest. No dsn for slave!
 
209
    $server[0] = $rplsrv->master;
 
210
    $server[1] = $rplsrv->slave;
 
211
    
 
212
} else {
 
213
    foreach my $server_id (0..1) {
 
214
        next if $basedirs[$server_id] eq '';
 
215
        
 
216
        my @options;
 
217
        push @options, lc("--$engine") if defined $engine && lc($engine) ne lc('myisam');
 
218
        
 
219
        push @options, "--sql-mode=no_engine_substitution" if join(' ', @ARGV_saved) !~ m{sql-mode}io;
 
220
        
 
221
        if (defined $mysqld_options[$server_id]) {
 
222
            push @options, @{$mysqld_options[$server_id]};
 
223
        }
 
224
        
 
225
        $server[$server_id] = GenTest::Server::MySQLd->new(basedir => $basedirs[$server_id],
 
226
                                                           vardir => $vardirs[$server_id],
 
227
                                                           port => $ports[$server_id],
 
228
                                                           start_dirty => $start_dirty,
 
229
                                                           valgrind => $valgrind,
 
230
                                                           valgrind_options => \@valgrind_options,
 
231
                                                           server_options => \@options);
 
232
        
 
233
        my $status = $server[$server_id]->startServer;
 
234
        
 
235
        if ($status > STATUS_OK) {
 
236
            stopServers();
 
237
            say(system("ls -l ".$server[$server_id]->datadir));
 
238
            croak("Could not start all servers");
 
239
        }
 
240
        
 
241
        if (
 
242
            ($server_id == 0) ||
 
243
            ($rpl_mode eq '') 
 
244
            ) {
 
245
            $dsns[$server_id] = $server[$server_id]->dsn($database);
 
246
        }
 
247
    
 
248
        if ((defined $dsns[$server_id]) && (defined $engine)) {
 
249
            my $dbh = DBI->connect($dsns[$server_id], undef, undef, { RaiseError => 1 } );
 
250
            $dbh->do("SET GLOBAL storage_engine = '$engine'");
 
251
        }
 
252
    }
236
253
}
237
254
 
238
255
#
250
267
push @gentest_options, "--threads=$threads" if defined $threads;
251
268
push @gentest_options, "--queries=$queries" if defined $queries;
252
269
push @gentest_options, "--duration=$duration" if defined $duration;
253
 
push @gentest_options, "--dsn=$master_dsns[0]" if defined $master_dsns[0];
254
 
push @gentest_options, "--dsn=$master_dsns[1]" if defined $master_dsns[1];
 
270
push @gentest_options, "--dsn=$dsns[0]" if defined $dsns[0];
 
271
push @gentest_options, "--dsn=$dsns[1]" if defined $dsns[1];
255
272
push @gentest_options, "--grammar=$grammar_file";
256
273
push @gentest_options, "--redefine=$redefine_file" if defined $redefine_file;
257
274
push @gentest_options, "--seed=$seed" if defined $seed;
273
290
say("gentest.pl exited with exit status ".($gentest_result >> 8));
274
291
exit_test($gentest_result >> 8) if $gentest_result > 0;
275
292
 
276
 
if ($rpl_mode) {
277
 
    croak "replication to be implemented here";
278
 
}
279
 
 
280
293
#
281
294
# Compare master and slave, or two masters
282
295
#
283
296
 
284
297
if ($rpl_mode || (defined $basedirs[1])) {
285
 
        my @dump_ports = ($master_ports[0]);
 
298
    if ($rpl_mode ne '') {
 
299
        $rplsrv->waitForSlaveSync;
 
300
    }
 
301
        my @dump_ports = ($ports[0]);
286
302
        if ($rpl_mode) {
287
 
                push @dump_ports, $slave_port;
 
303
                push @dump_ports, $ports[1];
288
304
        } elsif (defined $basedirs[1]) {
289
 
                push @dump_ports, $master_ports[1];
 
305
                push @dump_ports, $ports[1];
290
306
        }
291
 
 
 
307
    
292
308
        my @dump_files;
293
 
 
 
309
    
294
310
        foreach my $i (0..$#dump_ports) {
295
311
                say("Dumping server on port $dump_ports[$i]...");
296
312
                $dump_files[$i] = tmpdir()."/server_".$$."_".$i.".dump";
297
 
 
 
313
        
298
314
                my $dump_result = system("\"$client_basedir/mysqldump\" --hex-blob --no-tablespaces --skip-triggers --compact --order-by-primary --skip-extended-insert --no-create-info --host=127.0.0.1 --port=$dump_ports[$i] --user=root $database | sort > $dump_files[$i]");
299
315
                exit_test($dump_result >> 8) if $dump_result > 0;
300
316
        }
301
 
 
 
317
    
302
318
        say("Comparing SQL dumps...");
303
319
        my $diff_result = system("diff -u $dump_files[0] $dump_files[1]");
304
320
        $diff_result = $diff_result >> 8;
305
 
 
 
321
    
306
322
        if ($diff_result == 0) {
307
323
                say("No differences were found between servers.");
308
324
        }
309
 
 
 
325
    
310
326
        foreach my $dump_file (@dump_files) {
311
327
                unlink($dump_file);
312
328
        }
313
 
 
 
329
    
314
330
        exit_test($diff_result);
315
331
}
316
332
 
318
334
stopServers();
319
335
 
320
336
sub stopServers {
321
 
    foreach my $srv (@server) {
322
 
        if ($srv) {
323
 
            $srv->stopServer;
 
337
    if ($rpl_mode ne '') {
 
338
        $rplsrv->stopServer();
 
339
    } else {
 
340
        foreach my $srv (@server) {
 
341
            if ($srv) {
 
342
                $srv->stopServer;
 
343
            }
324
344
        }
325
345
    }
326
346
}
327
347
 
328
348
 
329
349
sub help {
330
 
 
 
350
    
331
351
        print <<EOF
332
 
Copyright (c) 2008-2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.
 
352
Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved. Use is subject to license terms.
333
353
 
334
354
$0 - Run a complete random query generation test, including server start with replication and master/slave verification
335
355
    
387
407
 
388
408
sub exit_test {
389
409
        my $status = shift;
390
 
 
 
410
    stopServers();
391
411
        print localtime()." [$$] $0 will exit with exit status $status\n";
392
412
        safe_exit($status);
393
413
}