Package: slapd
Version: 2.4.31-2+deb7u2
+X-Debbugs-CC: r...@openldap.org

Greetings,

I've noticed that sometimes the "slapd" fails to stop. I can reproduce the 
problem only on machines with multiple cores  (more than 2) when there are many
concurrent connections and the server is under a heavy "stress" .
Note that I tried the current standard version (2.4.31-deb7u2) as well as the 
wheezy-backports -  2.4.31+really2.4.40+dfsg-1+deb8u1~bpo70+1 .

In the logs i was able to identify the first "shutdown" log:
   daemon: shutdown requested and initiated
However the next expected shutdown logs are missing ("waiting for 
...operations/tasks to finish" and "slapd stopped") .
Hence, i believe that it's related to closing the sockets/listeners (this is my 
guess based on the source code, however i never debugged/proved it).
Please note that i'm using virtual environment so i was able to reproduce it 
only when i used more than 4 cores.
Also please note that my system is a customized (hardened) Debian wheezy (7.9) 
and I built the slapd from the Debian sources (apt-get source ...) .
I REALLY (!!) hope that this is valid bug since I'm surprised that I'm the only 
one who encountered this situation.

How to reproduced it:
-------------------------------
I guess that there are a few ways to reproduce it , I managed to easily 
reproduce it with two terminates - one producing "ldapsearch" stress and the 
other restarting slapd :
- Open two terminals.
- On terminal #1 i'm just manually running  "slapd restart" commands:
   # /etc/init.d/slapd status ; /etc/init.d/slapd restart
- On terminal #2 i'm running a infinite loops of simple "ldapsearch" (100
concurrent processes running loops of ldapsearch). Terminal #2 is trying to
simulate many concurrent read operations. see "more information" later for the
exact scripts that i used.

Incorrect behavior:
-------------------------
The "slapd restart" works a few times, and then the "stop" operation fails.
The stop continues to fail even if i stop all "stress" and terminate all
ldapsearch/connections  (CPU is 99% idle !)

Expected Behavior:
-------------------------
All slapd stop/restart operations complete successfully


More Information (optional - my exact scripts):
----------------------------------------------------------------
On terminal#2 i used a very simple script to generate a "read only" stress:
# cat > ldaploop.sh << EOF
#!/bin/sh
while true ; do  ldapsearch -x -Z ; done
EOF

# cat > manyloops.sh << "EOF"
#!/bin/sh
for i in `seq 1 100` ; do ( ./ldaploop.sh &) ; done
EOF

As previously mentioned, i ran the "manyloops.sh" to generate 100 running
processes where each one simply runs "ldapsearch" (locally).

thanks in advance,
Zvika Ferentz

Reply via email to