Re: [Samba] Difference in Samba and CIFS interms of keeping the deleted files opened

2009-07-21 Thread Nikhil
On Tue, Jul 21, 2009 at 12:12 AM, Jeremy Allison j...@samba.org wrote:

  On Mon, Jul 20, 2009 at 10:14:49PM +0530, Nikhil wrote:
   Hi,
 
  We have a CIFS server running on a NetApp server and a Solaris host
 running
  Samba-3.3.2.
 
  When we mount both the filesystems to a Drive on a Windows using the net
 use
  command and then try to run a java program which basically does nothing
 but
  continuosly writes a data chunk to a file. On a side note, these same
  filesystems are accessible on a Solaris (unix) host too.
 
  When the java program is run and a file is being generated, I go to my
 unix
  terminal and happen to delete the file generated by the java program.
  Interestingly, there is an IOexception caught in the java program running
 on
  the Windows machine, when the file is deleted on the CIFS based
 filesystem
  (available on Solaris as a NFS filesystems) but there is no exception
 caught
  when the filesystem happens to be Samba (available on Solaris as /var , a
  regular partition).
 
  I delete the file from Unix as the process demands, but also there is no
 way
  to delete a in-use-file in Windows.
 
  I would like to understand the differences in Samba and CIFS in this
 context
  especially why is that so there is an IOexception for a CIFS based
  filesystem but not on the samba filesystem. This is reproducible at will.
  What could be wrong? What could be made to make samba filesystem also
 behave
  the same way to throw exceptions (Exceptions are good than that not at
 all
  knowing there is a file that is deleted but being still written onto.)

 Ok, I think the reason that you're having this problem is that
 you're running Samba on Solaris in this case, sad to say.

 I don't believe Sun have exposed kernel level oplock (lease) capability
 to user space processes, so Samba on Solaris has no way of knowing
 that a unix user deleted the file.

 Samba running on Linux, (or SGI Irix) has kernel level oplocks,
 so can detect access from the local filesystem. As the NetApp
 runs a custom kernel (derived a long time ago from FreeBSD I
 believe) then their CIFS implementation (like Samba on Linux)
 knows when a NFS user has modified the file.

 Jeremy.



Thanks Jeremy. Appreciate your response.

That actually sounds interesting... do we have this documented or referenced
as a bug somewhere that I can lookup?

What I see from the CIFS protocol:
-
When client B opens the file, the server must synchronize with client A
in case client A has any buffered locks.  Once it is synchronized,
client B's open request may be completed.  Client B, however, is
informed that he has a level II oplock, rather than an exclusive oplock
to the file.
In this case, no client that has the file open with a level II oplock
may buffer any lock information on the local client machine.  This
allows the server to guarantee that if any write operation is performed,
it need only notify the level II clients that the lock should be broken
without having to synchronize all of the accessors of the file.
The level II oplock may be broken to none, meaning that some client that
had the file opened has now performed a write operation to the file.


I do not understand whether Solaris fails to respect the level II oplock or
how does Samba can be made aware of the kernel level oplocks (is there a no
way?).

BTW, to check it myself on what you said I ran samba-3.0.25 on a Linux
machine with kernel version 2.4.21-47.0.1.ELsmp and ran smbd and then did
the same tests.
 - Ran java program on Windows which writes to the file continuously on a
samba exported filesystem from a Linux box
 - on the Linux terminal, I go and delete the file
 - Windows does NOT recognise that there is a opened file deleted and the
Java program does NOT thrown any exception... sadly.

So, I do not have a Linux box with kernel -2.6, so if that means to say that
Linux kernel has introduced kernel level oplocks facility in the 2.6 kernel
then I would have to try that...

Thanks.
-- 
To unsubscribe from this list go to the following URL and read the
instructions:  https://lists.samba.org/mailman/options/samba


Re: [Samba] Difference in Samba and CIFS interms of keeping the deleted files opened

2009-07-21 Thread Nikhil
On Tue, Jul 21, 2009 at 12:10 PM, Nikhil mnik...@gmail.com wrote:



 On Tue, Jul 21, 2009 at 12:12 AM, Jeremy Allison j...@samba.org wrote:

  On Mon, Jul 20, 2009 at 10:14:49PM +0530, Nikhil wrote:
   Hi,
 
  We have a CIFS server running on a NetApp server and a Solaris host
 running
  Samba-3.3.2.
 
  When we mount both the filesystems to a Drive on a Windows using the net
 use
  command and then try to run a java program which basically does nothing
 but
  continuosly writes a data chunk to a file. On a side note, these same
  filesystems are accessible on a Solaris (unix) host too.
 
  When the java program is run and a file is being generated, I go to my
 unix
  terminal and happen to delete the file generated by the java program.
  Interestingly, there is an IOexception caught in the java program
 running on
  the Windows machine, when the file is deleted on the CIFS based
 filesystem
  (available on Solaris as a NFS filesystems) but there is no exception
 caught
  when the filesystem happens to be Samba (available on Solaris as /var ,
 a
  regular partition).
 
  I delete the file from Unix as the process demands, but also there is no
 way
  to delete a in-use-file in Windows.
 
  I would like to understand the differences in Samba and CIFS in this
 context
  especially why is that so there is an IOexception for a CIFS based
  filesystem but not on the samba filesystem. This is reproducible at
 will.
  What could be wrong? What could be made to make samba filesystem also
 behave
  the same way to throw exceptions (Exceptions are good than that not at
 all
  knowing there is a file that is deleted but being still written onto.)

 Ok, I think the reason that you're having this problem is that
 you're running Samba on Solaris in this case, sad to say.

 I don't believe Sun have exposed kernel level oplock (lease) capability
 to user space processes, so Samba on Solaris has no way of knowing
 that a unix user deleted the file.

 Samba running on Linux, (or SGI Irix) has kernel level oplocks,
 so can detect access from the local filesystem. As the NetApp
 runs a custom kernel (derived a long time ago from FreeBSD I
 believe) then their CIFS implementation (like Samba on Linux)
 knows when a NFS user has modified the file.

 Jeremy.



 Thanks Jeremy. Appreciate your response.

 That actually sounds interesting... do we have this documented or
 referenced as a bug somewhere that I can lookup?

 What I see from the CIFS protocol:
 -
 When client B opens the file, the server must synchronize with client A
 in case client A has any buffered locks.  Once it is synchronized,
 client B's open request may be completed.  Client B, however, is
 informed that he has a level II oplock, rather than an exclusive oplock
 to the file.
 In this case, no client that has the file open with a level II oplock
 may buffer any lock information on the local client machine.  This
 allows the server to guarantee that if any write operation is performed,
 it need only notify the level II clients that the lock should be broken
 without having to synchronize all of the accessors of the file.
 The level II oplock may be broken to none, meaning that some client that
 had the file opened has now performed a write operation to the file.
 

 I do not understand whether Solaris fails to respect the level II oplock or
 how does Samba can be made aware of the kernel level oplocks (is there a no
 way?).

 BTW, to check it myself on what you said I ran samba-3.0.25 on a Linux
 machine with kernel version 2.4.21-47.0.1.ELsmp and ran smbd and then did
 the same tests.
  - Ran java program on Windows which writes to the file continuously on a
 samba exported filesystem from a Linux box
  - on the Linux terminal, I go and delete the file
  - Windows does NOT recognise that there is a opened file deleted and the
 Java program does NOT thrown any exception... sadly.

 So, I do not have a Linux box with kernel -2.6, so if that means to say
 that Linux kernel has introduced kernel level oplocks facility in the 2.6
 kernel then I would have to try that...

 Thanks.



 Jeremy,

I looked at the enabling kernel oplocks in the samba configuration file and
I have enabled kernel oplocks = yes in the [global] section on both of
Linux-2.6.18-92 and Linux-2.4.21-47.0.1.ELsmp kernel machines running the
samba and I notice that the behaviour is not as what is said. I still do not
see the exception being NOT caught on Windows java program when I delete the
file from a Unix terminal.

Any idea, where I could be going wrong?
-- 
To unsubscribe from this list go to the following URL and read the
instructions:  https://lists.samba.org/mailman/options/samba


Re: [Samba] Difference in Samba and CIFS interms of keeping the deleted files opened

2009-07-21 Thread Gerald Carter
Nikhil,

 I looked at the enabling kernel oplocks in the samba configuration file and
 I have enabled kernel oplocks = yes in the [global] section on both of
 Linux-2.6.18-92 and Linux-2.4.21-47.0.1.ELsmp kernel machines running the
 samba and I notice that the behaviour is not as what is said. I still do not
 see the exception being NOT caught on Windows java program when I delete the
 file from a Unix terminal.
 
 Any idea, where I could be going wrong?

It sounds more like smbd maintains the opens file descriptor
as long as the client has an open file handle.  Standard
POSIX semantics allow you to delete open files with the inode
finally being released after the last open fd is closed.
I could speculate that it may be less to do with CIFS and more
to do with the server OS.  But that is pure speculation.

Have you looked at a network trace to see which SMB op caused
the IO Exception?  Does truncating rather than removing the
file change the application behavior?




cheers, jerry
-- 
=
http://www.plainjoe.org/
What man is a man who does not make the world better?  --Balian



signature.asc
Description: OpenPGP digital signature
-- 
To unsubscribe from this list go to the following URL and read the
instructions:  https://lists.samba.org/mailman/options/samba

Re: [Samba] Difference in Samba and CIFS interms of keeping the deleted files opened

2009-07-21 Thread Nikhil
On Tue, Jul 21, 2009 at 5:06 PM, Gerald Carter je...@plainjoe.org wrote:

 Nikhil,

  I looked at the enabling kernel oplocks in the samba configuration file
 and
  I have enabled kernel oplocks = yes in the [global] section on both of
  Linux-2.6.18-92 and Linux-2.4.21-47.0.1.ELsmp kernel machines running the
  samba and I notice that the behaviour is not as what is said. I still do
 not
  see the exception being NOT caught on Windows java program when I delete
 the
  file from a Unix terminal.
 
  Any idea, where I could be going wrong?

 It sounds more like smbd maintains the opens file descriptor
 as long as the client has an open file handle.  Standard
 POSIX semantics allow you to delete open files with the inode
 finally being released after the last open fd is closed.
 I could speculate that it may be less to do with CIFS and more
 to do with the server OS.  But that is pure speculation.

 Have you looked at a network trace to see which SMB op caused
 the IO Exception?  Does truncating rather than removing the
 file change the application behavior?




 cheers, jerry
 --
 =
 http://www.plainjoe.org/
 What man is a man who does not make the world better?  --Balian



Hi Jeremy,

Yeah.. I tried oplocking thing (btw, is there any set-direct-go howto on
oplocking configuration parameters to be used smb.conf?) and checked via the
smbstatus that the file is being into the samba lock.
But when I rm the file from the Unix terminal, the windows program does not
detect the file deletion.

 it may be less to do with CIFS and more to do with the server OS.  But
that is pure speculation.
agreed. I am running Solaris-10 where kernel oplock is not available, so
will rule that out.
I have linux box with 2.6 kernel and kernel oplocks=yes set in smb.conf; but
that still does not help in getting the sync set.

 Does truncating rather than removing the file change the application
behavior?
Interesting. I do /bin/cp -f /dev/null /var/tmp/test.log and I notice that
ls -l does not show that the file is truncated at all even though I do
it multiple times; ls -l still does not show that the file is truncated. Am
I missing something that why is rm command or deleting the file behaviour
would differ?


BTW, this is the output of testparam -s -v | grep -i lock output:

Load smb config files from /var/samba/smb.conf
Processing section [homes]
Processing section [printers]
Processing section [tmpdir]
Loaded services file OK.
Server role: ROLE_STANDALONE
kernel oplocks = Yes
lock spin time = 200
oplock break wait time = 0
lock directory = /var/samba/locks
usershare path = /var/samba/locks/usershares
block size = 1024
veto oplock files =
blocking locks = Yes
fake oplocks = No
locking = Yes
oplocks = Yes
level2 oplocks = Yes
oplock contention limit = 2
posix locking = Yes
strict locking = Yes
 Can you please let me know if any of the parameters need something
else/need not put?

Thanks again, Jeremy.
-- 
Nikhil
-- 
To unsubscribe from this list go to the following URL and read the
instructions:  https://lists.samba.org/mailman/options/samba


[Samba] Difference in Samba and CIFS interms of keeping the deleted files opened

2009-07-20 Thread Nikhil
 Hi,

We have a CIFS server running on a NetApp server and a Solaris host running
Samba-3.3.2.

When we mount both the filesystems to a Drive on a Windows using the net use
command and then try to run a java program which basically does nothing but
continuosly writes a data chunk to a file. On a side note, these same
filesystems are accessible on a Solaris (unix) host too.

When the java program is run and a file is being generated, I go to my unix
terminal and happen to delete the file generated by the java program.
Interestingly, there is an IOexception caught in the java program running on
the Windows machine, when the file is deleted on the CIFS based filesystem
(available on Solaris as a NFS filesystems) but there is no exception caught
when the filesystem happens to be Samba (available on Solaris as /var , a
regular partition).

I delete the file from Unix as the process demands, but also there is no way
to delete a in-use-file in Windows.

I would like to understand the differences in Samba and CIFS in this context
especially why is that so there is an IOexception for a CIFS based
filesystem but not on the samba filesystem. This is reproducible at will.
What could be wrong? What could be made to make samba filesystem also behave
the same way to throw exceptions (Exceptions are good than that not at all
knowing there is a file that is deleted but being still written onto.)

I would be willing to work and share the procedure to reproduce this
behaviour with anyone aware of the Samba/CIFS protocols.

-- 
Nikhil
-- 
To unsubscribe from this list go to the following URL and read the
instructions:  https://lists.samba.org/mailman/options/samba


Re: [Samba] Difference in Samba and CIFS interms of keeping the deleted files opened

2009-07-20 Thread Jeremy Allison
On Mon, Jul 20, 2009 at 10:14:49PM +0530, Nikhil wrote:
  Hi,
 
 We have a CIFS server running on a NetApp server and a Solaris host running
 Samba-3.3.2.
 
 When we mount both the filesystems to a Drive on a Windows using the net use
 command and then try to run a java program which basically does nothing but
 continuosly writes a data chunk to a file. On a side note, these same
 filesystems are accessible on a Solaris (unix) host too.
 
 When the java program is run and a file is being generated, I go to my unix
 terminal and happen to delete the file generated by the java program.
 Interestingly, there is an IOexception caught in the java program running on
 the Windows machine, when the file is deleted on the CIFS based filesystem
 (available on Solaris as a NFS filesystems) but there is no exception caught
 when the filesystem happens to be Samba (available on Solaris as /var , a
 regular partition).
 
 I delete the file from Unix as the process demands, but also there is no way
 to delete a in-use-file in Windows.
 
 I would like to understand the differences in Samba and CIFS in this context
 especially why is that so there is an IOexception for a CIFS based
 filesystem but not on the samba filesystem. This is reproducible at will.
 What could be wrong? What could be made to make samba filesystem also behave
 the same way to throw exceptions (Exceptions are good than that not at all
 knowing there is a file that is deleted but being still written onto.)

Ok, I think the reason that you're having this problem is that
you're running Samba on Solaris in this case, sad to say.

I don't believe Sun have exposed kernel level oplock (lease) capability
to user space processes, so Samba on Solaris has no way of knowing
that a unix user deleted the file.

Samba running on Linux, (or SGI Irix) has kernel level oplocks,
so can detect access from the local filesystem. As the NetApp
runs a custom kernel (derived a long time ago from FreeBSD I
believe) then their CIFS implementation (like Samba on Linux)
knows when a NFS user has modified the file.

Jeremy.
-- 
To unsubscribe from this list go to the following URL and read the
instructions:  https://lists.samba.org/mailman/options/samba