meta

package
v0.14.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 23, 2023 License: Apache-2.0 Imports: 19 Imported by: 0

Documentation

Index

Constants

View Source
const (
	FATTR_MODE      = (1 << 0)
	FATTR_UID       = (1 << 1)
	FATTR_GID       = (1 << 2)
	FATTR_SIZE      = (1 << 3)
	FATTR_ATIME     = (1 << 4)
	FATTR_MTIME     = (1 << 5)
	FATTR_FH        = (1 << 6)
	FATTR_ATIME_NOW = (1 << 7)
	FATTR_MTIME_NOW = (1 << 8)
	FATTR_LOCKOWNER = (1 << 9)
	FATTR_CTIME     = (1 << 10)
)
View Source
const (
	TypeFile      = 1 // type for regular file
	TypeDirectory = 2 // type for directory
	TypeSymlink   = 3 // type for symlink
	TypeFIFO      = 4 // type for FIFO node
	TypeBlockDev  = 5 // type for block device
	TypeCharDev   = 6 // type for character device
	TypeSocket    = 7 // type for socket
)
View Source
const (
	MemDriver = "mem"

	DefaultLinkUpdateInterval = 15
	DefaultRootPath           = "/"
)

Variables

View Source
var FuseConf = &FuseConfig{
	EntryTimeout: 1 * time.Second,
	AttrTimeout:  1 * time.Second,
	DirMode:      ufslib.DefaultDirMode,
	FileMode:     ufslib.DefaultFileMode,
	Uid:          os.Getuid(),
	Gid:          os.Getgid(),
}

Functions

This section is empty.

Types

type Attr

type Attr struct {
	Type      uint8  // type of a node
	Mode      uint32 // permission mode
	Uid       uint32 // owner id
	Gid       uint32 // group id of owner
	Rdev      uint64 // device number
	Atime     int64  // last access time
	Mtime     int64  // last modified time
	Ctime     int64  // last change time for meta
	Atimensec uint32 // nanosecond part of atime
	Mtimensec uint32 // nanosecond part of mtime
	Ctimensec uint32 // nanosecond part of ctime
	Nlink     uint64 // number of links (sub-directories or hardlinks)
	Size      uint64 // size of regular file
	Blksize   int64  // 目录默认4096 文件为0
	Block     int64  // 文件size的大小/512
}

Attr represents attributes of a node.

func (*Attr) FromFileInfo

func (a *Attr) FromFileInfo(info *base.FileInfo)

func (*Attr) IsDir

func (a *Attr) IsDir() bool

type Config

type Config struct {
	kv.Config
	AttrCacheExpire    time.Duration
	EntryCacheExpire   time.Duration
	AttrCacheSize      uint64
	EntryAttrCacheSize uint64
	PathCacheExpire    time.Duration
}

type Context

type Context struct {
	base.Context
	// contains filtered or unexported fields
}

func NewContext

func NewContext(cancel <-chan struct{}, Uid, Pid, Gid uint32) *Context

func NewEmptyContext

func NewEmptyContext() *Context

type Creator

type Creator func(meta Meta, config Config) (Meta, error)

type Entry

type Entry struct {
	Attr *Attr
	// Name is the basename of the file in the directory.
	Name string
	// Ino is the inode number.
	Ino Ino
}

Entry is an entry inside a directory.

type FuseConfig added in v0.14.6

type FuseConfig struct {
	Uid          int
	Gid          int
	EntryTimeout time.Duration
	AttrTimeout  time.Duration
	DirMode      int
	FileMode     int
}

type Ino

type Ino uint64

type Meta

type Meta interface {
	// GetUFS returns ufs of link and path
	GetUFS(name string) (ufslib.UnderFileStorage, bool, string, string)

	// Name of database
	Name() string
	InoToPath(inode Ino) string

	SetOwner(uid, gid uint32)

	// StatFS returns summary statistics of a volume.
	StatFS(ctx *Context) (*base.StatfsOut, syscall.Errno)
	// Access checks the access permission on given inode.
	Access(ctx *Context, inode Ino, mask uint32, attr *Attr) syscall.Errno
	// Lookup returns the inode and attributes for the given entry in a directory.
	Lookup(ctx *Context, parent Ino, name string) (Ino, *Attr, syscall.Errno)
	// Resolve fetches the inode and attributes for an entry identified by the given path.
	// ENOTSUP will be returned if there's no natural implementation for this operation or
	// if there are any symlink following involved.
	Resolve(ctx *Context, parent Ino, path string, inode *Ino, attr *Attr) syscall.Errno
	// GetAttr returns the attributes for given node.
	GetAttr(ctx *Context, inode Ino, attr *Attr) syscall.Errno
	// SetAttr updates the attributes for given node.
	SetAttr(ctx *Context, inode Ino, set uint32, attr *Attr) (string, syscall.Errno)
	// Truncate changes the length for given file.
	Truncate(ctx *Context, inode Ino, size uint64) syscall.Errno
	// Fallocate preallocate given space for given file.
	Fallocate(ctx *Context, inode Ino, mode uint8, off uint64, size uint64) syscall.Errno
	// ReadLink returns the target of a symlink.
	ReadLink(ctx *Context, inode Ino, path *[]byte) syscall.Errno
	// Symlink creates a symlink in a directory with given name.
	Symlink(ctx *Context, parent Ino, name string, path string, inode *Ino, attr *Attr) syscall.Errno
	// Mknod creates a node in a directory with given name, type and permissions.
	Mknod(ctx *Context, parent Ino, name string, _type uint8, mode, cumask uint32, rdev uint32, inode *Ino, attr *Attr) syscall.Errno
	// Mkdir creates a sub-directory with given name and mode.
	Mkdir(ctx *Context, parent Ino, name string, mode uint32, cumask uint16, inode *Ino, attr *Attr) syscall.Errno
	// Unlink removes a file entry from a directory.
	// The file will be deleted if it's not linked by any entries and not open by any sessions.
	Unlink(ctx *Context, parent Ino, name string) syscall.Errno
	// Rmdir removes an empty sub-directory.
	Rmdir(ctx *Context, parent Ino, name string) syscall.Errno
	// Rename move an entry from a source directory to another with given name.
	// The targeted entry will be overwrited if it's a file or empty directory.
	Rename(ctx *Context, parentSrc Ino, nameSrc string, parentDst Ino, nameDst string, flags uint32, inode *Ino, attr *Attr) (string, string, syscall.Errno)
	// Link creates an entry for node.
	Link(ctx *Context, inodeSrc, parent Ino, name string, attr *Attr) syscall.Errno
	// Readdir returns all entries for given directory, which include attributes if plus is true.
	Readdir(ctx *Context, inode Ino, entries *[]*Entry) syscall.Errno
	// Create creates a file in a directory with given name.
	Create(ctx *Context, parent Ino, name string, mode uint32, cumask uint16, flags uint32, inode *Ino, attr *Attr) (ufslib.UnderFileStorage, string, syscall.Errno)
	// Open checks permission on a node and track it as open.
	Open(ctx *Context, inode Ino, flags uint32, attr *Attr) (ufslib.UnderFileStorage, string, syscall.Errno)
	// Close a file.
	Close(ctx *Context, inode Ino) syscall.Errno
	// Read returns the list of blocks
	Read(ctx *Context, inode Ino, indx uint32, buf []byte) syscall.Errno
	// Write put a slice of data on top of the given chunk.
	Write(ctx *Context, inode Ino, off uint32, length int) syscall.Errno

	// CopyFileRange copies part of a file to another one.
	CopyFileRange(ctx *Context, fin Ino, offIn uint64, fout Ino, offOut uint64, size uint64, flags uint32, copied *uint64) syscall.Errno

	// GetXattr returns the value of extended attribute for given name.
	GetXattr(ctx *Context, inode Ino, attribute string, vbuff *[]byte) syscall.Errno
	// ListXattr returns all extended attributes of a node.
	ListXattr(ctx *Context, inode Ino, dbuff *[]string) syscall.Errno
	// SetXattr update the extended attribute of a node.
	SetXattr(ctx *Context, inode Ino, name string, value []byte, flags uint32) syscall.Errno
	// RemoveXattr removes the extended attribute of a node.
	RemoveXattr(ctx *Context, inode Ino, name string) syscall.Errno
	// Flock tries to put a lock on given file.
	Flock(ctx *Context, inode Ino, owner uint64, ltype uint32, block bool) syscall.Errno
	// Getlk returns the current lock owner for a range on a file.
	Getlk(ctx *Context, inode Ino, owner uint64, ltype *uint32, start, end *uint64, pid *uint32) syscall.Errno
	// Setlk sets a file range lock on given file.
	Setlk(ctx *Context, inode Ino, owner uint64, block bool, ltype uint32, start, end uint64, pid uint32) syscall.Errno

	LinksMetaUpdateHandler(stopChan chan struct{}, interval int, linkMetaDirPrefix string) error
}

Meta is a interface for a meta service for file system.

func NewMeta

func NewMeta(fsMeta common.FSMeta, links map[string]common.FSMeta, config *Config) (Meta, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL