Re: FOP write success when volume of glusterfs is full with write-behind is on

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jan 13, 2017 at 1:48 PM, Lian, George (Nokia - CN/Hangzhou) <george.lian@xxxxxxxxx> wrote:
Hi,

I try write FOP test on case of volume of gusterfs is full, the detail process and some investigation is as the below:
------------------------------------------------------------------------------------------------------------------------------------------
1)  use dd to write full with volume export
dd if=/dev/zero of=/mnt/export/large.tar bs=10M count=100000

2) set write-behind option on
   # echo "asdf" > /mnt/export/test
   #
 No error prompt here, and try cat the file with following information.
   # cat /mnt/export/test
   cat: /mnt/export/test: No such file or directory

   # strace echo "asdf" > /mnt/export/test
        write(1, "asdf\n", 5)                   = 5
        close(1)                                = -1 ENOSPC (No space left on device)

3) set write-behind option off
   # echo "asdf" > /mnt/export/test
   #-bash: echo: write error: No space left on device
 Have error prompt here.
   # cat /mnt/export/test
   cat: /mnt/export/test: No such file or directory

   # strace echo "asdf" > /mnt/export/test
        write(1, "asdf\n", 5)                   = -1 ENOSPC (No space left on device)
        close(1)                                = 0
-------------------------------------------------------------------------------------------------------------------------
In my view , the action of FOP write is right to application.
But when the write-behind option is set on, the write FOP return success but it can't really write to gluster volume.
It will let application confuse, and it will lead to more application issue.

Although the close will return error, but as you know, more application will not do close FOP until the application exit,
In this case, write FOP show success, but when another thread want to read it, but it can't read anything.

Do you think it is an issue?

No. The behavior of write-behind is posix-complaint. In fact I think this is the behavior of any write-back cache implementation. As to Posix compliance, man 2 write has this section:

<man 2 write>

NOTES
       Not  checking  the  return value of close() is a common but nevertheless serious programming error.  It is quite possible that errors on a previous write(2) operation are first reported at the final close().  Not checking the return value when closing the file may lead to silent loss of  data.   This  can  especially be observed with NFS and with disk quota.

       A successful close does not guarantee that the data has been successfully saved to disk, as the kernel defers writes.  It is not common for a file system to flush the buffers when the stream is closed.  If you need to be sure that the data is physically stored use fsync(2).  (It will depend on the disk  hardware at this point.)

</man>

If not, do you have any comments for this inconvenient?


Best Regards,
George
_______________________________________________
Gluster-devel mailing list
Gluster-devel@xxxxxxxxxxx
http://www.gluster.org/mailman/listinfo/gluster-devel



--
Raghavendra G
_______________________________________________
Gluster-devel mailing list
Gluster-devel@xxxxxxxxxxx
http://lists.gluster.org/mailman/listinfo/gluster-devel

[Index of Archives]     [Gluster Users]     [Ceph Users]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux