0

I have apache virtualhost:

<VirtualHost IP_WAN:80>
  ServerName test.localnet
  DocumentRoot /srv/http/localnet/test/trunk/docroot
  <Directory /srv/http/localnet/test/trunk/docroot>
    Options Indexes
  </Directory>
</VirtualHost>

The partition /srv is NFS3 mounted filesystem:

172.16.0.2:/srv /srv nfs    nodev 0 0

at the server-side it's exported by:

/srv    172.16.0.0/255.255.255.240(rw,sync,no_subtree_check,no_root_squash)

directory /srv/http/localnet/test/trunk is absolute symlink to /srv/http/localnet/test/exports/trunk-v2

In the /srv/http/localnet/test/exports I have exported SVN trees (trunk-v1, trunk-v2, trunk-v3)

When I ask apache for http://test.localnet, it serves 200 OK and index from /srv/http/localnet/test/exports/trunk-v2/docroot

BUT:

If I remove symlink /srv/http/localnet/test/trunk and create a new one to another version (ln -s /srv/http/localnet/test/exports/trunk-v3 /srv/http/localnet/test/trunk), apache gives me 404 Not Found. It takes about seconds/minutes, then everything goes back to normal itself.

If I do ls -la /srv/http/localnet/test/trunk/ in this condition, it goes back to normal immediately. I think there's some problem with NFS cache, but I'm not able to find where exactly the problem occurs and how to prevent it. The symlink occupies the same inode as the previous one, both of targets (the old one and the new one) exists.

On the server side I have /srv partition mounted this way:

/dev/xvda7 on /srv type xfs (rw,nosuid,nodev)

I also use this parameters:

echo 262144 >/proc/sys/net/core/rmem_max
echo 262144 >/proc/sys/net/core/rmem_default
echo 262144 >/proc/sys/net/core/wmem_max
echo 262144 >/proc/sys/net/core/wmem_default
echo noop >/sys/block/xvda7/queue/scheduler
echo 0 >/sys/block/xvda7/queue/read_ahead_kb

I'm also trying to tune MTU of the network interface up to 9000, but without success.

Does anybody know, what's the problem? Why apache can't find the symlink until 'manually' refresh of the directory structure (ls)? Thanks a lot

Ondra

tloudev
  • 19
  • 5

1 Answers1

0

The solution seems to be: http://publib.boulder.ibm.com/httpserv/manual70/mod/core.html#enablemmap

"With an NFS-mounted DocumentRoot, the httpd may crash due to a segmentation fault if a file is deleted or truncated while the httpd has it memory-mapped"

This is exactly the situation, when removing the symlink in the path to the page. Hope it helps others :-)

tloudev
  • 19
  • 5