Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
880b4e87
Commit
880b4e87
authored
Nov 17, 2006
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
adaption from 4.1
parents
69275092
c3d6927d
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
126 additions
and
1 deletion
+126
-1
mysql-test/lib/mtr_unique.pl
mysql-test/lib/mtr_unique.pl
+119
-0
mysql-test/mysql-test-run.pl
mysql-test/mysql-test-run.pl
+7
-1
No files found.
mysql-test/lib/mtr_unique.pl
0 → 100644
View file @
880b4e87
#
# This file is used from mysql-test-run.pl when choosing
# port numbers and directories to use for running mysqld.
#
use
strict
;
use
Fcntl
'
:flock
';
#
# Requested IDs are stored in a hash and released upon END.
#
my
%
mtr_unique_assigned_ids
=
();
END
{
while
(
my
(
$id
,
$file
)
=
each
(
%
mtr_unique_assigned_ids
))
{
print
"
Autoreleasing
$file
:
$id
\n
";
mtr_release_unique_id
(
$file
,
$id
);
}
}
#
# Require a unique, numerical ID, given a file name (where all
# requested IDs are stored), a minimum and a maximum value.
#
# We use flock to implement locking for the ID file and ignore
# possible problems arising from lack of support for it on
# some platforms (it should work on most, and the possible
# race condition would occur rarely). The proper solution for
# this is a daemon that manages IDs, of course.
#
# If no unique ID within the specified parameters can be
# obtained, return undef.
#
sub
mtr_require_unique_id
($$$)
{
my
$file
=
shift
;
my
$min
=
shift
;
my
$max
=
shift
;
my
$ret
=
undef
;
chmod
0777
,
"
$file
.sem
";
open
SEM
,
"
>
",
"
$file
.sem
"
or
die
"
can't write to
$file
.sem
";
flock
SEM
,
LOCK_EX
or
die
"
can't lock
$file
.sem
";
if
(
!
-
e
$file
)
{
open
FILE
,
"
>
",
$file
or
die
"
can't create
$file
";
close
FILE
;
}
chmod
0777
,
$file
;
open
FILE
,
"
+<
",
$file
or
die
"
can't open
$file
";
select
undef
,
undef
,
undef
,
0.2
;
seek
FILE
,
0
,
0
;
my
%
taken
=
();
while
(
<
FILE
>
)
{
chomp
;
my
(
$id
,
$pid
)
=
split
/ /
;
$taken
{
$id
}
=
$pid
;
}
seek
FILE
,
0
,
2
;
for
(
my
$i
=
$min
;
$i
<=
$max
;
++
$i
)
{
if
(
!
exists
$taken
{
$i
})
{
print
FILE
"
$i
$$
\n
";
$ret
=
$i
;
last
;
}
}
close
FILE
;
flock
SEM
,
LOCK_UN
or
warn
"
can't unlock
$file
.sem
";
close
SEM
;
$mtr_unique_assigned_ids
{
$ret
}
=
$file
if
defined
$ret
;
return
$ret
;
}
#
# Require a unique ID like above, but sleep if no ID can be
# obtained immediately.
#
sub
mtr_require_unique_id_and_wait
($$$)
{
my
$ret
=
mtr_require_unique_id
(
$_
[
0
],
$_
[
1
],
$_
[
2
]);
while
(
!
defined
$ret
)
{
sleep
10
;
$ret
=
mtr_require_unique_id
(
$_
[
0
],
$_
[
1
],
$_
[
2
]);
}
return
$ret
;
}
#
# Release a unique ID.
#
sub
mtr_release_unique_id
($$)
{
my
$file
=
shift
;
my
$myid
=
shift
;
open
SEM
,
"
>
",
"
$file
.sem
"
or
die
"
can't write to
$file
.sem
";
flock
SEM
,
LOCK_EX
or
die
"
can't lock
$file
.sem
";
if
(
!
-
e
$file
)
{
open
FILE
,
"
>
",
$file
or
die
"
can't create
$file
";
close
FILE
;
}
open
FILE
,
"
+<
",
$file
or
die
"
can't open
$file
";
select
undef
,
undef
,
undef
,
0.2
;
seek
FILE
,
0
,
0
;
my
%
taken
=
();
while
(
<
FILE
>
)
{
chomp
;
my
(
$id
,
$pid
)
=
split
/ /
;
$taken
{
$id
}
=
$pid
;
}
delete
$taken
{
$myid
};
seek
FILE
,
0
,
0
;
truncate
FILE
,
0
or
die
"
can't truncate
$file
";
for
my
$k
(
keys
%
taken
)
{
print
FILE
$k
.
'
'
.
$taken
{
$k
}
.
"
\n
";
}
close
FILE
;
flock
SEM
,
LOCK_UN
or
warn
"
can't unlock
$file
.sem
";
close
SEM
;
delete
$mtr_unique_assigned_ids
{
$myid
};
}
1
;
mysql-test/mysql-test-run.pl
View file @
880b4e87
...
...
@@ -88,6 +88,7 @@ require "lib/mtr_diff.pl";
require
"
lib/mtr_match.pl
";
require
"
lib/mtr_misc.pl
";
require
"
lib/mtr_stress.pl
";
require
"
lib/mtr_unique.pl
";
$
Devel::Trace::
TRACE
=
1
;
...
...
@@ -441,7 +442,6 @@ sub main () {
mtr_exit
(
0
);
}
##############################################################################
#
# Default settings
...
...
@@ -479,6 +479,12 @@ sub command_line_setup () {
# But a fairly safe range seems to be 5001 - 32767
if
(
$ENV
{'
MTR_BUILD_THREAD
'}
)
{
# If so requested, we try to avail ourselves of a unique build thread number.
if
(
lc
(
$ENV
{'
MTR_BUILD_THREAD
'})
eq
'
auto
'
)
{
print
"
Requesting build thread...
";
$ENV
{'
MTR_BUILD_THREAD
'}
=
mtr_require_unique_id_and_wait
("
/tmp/mysql-test-ports
",
200
,
299
);
print
"
got
"
.
$ENV
{'
MTR_BUILD_THREAD
'}
.
"
\n
";
}
# Up to two masters, up to three slaves
$opt_master_myport
=
$ENV
{'
MTR_BUILD_THREAD
'}
*
10
+
10000
;
# and 1
$opt_slave_myport
=
$opt_master_myport
+
2
;
# and 3 4
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment