OES2SP2 Cross protocol locking causing NCP performance problems.

  • 7006994
  • 05-Oct-2010
  • 27-Apr-2012

Environment

Novell Open Enterprise Server 2 (OES 2) Linux Support Pack 2

Situation

Since the release of Novell Open Enterprise server 2 Support Pack 2, Novell supports the use of Cross Protocol File Locking. When installing a new OES2 SP2 server, by default the CROSS_PROTOCOL_LOCKS setting is enabled (0 = disabled, 1 = enabled).

A bug was found when CROSS_PROTOCOL_LOCKS is enabled, and when roaming profiles on the desktop environment are used to write the users profiles to the server.

This bug caused the /var/lib/samba/locking.tdb file to grow very large in size, as records were constantly written to this locking.tdb file, but the same records were never cleaned up after the client logged out.

E.g.:

OES2SP2LX:/var/lib/samba # ll
total 380824
drwxrwxr-x 9 root ntadmin      4096 Oct  9 02:04 drivers
-rw-r--r-- 1 root root    389566464 Mar 30 10:55 locking.tdb
drwxr-xr-x 2 root root         4096 Oct  9 02:04 netlogon
drwxrwx--- 2 root users        4096 Oct  9 02:04 profiles

Eventually the file could easily grow to 900+ MB's in size and this caused terrible performance problems when logging in (and out). In case the environment consists of a cluster, the problem would also follow the users.

Resolution

The setting for CROSS_PROTOCOL_LOCKS can be set to on or off on a number of ways such as using  Novell Remote Manager or ncpcon as a work-around.

A solution for the problem has been released with the ncp patch as was released with the  OES2 SP2 September 2010 Scheduled Maintenance patch (oes2sp2-Sept-2010-Scheduled-Maintenance-7145-6).

Additional Information

It is possible to verify which entries are written to the locking.tdb file by using the tdbdump command.
For example: "tdbdump /var/lib/samba/locking.tdb" will show you if entries that are written to this file are also being cleaned after a logout.

This will show as below :
tdbdump /var/lib/samba/locking.tdb
{
key(16) = "\16\00\00\00\00\00\00\008\99&\00\00\00\00\00"
data(193) = "\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\009%\00\00\00\00\00\00\03\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00U\FC=L\00\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\00\00\00\008\99&\00\00\00\00\00\04 \00\00\00\00\00\00\00\00\00\00\00\00\00\00/\00media/nss/TESTDST/727000/TRANSFER/User1/db1.ldb\00"
}
{
key(16) = "\16\00\00\00\00\00\00\002\99&\00\00\00\00\00"
data(193) = "\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\009%\00\00\00\00\00\00\03\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00U\FC=L\00\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\00\00\00\002\99&\00\00\00\00\00\FE\1F\00\00\00\00\00\00\00\00\00\00\00\00\00\00/\00media/nss/TESTDST/727000/TRANSFER/User1/db1.mdb\00"
}
{
key(16) = "\16\00\00\00\00\00\00\00/p\15\00\00\00\00\00"
data(238) = "\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\009%\00\00\00\00\00\00\03\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\B5\FB=L\00\00\00\00\00\00\00\00\00\00\00\00\16\00\00\00\00\00\00\00/p\15\00\00\00\00\00\09\05\00\00\00\00\00\00\00\00\00\00\00\00\00\00/\00media/nss/TESTDST/727000/DATA/Project/106  Novell/Cluster/Concep-Final.doc\00"

It is possible to manually verify the file's content this way, or it is possible to do the same using this in combination with the wc command to print the number of newlines, words, and bytes in the file.