Documentation ¶
Index ¶
- Constants
- Variables
- type Cache
- func (c *Cache) AddAll(container, path string, node Node, nodes map[string]Node)
- func (c *Cache) Delete(container, path, name string)
- func (c *Cache) DeleteAll(container, path string)
- func (c *Cache) Get(container, path, name string) Node
- func (c *Cache) GetAll(container, path string) (Node, map[string]Node)
- func (c *Cache) Peek(container, path string) (Node, bool)
- func (c *Cache) Set(container, path, name string, node Node)
- type CacheConfig
- type CacheValue
- type Config
- type Container
- type DirLister
- type DirListerTask
- type Directory
- func (d *Directory) Attr(ctx context.Context, a *fuse.Attr) error
- func (d *Directory) Create(ctx context.Context, req *fuse.CreateRequest, resp *fuse.CreateResponse) (fs.Node, fs.Handle, error)
- func (d *Directory) Export() fuse.Dirent
- func (d *Directory) Lookup(ctx context.Context, req *fuse.LookupRequest, resp *fuse.LookupResponse) (fs.Node, error)
- func (d *Directory) Mkdir(ctx context.Context, req *fuse.MkdirRequest) (fs.Node, error)
- func (d *Directory) Name() string
- func (d *Directory) ReadDirAll(ctx context.Context) (direntries []fuse.Dirent, err error)
- func (d *Directory) Remove(ctx context.Context, req *fuse.RemoveRequest) error
- func (d *Directory) Rename(ctx context.Context, req *fuse.RenameRequest, newDir fs.Node) error
- type HubicAuth
- type Node
- type Object
- type ObjectHandle
- func (fh *ObjectHandle) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse.ReadResponse) error
- func (fh *ObjectHandle) Release(ctx context.Context, req *fuse.ReleaseRequest) error
- func (fh *ObjectHandle) Write(ctx context.Context, req *fuse.WriteRequest, resp *fuse.WriteResponse) (err error)
- type Root
- func (r *Root) Create(ctx context.Context, req *fuse.CreateRequest, resp *fuse.CreateResponse) (fs.Node, fs.Handle, error)
- func (r *Root) Lookup(ctx context.Context, req *fuse.LookupRequest, resp *fuse.LookupResponse) (fs.Node, error)
- func (r *Root) Mkdir(ctx context.Context, req *fuse.MkdirRequest) (fs.Node, error)
- func (r *Root) ReadDirAll(ctx context.Context) (direntries []fuse.Dirent, err error)
- func (r *Root) Remove(ctx context.Context, req *fuse.RemoveRequest) error
- func (r *Root) Rename(ctx context.Context, req *fuse.RenameRequest, newDir fs.Node) error
- type SVFS
Constants ¶
const ( DirContentType = "application/directory" ObjContentType = "application/octet-stream" AutoContent = "X-Detect-Content-Type" )
const (
HubicEndpoint = "https://api.hubic.com"
)
const (
ManifestHeader = "X-Object-Manifest"
)
const (
SegmentContainerSuffix = "_segments"
)
Variables ¶
var ( FolderRegex = regexp.MustCompile("^.+/$") SubdirRegex = regexp.MustCompile(".*/.*$") SegmentPathRegex = regexp.MustCompile("^([^/]+)/(.*)$") DirectoryCache = new(Cache) DirectoryLister = new(DirLister) )
var ( SwiftConnection *swift.Connection Version string = "0.5.1" UserAgent string = "svfs/" + Version DefaultUID uint64 = 0 DefaultGID uint64 = 0 DefaultMode uint64 = 0700 )
var ( HubicRefreshToken string HubicAuthorization string )
var SegmentRegex = regexp.MustCompile("^.+_segments$")
var (
SegmentSize uint64
)
Functions ¶
This section is empty.
Types ¶
type Cache ¶ added in v0.2.6
type Cache struct {
// contains filtered or unexported fields
}
Cache holds a map of cache entries. Its size can be configured as well as cache entries access limit and expiration time.
func NewCache ¶ added in v0.2.6
func NewCache(cconf *CacheConfig) *Cache
NewCache creates a new cache
func (*Cache) AddAll ¶ added in v0.3.0
AddAll creates a new cache entry with the key container:path and a map of nodes as a value. Node represents the parent node type. If the cache entry count limit is reached, it will be marked as temporary thus evicted after one read.
func (*Cache) DeleteAll ¶ added in v0.3.0
DeleteAll removes all nodes for the cache key container:path.
func (*Cache) Get ¶ added in v0.2.6
Get retrieves a specific node from the cache. It returns nil if the cache key container:path is missing.
func (*Cache) GetAll ¶ added in v0.3.0
GetAll retrieves all nodes for the cache key container:path. It returns the parent node and its children nodes. If the cache entry is not found or expired or access count exceeds the limit, both values will be nil.
type CacheConfig ¶ added in v0.2.6
CacheConfig is the cache configuration.
type CacheValue ¶ added in v0.3.0
type CacheValue struct {
// contains filtered or unexported fields
}
CacheValue is the representation of a cache entry. It tracks expiration date, access count and holds a parent node with its children. It can be set as temporary, meaning that it will be stored within the cache but evicted on first access.
type Config ¶ added in v0.2.6
type Config struct { Container string ConnectTimeout time.Duration ReadAheadSize uint SegmentSizeMB uint64 MaxReaddirConcurrency uint64 MaxUploadConcurrency uint64 }
Config represents SVFS configuration settings.
type Container ¶
type Container struct {
*Directory
}
Container is a node representing a directory entry bound to a Swift container.
type DirLister ¶ added in v0.2.6
type DirLister struct {
// contains filtered or unexported fields
}
DirLister is a concurrent processor for segmented objects. Its job is to get information about manifests stored within directories.
func (*DirLister) AddTask ¶ added in v0.2.6
AddTask asynchronously adds a new task to be processed. It returns immediately with no guarantee that the task has been added to the channel nor retrieved by a worker.
func (*DirLister) Start ¶ added in v0.2.6
func (dl *DirLister) Start()
Start spawns workers waiting for tasks. Once a task comes in the task channel, one worker will process it by opening a connection to swift and asking information about the current manifest. The real size of the object is modified then it sends the modified object into the task result channel.
type DirListerTask ¶ added in v0.2.6
type DirListerTask struct {
// contains filtered or unexported fields
}
DirListerTask represents a manifest ready to be processed by the DirLister. Every task must provide a manifest object and a result channel to which retrieved information will be send.
type Directory ¶
type Directory struct {
// contains filtered or unexported fields
}
Directory represents a standard directory entry.
func (*Directory) Create ¶
func (d *Directory) Create(ctx context.Context, req *fuse.CreateRequest, resp *fuse.CreateResponse) (fs.Node, fs.Handle, error)
Create makes a new object node represented by a file. It returns an object node and an opened file handle.
func (*Directory) Lookup ¶
func (d *Directory) Lookup(ctx context.Context, req *fuse.LookupRequest, resp *fuse.LookupResponse) (fs.Node, error)
Lookup gets a children node if its name matches the requested direntry name. If the cache is empty for the current directory, it will fill it and try to match the requested direnty after this operation. It returns ENOENT if not found.
func (*Directory) Mkdir ¶ added in v0.2.0
Mkdir creates a new directory node within the current directory. It is represented by an empty object ending with a slash in the Swift container.
func (*Directory) ReadDirAll ¶
ReadDirAll reads the content of a directory and returns a list of children nodes as direntries, using/filling the cache of nodes.
type HubicAuth ¶ added in v0.5.0
type HubicAuth struct {
// contains filtered or unexported fields
}
HubicAuth is a swift-compliant authenticatior for hubic.
func (*HubicAuth) CdnUrl ¶ added in v0.5.0
CdnUrl retrieves the CDN URL from the authentication response.
func (*HubicAuth) StorageUrl ¶ added in v0.5.0
StorageUrl retrieves the swift's storage URL from the authentication response.
type Object ¶
type Object struct {
// contains filtered or unexported fields
}
Object is a node representing a swift object. It belongs to a container and segmented objects are bound to a container of segments.
type ObjectHandle ¶
type ObjectHandle struct {
// contains filtered or unexported fields
}
ObjectHandle represents an open object handle, similarly to file handles.
func (*ObjectHandle) Read ¶
func (fh *ObjectHandle) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse.ReadResponse) error
Read gets a swift object data for a request within the current context. The request size is always honored.
func (*ObjectHandle) Release ¶
func (fh *ObjectHandle) Release(ctx context.Context, req *fuse.ReleaseRequest) error
Release frees the file handle, closing all readers/writers in use. In case we used this file handle to write a large object, it creates the manifest file. Cache is refreshed if the writer was used during the lifetime of this handle.
func (*ObjectHandle) Write ¶
func (fh *ObjectHandle) Write(ctx context.Context, req *fuse.WriteRequest, resp *fuse.WriteResponse) (err error)
Write pushes data to a swift object. If we detect that we are writing more data than the configured segment size, then the first object we were writing to is moved to the segment container and named accordingly to DLO conventions. Remaining data will be split into segments sequentially until file handle release is called.
type Root ¶
type Root struct {
*Directory
}
Root is a fake root node used to hold a list of container nodes.
func (*Root) Create ¶
func (r *Root) Create(ctx context.Context, req *fuse.CreateRequest, resp *fuse.CreateResponse) (fs.Node, fs.Handle, error)
Create is not supported on a root node.
func (*Root) Lookup ¶ added in v0.2.5
func (r *Root) Lookup(ctx context.Context, req *fuse.LookupRequest, resp *fuse.LookupResponse) (fs.Node, error)
Lookup gets a container node if its name matches the request name within the current context.
func (*Root) ReadDirAll ¶
ReadDirAll retrieves all containers within the current Openstack tenant, as direntries. Segment containers are not shown and created if missing.
type SVFS ¶
type SVFS struct {
// contains filtered or unexported fields
}
SVFS implements the Swift Virtual File System.
func (*SVFS) Init ¶
func (s *SVFS) Init(sc *swift.Connection, conf *Config, cconf *CacheConfig) error
Init sets up the filesystem. It sets configuration settings, starts mandatory services and make sure authentication in Swift has succeeded.