Wolfgang Haupt wrote:
> I've been playing around recently at home with mysql

Oh?

> I was interested why smb breaks the oplock and found that every time I
> execute my command:
> SQLiteDataReader reader = command.ExecuteReader(); // C# code
> wireshark shows me 3 lock requests/responses to/from smb:
>
> 1. exclusive lock, fail immediately
> 2. shared lock, fail immediately
> 3. unlock
>
> I wonder if SQLite needs an exclusive lock (which obviously is an exclusive
> lock in smb language, maybe not in ntfs/fat language) for select's on the
> database, or if the translation of file-locks is broken within windows' smb
> protocol implementation.

Different SQLite locks are implemented by taking an exclusive lock on
different bytes in the file.

This is what the source code says about it:

** LockFile() prevents not just writing but also reading by other processes.
** A SHARED_LOCK is obtained by locking a single randomly-chosen
** byte out of a specific range of bytes. The lock byte is obtained at
** random so two separate readers can probably access the file at the
** same time, unless they are unlucky and choose the same lock byte.
** An EXCLUSIVE_LOCK is obtained by locking all bytes in the range.
** There can only be one writer.  A RESERVED_LOCK is obtained by locking
** a single byte of the file that is designated as the reserved lock byte.
** A PENDING_LOCK is obtained by locking a designated byte different from
** the RESERVED_LOCK byte.
**
** On WinNT/2K/XP systems, LockFileEx() and UnlockFileEx() are available,
** which means we can use reader/writer locks.  When reader/writer locks
** are used, the lock is placed on the same range of bytes that is used
** for probabilistic locking in Win95/98/ME.  Hence, the locking scheme
** will support two or more Win95 readers or two or more WinNT readers.
** But a single Win95 reader will lock out all WinNT readers and a single
** WinNT reader will lock out all other Win95 readers.

> I only see those lock requests when a second user is connected to the db
> (another smb detail I guess).
>
> It's not that there's any problem here, I just want to understand what's
> going on, as I've been assuming that a read only file access will not break
> an smb oplock.

Reading will not break an oplock, but when two programs take R/W locks,
Windows assumes that at least one of them is about to write something.


Regards,
Clemens
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to