Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
O
OpenLDAP
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
James Lowden
OpenLDAP
Commits
ae8511fe
Commit
ae8511fe
authored
6 years ago
by
Ondřej Kuzník
Committed by
Quanah Gibson-Mount
6 years ago
Browse files
Options
Downloads
Patches
Plain Diff
Update ITS#8752 regression test
parent
84d7c168
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
tests/data/regressions/its8752/its8752
+263
-17
263 additions, 17 deletions
tests/data/regressions/its8752/its8752
tests/data/regressions/its8752/slapd.conf.mmr
+5
-4
5 additions, 4 deletions
tests/data/regressions/its8752/slapd.conf.mmr
with
268 additions
and
21 deletions
tests/data/regressions/its8752/its8752
+
263
−
17
View file @
ae8511fe
...
...
@@ -36,10 +36,21 @@ if test $dtest = N; then
exit
0
fi
# This mimics the scenario where a single server has been used until now (no
# syncprov either, so no contextCSN) and we convert it to a delta-MMR setup:
# 1. stop the server (note that there is likely no contextCSN in the DB at this point)
# 2. configure all servers to delta-replicate from each other and start them up
# - empty servers will start with a refresh of the main DB
# - when the refresh is successful they should change over to replicating the log
# 3. keep making changes on all servers to see things still work
echo
"This test tracks a case where slapd deadlocks during a significant write load"
echo
"See http://www.openldap.org/its/index.cgi/?findid=8752 for more information."
MMR
=
4
iterations
=
20000
check_sync_every
=
100
MAPSIZE
=
`
expr
100
\*
1024
\*
1024
`
XDIR
=
$TESTDIR
/srv
mkdir
-p
$TESTDIR
...
...
@@ -66,7 +77,7 @@ if test $WAIT != 0 ; then
fi
KILLPIDS
=
"
$PID
"
sleep
1
sleep
$SLEEP0
echo
"Using ldapsearch to check that slapd is running..."
for
i
in
0 1 2 3 4 5
;
do
...
...
@@ -76,8 +87,8 @@ for i in 0 1 2 3 4 5; do
if
test
$RC
=
0
;
then
break
fi
echo
"Waiting
5
seconds for slapd to start..."
sleep
5
echo
"Waiting
$SLEEP1
seconds for slapd to start..."
sleep
$SLEEP1
done
if
test
$RC
!=
0
;
then
...
...
@@ -149,7 +160,7 @@ fi
echo
"Stopping slapd and reworking configuration for MMR..."
test
$KILLSERVERS
!=
no
&&
kill
-HUP
$KILLPIDS
kill
-HUP
$KILLPIDS
wait
$KILLPIDS
KILLPIDS
=
...
...
@@ -160,7 +171,7 @@ while [ $n -le $MMR ]; do
MYCONF
=
`
eval echo
'$CONF'
$n
`
echo
"Starting provider slapd on TCP/IP URI
$MYURI
"
.
$CONFFILTER
$BACKEND
$MONITORDB
<
$ITSDIR
/slapd.conf.mmr
>
$TESTDIR
/slapd.conf
sed
-e
"s/MMR/
$n
/g"
$TESTDIR
/slapd.conf
>
$MYCONF
sed
-e
"s/MMR/
$n
/g"
-e
"s/wronglog/log/"
-e
"s/@MAPSIZE@/
$MAPSIZE
/"
$TESTDIR
/slapd.conf
>
$MYCONF
j
=
1
while
[
$j
-le
$MMR
]
;
do
MMCURI
=
`
eval echo
'$URI'
$j
`
...
...
@@ -178,7 +189,7 @@ while [ $n -le $MMR ]; do
read
foo
fi
KILLPIDS
=
"
$PID
$KILLPIDS
"
sleep
1
sleep
$SLEEP0
echo
"Using ldapsearch to check that provider slapd is running..."
for
i
in
0 1 2 3 4 5
;
do
...
...
@@ -188,10 +199,10 @@ while [ $n -le $MMR ]; do
if
test
$RC
=
0
;
then
break
fi
echo
"Waiting
5
seconds for slapd to start..."
sleep
5
echo
"Waiting
$SLEEP1
seconds for slapd to start..."
sleep
$SLEEP1
done
if
test
$RC
!=
0
;
then
echo
"ldapsearch failed (
$RC
)!"
test
$KILLSERVERS
!=
no
&&
kill
-HUP
$KILLPIDS
...
...
@@ -203,7 +214,7 @@ done
echo
"Setting up accesslog on each master..."
n
=
1
while
[
$n
-le
$MMR
]
;
do
echo
"Modifying dn: cn=Elmer_Fudd,ou=People,
dc=example,dc=com
on master
$n
"
echo
"Modifying dn: cn=Elmer_Fudd,ou=People,
$BASEDN
on master
$n
"
MYURI
=
`
eval echo
'$URI'
$n
`
$LDAPMODIFY
-v
-D
"
$MANAGERDN
"
-H
$MYURI
-w
$PASSWD
>
\
$TESTOUT
2>&1
<<
EOMODS
...
...
@@ -213,14 +224,68 @@ changetype: modify
replace: sn
sn: Fudd
EOMODS
sleep
5
RC
=
$?
if
test
$RC
!=
0
;
then
echo
"ldapmodify failed (
$RC
)"
test
$KILLSERVERS
!=
no
&&
kill
-HUP
$KILLPIDS
exit
1
fi
sleep
$SLEEP0
n
=
`
expr
$n
+ 1
`
done
echo
"Sleeping 30 seconds to ensure replication is reconciled between all nodes"
echo
"The next step of the test will perform 20000 random write operations and may take some time."
#echo "Letting server 1 establish its own contextCSN..."
#echo "Modifying dn: cn=Elmer_Fudd,ou=People,$BASEDN on $URI1"
#$LDAPMODIFY -v -D "$MANAGERDN" -H $URI1 -w $PASSWD > \
# $TESTOUT 2>&1 << EOMODS
#dn: cn=Elmer_Fudd,ou=People,$BASEDN
#changetype: modify
#replace: sn
#sn: Fudd
#EOMODS
for
i
in
0 1 2 3 4 5
;
do
j
=
1
while
[
$j
-le
$MMR
]
;
do
MYURI
=
`
eval echo
'$URI'
$j
`
$LDAPSEARCH
-b
"
$BASEDN
"
-H
"
$MYURI
"
\
'*'
'+'
>
"
$TESTDIR
/server
$j
.out"
2>&1
RC
=
$?
if
test
$RC
!=
0
;
then
echo
"ldapsearch failed (
$RC
)!"
test
$KILLSERVERS
!=
no
&&
kill
-HUP
$KILLPIDS
exit
$RC
fi
$LDIFFILTER
-s
a <
"
$TESTDIR
/server
$j
.out"
>
"
$TESTDIR
/server
$j
.flt"
j
=
`
expr
$j
+ 1
`
done
in_sync
=
1
j
=
1
while
[
$j
-lt
$MMR
]
;
do
k
=
$j
j
=
`
expr
$j
+ 1
`
$CMP
"
$TESTDIR
/server
$k
.flt"
"
$TESTDIR
/server
$j
.flt"
>
$CMPOUT
if
test
$?
!=
0
;
then
in_sync
=
0
fi
done
if
test
$in_sync
=
1
;
then
break
fi
echo
"Waiting
$SLEEP1
seconds for servers to catch up..."
sleep
$SLEEP1
done
if
test
$in_sync
=
0
;
then
echo
"Servers did not replicate in time"
test
$KILLSERVERS
!=
no
&&
kill
-HUP
$KILLPIDS
exit
1
fi
echo
"The next step of the test will perform
$iterations
random write operations and may take some time."
echo
"As this test is for a deadlock, it will take manual intervention to exit the test if one occurs."
sleep
30
echo
"Starting random master/entry modifications..."
DN1
=
"cn=Elmer_Fudd,ou=People,
$BASEDN
"
...
...
@@ -236,17 +301,17 @@ DN4="cn=Daffy_Duck,ou=People,$BASEDN"
VAL4
=
"Duck"
n
=
1
while
[
$n
-le
20000
]
;
do
while
[
$n
-le
$iterations
]
;
do
seed
=
`
date
+%N|sed s/...
$/
/
`
rvalue
=
`
echo
|awk
"BEGIN {srand(
$seed
)
{print int(1+rand()*
4
)}}"
`
{print int(1+rand()*
$MMR
)}}"
`
MYURI
=
`
eval echo
'$URI'
$rvalue
`
seed
=
`
date
+%N|sed s/...
$/
/
`
rvalue
=
`
echo
|awk
"BEGIN {srand(
$seed
)
{print int(1+rand()*4)}}"
`
MYDN
=
`
eval echo
'$DN'
$rvalue
`
MYVAL
=
`
eval echo
'$VAL'
$rvalue
`
echo
"Modifying
$MYURI
entry
$MYDN
with value
$MYVAL
iteration
$n
of
20000
"
echo
"Modifying
$MYURI
entry
$MYDN
with value
$MYVAL
iteration
$n
of
$iterations
"
$LDAPMODIFY
-v
-D
"
$MANAGERDN
"
-H
$MYURI
-w
$PASSWD
>
\
$TESTOUT
2>&1
<<
EOMODS
...
...
@@ -255,6 +320,187 @@ changetype: modify
replace: sn
sn:
$MYVAL
EOMODS
RC
=
$?
if
test
$RC
!=
0
;
then
echo
"ldapmodify failed (
$RC
)"
test
$KILLSERVERS
!=
no
&&
kill
-HUP
$KILLPIDS
exit
1
fi
if
[
"
$check_sync_every
"
-gt
0
]
&&
[
`
expr
$n
%
$check_sync_every
`
=
0
]
;
then
i
=
1
echo
"Checking replication status before we start iteration
$n
..."
for
i
in
0 1 2 3 4 5
;
do
j
=
1
while
[
$j
-le
$MMR
]
;
do
MYURI
=
`
eval echo
'$URI'
$j
`
echo
"Reading database from server
$j
..."
$LDAPSEARCH
-b
"
$BASEDN
"
-H
"
$MYURI
"
\
'*'
'+'
>
"
$TESTDIR
/server
$j
.out"
2>&1
RC
=
$?
if
test
$RC
!=
0
;
then
echo
"ldapsearch failed (
$RC
)!"
test
$KILLSERVERS
!=
no
&&
kill
-HUP
$KILLPIDS
exit
$RC
fi
$LDIFFILTER
-s
a <
"
$TESTDIR
/server
$j
.out"
>
"
$TESTDIR
/server
$j
.flt"
j
=
`
expr
$j
+ 1
`
done
in_sync
=
1
j
=
1
while
[
$j
-lt
$MMR
]
;
do
k
=
`
expr
$j
+ 1
`
$CMP
"
$TESTDIR
/server
$j
.flt"
"
$TESTDIR
/server
$k
.flt"
>
$CMPOUT
if
test
$?
!=
0
;
then
in_sync
=
0
fi
j
=
$k
done
if
test
$in_sync
=
1
;
then
break
fi
echo
"Waiting
$SLEEP1
seconds for servers to catch up..."
sleep
$SLEEP1
done
if
test
$in_sync
=
0
;
then
echo
"Servers did not replicate in time"
test
$KILLSERVERS
!=
no
&&
kill
-HUP
$KILLPIDS
exit
1
fi
fi
n
=
`
expr
$n
+ 1
`
done
kill
-HUP
$KILLPIDS
wait
$KILLPIDS
echo
"The next step of the test will perform
$iterations
random write operations and may take some time."
echo
"As this test is for a deadlock, it will take manual intervention to exit the test if one occurs."
echo
"Starting servers again, this time with the wrong logbase setting..."
KILLPIDS
=
n
=
1
while
[
$n
-le
$MMR
]
;
do
MYURI
=
`
eval echo
'$URI'
$n
`
MYLOG
=
`
eval echo
'$LOG'
$n
`
MYCONF
=
`
eval echo
'$CONF'
$n
`
echo
"Starting provider slapd on TCP/IP URI
$MYURI
"
.
$CONFFILTER
$BACKEND
$MONITORDB
<
$ITSDIR
/slapd.conf.mmr
>
$TESTDIR
/slapd.conf
sed
-e
"s/MMR/
$n
/g"
-e
"s/@MAPSIZE@/
$MAPSIZE
/"
$TESTDIR
/slapd.conf
>
$MYCONF
j
=
1
while
[
$j
-le
$MMR
]
;
do
MMCURI
=
`
eval echo
'$URI'
$j
`
sed
-e
"s|MMC
${
j
}
|
${
MMCURI
}
|"
$MYCONF
>
$TESTDIR
/slapd.conf
mv
$TESTDIR
/slapd.conf
$MYCONF
j
=
`
expr
$j
+ 1
`
done
if
[
-f
$TESTDIR
/slapd.conf
]
;
then
rm
-f
$TESTDIR
/slapd.conf
fi
$SLAPD
-f
$MYCONF
-h
$MYURI
-d
$LVL
$TIMING
>>
$MYLOG
2>&1 &
PID
=
$!
if
test
$WAIT
!=
0
;
then
echo
PID
$PID
read
foo
fi
KILLPIDS
=
"
$PID
$KILLPIDS
"
sleep
$SLEEP0
echo
"Using ldapsearch to check that provider slapd is running..."
for
i
in
0 1 2 3 4 5
;
do
$LDAPSEARCH
-s
base
-b
""
-H
$MYURI
\
'objectclass=*'
>
/dev/null 2>&1
RC
=
$?
if
test
$RC
=
0
;
then
break
fi
echo
"Waiting
$SLEEP1
seconds for slapd to start..."
sleep
$SLEEP1
done
if
test
$RC
!=
0
;
then
echo
"ldapsearch failed (
$RC
)!"
test
$KILLSERVERS
!=
no
&&
kill
-HUP
$KILLPIDS
exit
$RC
fi
n
=
`
expr
$n
+ 1
`
done
echo
"Starting random master/entry modifications..."
n
=
1
while
[
$n
-le
$iterations
]
;
do
seed
=
`
date
+%N|sed s/...
$/
/
`
rvalue
=
`
echo
|awk
"BEGIN {srand(
$seed
)
{print int(1+rand()*
$MMR
)}}"
`
MYURI
=
`
eval echo
'$URI'
$rvalue
`
seed
=
`
date
+%N|sed s/...
$/
/
`
rvalue
=
`
echo
|awk
"BEGIN {srand(
$seed
)
{print int(1+rand()*4)}}"
`
MYDN
=
`
eval echo
'$DN'
$rvalue
`
MYVAL
=
`
eval echo
'$VAL'
$rvalue
`
echo
"Modifying
$MYURI
entry
$MYDN
with value
$MYVAL
iteration
$n
of
$iterations
"
$LDAPMODIFY
-v
-D
"
$MANAGERDN
"
-H
$MYURI
-w
$PASSWD
>
\
$TESTOUT
2>&1
<<
EOMODS
dn:
$MYDN
changetype: modify
replace: sn
sn:
$MYVAL
EOMODS
RC
=
$?
if
test
$RC
!=
0
;
then
echo
"ldapmodify failed (
$RC
)"
test
$KILLSERVERS
!=
no
&&
kill
-HUP
$KILLPIDS
exit
1
fi
if
[
"
$check_sync_every
"
-gt
0
]
&&
[
`
expr
$n
%
$check_sync_every
`
=
0
]
;
then
i
=
1
echo
"Checking replication status before we start iteration
$n
..."
for
i
in
0 1 2 3 4 5
;
do
j
=
1
while
[
$j
-le
$MMR
]
;
do
MYURI
=
`
eval echo
'$URI'
$j
`
echo
"Reading database from server
$j
..."
$LDAPSEARCH
-b
"
$BASEDN
"
-H
"
$MYURI
"
\
'*'
'+'
>
"
$TESTDIR
/server
$j
.out"
2>&1
RC
=
$?
if
test
$RC
!=
0
;
then
echo
"ldapsearch failed (
$RC
)!"
test
$KILLSERVERS
!=
no
&&
kill
-HUP
$KILLPIDS
exit
$RC
fi
$LDIFFILTER
-s
a <
"
$TESTDIR
/server
$j
.out"
>
"
$TESTDIR
/server
$j
.flt"
j
=
`
expr
$j
+ 1
`
done
in_sync
=
1
j
=
1
while
[
$j
-lt
$MMR
]
;
do
k
=
`
expr
$j
+ 1
`
$CMP
"
$TESTDIR
/server
$j
.flt"
"
$TESTDIR
/server
$k
.flt"
>
$CMPOUT
if
test
$?
!=
0
;
then
in_sync
=
0
fi
j
=
$k
done
if
test
$in_sync
=
1
;
then
break
fi
echo
"Waiting
$SLEEP1
seconds for servers to catch up..."
sleep
$SLEEP1
done
if
test
$in_sync
=
0
;
then
echo
"Servers did not replicate in time"
test
$KILLSERVERS
!=
no
&&
kill
-HUP
$KILLPIDS
exit
1
fi
fi
n
=
`
expr
$n
+ 1
`
done
...
...
This diff is collapsed.
Click to expand it.
tests/data/regressions/its8752/slapd.conf.mmr
+
5
−
4
View file @
ae8511fe
...
...
@@ -57,7 +57,7 @@ syncrepl
scope=sub
schemachecking=on
retry="5 10 60 +"
logbase="cn=
access
log"
logbase="cn=log"
logfilter="(&(objectClass=auditWriteObject)(reqResult=0))"
syncdata=accesslog
sizeLimit=unlimited
...
...
@@ -75,7 +75,7 @@ syncrepl
scope=sub
schemachecking=on
retry="5 10 60 +"
logbase="cn=
access
log"
logbase="cn=log"
logfilter="(&(objectClass=auditWriteObject)(reqResult=0))"
syncdata=accesslog
sizeLimit=unlimited
...
...
@@ -93,7 +93,7 @@ syncrepl
scope=sub
schemachecking=on
retry="5 10 60 +"
logbase="cn=
access
log"
logbase="cn=log"
logfilter="(&(objectClass=auditWriteObject)(reqResult=0))"
syncdata=accesslog
sizeLimit=unlimited
...
...
@@ -111,7 +111,7 @@ syncrepl
scope=sub
schemachecking=on
retry="5 10 60 +"
logbase="cn=
access
log"
logbase="cn=log"
logfilter="(&(objectClass=auditWriteObject)(reqResult=0))"
syncdata=accesslog
sizeLimit=unlimited
...
...
@@ -135,6 +135,7 @@ rootdn "cn=Manager,dc=example,dc=com"
#~null~#directory @TESTDIR@/srvMMR/db.2
#indexdb#index objectClass eq
#indexdb#index entryCSN,entryUUID,reqEnd,reqResult,reqStart eq
#mdb#maxsize @MAPSIZE@
overlay syncprov
syncprov-reloadhint true
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment