mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
add doc
This commit is contained in:
parent
3d0e9e5197
commit
072f923a9b
217
weed/mount/weedfs_file_io.go
Normal file
217
weed/mount/weedfs_file_io.go
Normal file
|
@ -0,0 +1,217 @@
|
||||||
|
package mount
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/hanwen/go-fuse/v2/fuse"
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read data
|
||||||
|
*
|
||||||
|
* Read should send exactly the number of bytes requested except
|
||||||
|
* on EOF or error, otherwise the rest of the data will be
|
||||||
|
* substituted with zeroes. An exception to this is when the file
|
||||||
|
* has been opened in 'direct_io' mode, in which case the return
|
||||||
|
* value of the read system call will reflect the return value of
|
||||||
|
* this operation.
|
||||||
|
*
|
||||||
|
* fi->fh will contain the value set by the open method, or will
|
||||||
|
* be undefined if the open method didn't set any value.
|
||||||
|
*
|
||||||
|
* Valid replies:
|
||||||
|
* fuse_reply_buf
|
||||||
|
* fuse_reply_iov
|
||||||
|
* fuse_reply_data
|
||||||
|
* fuse_reply_err
|
||||||
|
*
|
||||||
|
* @param req request handle
|
||||||
|
* @param ino the inode number
|
||||||
|
* @param size number of bytes to read
|
||||||
|
* @param off offset to read from
|
||||||
|
* @param fi file information
|
||||||
|
*/
|
||||||
|
func (wfs *WFS) Read(cancel <-chan struct{}, in *fuse.ReadIn, buf []byte) (fuse.ReadResult, fuse.Status) {
|
||||||
|
return nil, fuse.ENOSYS
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write data
|
||||||
|
*
|
||||||
|
* Write should return exactly the number of bytes requested
|
||||||
|
* except on error. An exception to this is when the file has
|
||||||
|
* been opened in 'direct_io' mode, in which case the return value
|
||||||
|
* of the write system call will reflect the return value of this
|
||||||
|
* operation.
|
||||||
|
*
|
||||||
|
* Unless FUSE_CAP_HANDLE_KILLPRIV is disabled, this method is
|
||||||
|
* expected to reset the setuid and setgid bits.
|
||||||
|
*
|
||||||
|
* fi->fh will contain the value set by the open method, or will
|
||||||
|
* be undefined if the open method didn't set any value.
|
||||||
|
*
|
||||||
|
* Valid replies:
|
||||||
|
* fuse_reply_write
|
||||||
|
* fuse_reply_err
|
||||||
|
*
|
||||||
|
* @param req request handle
|
||||||
|
* @param ino the inode number
|
||||||
|
* @param buf data to write
|
||||||
|
* @param size number of bytes to write
|
||||||
|
* @param off offset to write to
|
||||||
|
* @param fi file information
|
||||||
|
*/
|
||||||
|
func (wfs *WFS) Write(cancel <-chan struct{}, in *fuse.WriteIn, data []byte) (written uint32, code fuse.Status) {
|
||||||
|
return 0, fuse.ENOSYS
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open a file
|
||||||
|
*
|
||||||
|
* Open flags are available in fi->flags. The following rules
|
||||||
|
* apply.
|
||||||
|
*
|
||||||
|
* - Creation (O_CREAT, O_EXCL, O_NOCTTY) flags will be
|
||||||
|
* filtered out / handled by the kernel.
|
||||||
|
*
|
||||||
|
* - Access modes (O_RDONLY, O_WRONLY, O_RDWR) should be used
|
||||||
|
* by the filesystem to check if the operation is
|
||||||
|
* permitted. If the ``-o default_permissions`` mount
|
||||||
|
* option is given, this check is already done by the
|
||||||
|
* kernel before calling open() and may thus be omitted by
|
||||||
|
* the filesystem.
|
||||||
|
*
|
||||||
|
* - When writeback caching is enabled, the kernel may send
|
||||||
|
* read requests even for files opened with O_WRONLY. The
|
||||||
|
* filesystem should be prepared to handle this.
|
||||||
|
*
|
||||||
|
* - When writeback caching is disabled, the filesystem is
|
||||||
|
* expected to properly handle the O_APPEND flag and ensure
|
||||||
|
* that each write is appending to the end of the file.
|
||||||
|
*
|
||||||
|
* - When writeback caching is enabled, the kernel will
|
||||||
|
* handle O_APPEND. However, unless all changes to the file
|
||||||
|
* come through the kernel this will not work reliably. The
|
||||||
|
* filesystem should thus either ignore the O_APPEND flag
|
||||||
|
* (and let the kernel handle it), or return an error
|
||||||
|
* (indicating that reliably O_APPEND is not available).
|
||||||
|
*
|
||||||
|
* Filesystem may store an arbitrary file handle (pointer,
|
||||||
|
* index, etc) in fi->fh, and use this in other all other file
|
||||||
|
* operations (read, write, flush, release, fsync).
|
||||||
|
*
|
||||||
|
* Filesystem may also implement stateless file I/O and not store
|
||||||
|
* anything in fi->fh.
|
||||||
|
*
|
||||||
|
* There are also some flags (direct_io, keep_cache) which the
|
||||||
|
* filesystem may set in fi, to change the way the file is opened.
|
||||||
|
* See fuse_file_info structure in <fuse_common.h> for more details.
|
||||||
|
*
|
||||||
|
* If this request is answered with an error code of ENOSYS
|
||||||
|
* and FUSE_CAP_NO_OPEN_SUPPORT is set in
|
||||||
|
* `fuse_conn_info.capable`, this is treated as success and
|
||||||
|
* future calls to open and release will also succeed without being
|
||||||
|
* sent to the filesystem process.
|
||||||
|
*
|
||||||
|
* Valid replies:
|
||||||
|
* fuse_reply_open
|
||||||
|
* fuse_reply_err
|
||||||
|
*
|
||||||
|
* @param req request handle
|
||||||
|
* @param ino the inode number
|
||||||
|
* @param fi file information
|
||||||
|
*/
|
||||||
|
func (wfs *WFS) Open(cancel <-chan struct{}, in *fuse.OpenIn, out *fuse.OpenOut) (status fuse.Status) {
|
||||||
|
return fuse.ENOSYS
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flush method
|
||||||
|
*
|
||||||
|
* This is called on each close() of the opened file.
|
||||||
|
*
|
||||||
|
* Since file descriptors can be duplicated (dup, dup2, fork), for
|
||||||
|
* one open call there may be many flush calls.
|
||||||
|
*
|
||||||
|
* Filesystems shouldn't assume that flush will always be called
|
||||||
|
* after some writes, or that if will be called at all.
|
||||||
|
*
|
||||||
|
* fi->fh will contain the value set by the open method, or will
|
||||||
|
* be undefined if the open method didn't set any value.
|
||||||
|
*
|
||||||
|
* NOTE: the name of the method is misleading, since (unlike
|
||||||
|
* fsync) the filesystem is not forced to flush pending writes.
|
||||||
|
* One reason to flush data is if the filesystem wants to return
|
||||||
|
* write errors during close. However, such use is non-portable
|
||||||
|
* because POSIX does not require [close] to wait for delayed I/O to
|
||||||
|
* complete.
|
||||||
|
*
|
||||||
|
* If the filesystem supports file locking operations (setlk,
|
||||||
|
* getlk) it should remove all locks belonging to 'fi->owner'.
|
||||||
|
*
|
||||||
|
* If this request is answered with an error code of ENOSYS,
|
||||||
|
* this is treated as success and future calls to flush() will
|
||||||
|
* succeed automatically without being send to the filesystem
|
||||||
|
* process.
|
||||||
|
*
|
||||||
|
* Valid replies:
|
||||||
|
* fuse_reply_err
|
||||||
|
*
|
||||||
|
* @param req request handle
|
||||||
|
* @param ino the inode number
|
||||||
|
* @param fi file information
|
||||||
|
*
|
||||||
|
* [close]: http://pubs.opengroup.org/onlinepubs/9699919799/functions/close.html
|
||||||
|
*/
|
||||||
|
func (wfs *WFS) Flush(cancel <-chan struct{}, in *fuse.FlushIn) fuse.Status {
|
||||||
|
return fuse.ENOSYS
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Release an open file
|
||||||
|
*
|
||||||
|
* Release is called when there are no more references to an open
|
||||||
|
* file: all file descriptors are closed and all memory mappings
|
||||||
|
* are unmapped.
|
||||||
|
*
|
||||||
|
* For every open call there will be exactly one release call (unless
|
||||||
|
* the filesystem is force-unmounted).
|
||||||
|
*
|
||||||
|
* The filesystem may reply with an error, but error values are
|
||||||
|
* not returned to close() or munmap() which triggered the
|
||||||
|
* release.
|
||||||
|
*
|
||||||
|
* fi->fh will contain the value set by the open method, or will
|
||||||
|
* be undefined if the open method didn't set any value.
|
||||||
|
* fi->flags will contain the same flags as for open.
|
||||||
|
*
|
||||||
|
* Valid replies:
|
||||||
|
* fuse_reply_err
|
||||||
|
*
|
||||||
|
* @param req request handle
|
||||||
|
* @param ino the inode number
|
||||||
|
* @param fi file information
|
||||||
|
*/
|
||||||
|
func (wfs *WFS) Release(cancel <-chan struct{}, in *fuse.ReleaseIn) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Synchronize file contents
|
||||||
|
*
|
||||||
|
* If the datasync parameter is non-zero, then only the user data
|
||||||
|
* should be flushed, not the meta data.
|
||||||
|
*
|
||||||
|
* If this request is answered with an error code of ENOSYS,
|
||||||
|
* this is treated as success and future calls to fsync() will
|
||||||
|
* succeed automatically without being send to the filesystem
|
||||||
|
* process.
|
||||||
|
*
|
||||||
|
* Valid replies:
|
||||||
|
* fuse_reply_err
|
||||||
|
*
|
||||||
|
* @param req request handle
|
||||||
|
* @param ino the inode number
|
||||||
|
* @param datasync flag indicating if only data should be flushed
|
||||||
|
* @param fi file information
|
||||||
|
*/
|
||||||
|
func (wfs *WFS) Fsync(cancel <-chan struct{}, in *fuse.FsyncIn) (code fuse.Status) {
|
||||||
|
return fuse.ENOSYS
|
||||||
|
}
|
Loading…
Reference in a new issue