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
fc49099e
Commit
fc49099e
authored
Nov 27, 2006
by
joerg@trift2
Browse files
Options
Browse Files
Download
Plain Diff
Merge jbruehe@bk-internal.mysql.com:/home/bk/mysql-5.1-build
into trift2.:/MySQL/M51/push-5.1
parents
f7ef919f
b1f020e5
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
163 additions
and
1 deletion
+163
-1
mysql-test/lib/mtr_unique.pl
mysql-test/lib/mtr_unique.pl
+156
-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 @
fc49099e
#
# 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
;
my
$changed
=
0
;
my
$can_use_ps
=
`
ps -e | grep '^[ ]*$$ '
`;
if
(
eval
("
readlink '
$file
'
")
||
eval
("
readlink '
$file
.sem'
"))
{
die
'
lock file is a symbolic link
';
}
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
;
}
if
(
eval
("
readlink '
$file
'
")
||
eval
("
readlink '
$file
.sem'
"))
{
die
'
lock file is a symbolic link
';
}
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
;
if
(
$can_use_ps
)
{
my
$res
=
`
ps -e | grep '^[ ]*
$pid
'
`;
if
(
!
$res
)
{
print
"
Ignoring slot
$id
used by missing process
$pid
.
\n
";
delete
$taken
{
$id
};
++
$changed
;
}
}
}
for
(
my
$i
=
$min
;
$i
<=
$max
;
++
$i
)
{
if
(
!
exists
$taken
{
$i
})
{
$ret
=
$i
;
$taken
{
$i
}
=
$$
;
++
$changed
;
last
;
}
}
if
(
$changed
)
{
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
;
$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
30
;
$ret
=
mtr_require_unique_id
(
$_
[
0
],
$_
[
1
],
$_
[
2
]);
print
"
Waiting for unique id to become available...
\n
"
unless
$ret
;
}
return
$ret
;
}
#
# Release a unique ID.
#
sub
mtr_release_unique_id
($$)
{
my
$file
=
shift
;
my
$myid
=
shift
;
if
(
eval
("
readlink '
$file
'
")
||
eval
("
readlink '
$file
.sem'
"))
{
die
'
lock file is a symbolic link
';
}
open
SEM
,
"
>
",
"
$file
.sem
"
or
die
"
can't write to
$file
.sem
";
flock
SEM
,
LOCK_EX
or
die
"
can't lock
$file
.sem
";
if
(
eval
("
readlink '
$file
'
")
||
eval
("
readlink '
$file
.sem'
"))
{
die
'
lock file is a symbolic link
';
}
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 @
fc49099e
...
...
@@ -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