mfs

package
v0.4.3 Latest Latest
Warning

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

Go to latest
Published: Sep 20, 2016 License: MIT Imports: 18 Imported by: 0

Documentation

Overview

package mfs implements an in memory model of a mutable ipfs filesystem.

It consists of four main structs:

  1. The Filesystem The filesystem serves as a container and entry point for various mfs filesystems
  2. Root Root represents an individual filesystem mounted within the mfs system as a whole
  3. Directories
  4. Files

Index

Constants

View Source
const (
	OpenReadOnly = iota
	OpenWriteOnly
	OpenReadWrite
)

Variables

View Source
var ErrDirExists = errors.New("directory already has entry by that name")
View Source
var ErrInvalidChild = errors.New("invalid child node")
View Source
var ErrIsDirectory = errors.New("error: is a directory")
View Source
var ErrNotExist = errors.New("no such rootfs")
View Source
var ErrNotYetImplemented = errors.New("not yet implemented")

Functions

func FlushPath

func FlushPath(rt *Root, pth string) error

func Mkdir

func Mkdir(r *Root, pth string, mkparents bool, flush bool) error

Mkdir creates a directory at 'path' under the directory 'd', creating intermediary directories as needed if 'mkparents' is set to true

func Mv

func Mv(r *Root, src, dst string) error

Mv moves the file or directory at 'src' to 'dst'

func PutNode

func PutNode(r *Root, path string, nd *dag.Node) error

PutNode inserts 'nd' at 'path' in the given mfs

Types

type Directory

type Directory struct {
	// contains filtered or unexported fields
}

func NewDirectory

func NewDirectory(ctx context.Context, name string, node *dag.Node, parent childCloser, dserv dag.DAGService) *Directory

func (*Directory) AddChild

func (d *Directory) AddChild(name string, nd *dag.Node) error

AddChild adds the node 'nd' under this directory giving it the name 'name'

func (*Directory) Child

func (d *Directory) Child(name string) (FSNode, error)

Child returns the child of this directory by the given name

func (*Directory) Flush

func (d *Directory) Flush() error

func (*Directory) GetNode

func (d *Directory) GetNode() (*dag.Node, error)

func (*Directory) List

func (d *Directory) List() ([]NodeListing, error)

func (*Directory) ListNames

func (d *Directory) ListNames() []string

func (*Directory) Mkdir

func (d *Directory) Mkdir(name string) (*Directory, error)

func (*Directory) Path

func (d *Directory) Path() string

func (*Directory) Type

func (d *Directory) Type() NodeType

func (*Directory) Uncache added in v0.4.3

func (d *Directory) Uncache(name string)
func (d *Directory) Unlink(name string) error

type FSNode

type FSNode interface {
	GetNode() (*dag.Node, error)
	Flush() error
	Type() NodeType
}

FSNode represents any node (directory, root, or file) in the mfs filesystem

func DirLookup

func DirLookup(d *Directory, pth string) (FSNode, error)

DirLookup will look up a file or directory at the given path under the directory 'd'

func Lookup

func Lookup(r *Root, path string) (FSNode, error)

type File

type File struct {
	// contains filtered or unexported fields
}

func NewFile

func NewFile(name string, node *dag.Node, parent childCloser, dserv dag.DAGService) (*File, error)

NewFile returns a NewFile object with the given parameters

func (*File) Flush

func (fi *File) Flush() error

func (*File) GetNode

func (fi *File) GetNode() (*dag.Node, error)

GetNode returns the dag node associated with this file

func (*File) Open

func (fi *File) Open(flags int, sync bool) (FileDescriptor, error)

func (*File) Size

func (fi *File) Size() (int64, error)

Size returns the size of this file

func (*File) Sync

func (fi *File) Sync() error

func (*File) Type

func (fi *File) Type() NodeType

Type returns the type FSNode this is

type FileDescriptor

type FileDescriptor interface {
	io.Reader
	CtxReadFull(context.Context, []byte) (int, error)

	io.Writer
	io.WriterAt

	io.Closer
	io.Seeker

	Truncate(int64) error
	Size() (int64, error)
	Sync() error
	Flush() error
}

type NodeListing

type NodeListing struct {
	Name string
	Type int
	Size int64
	Hash string
}

type NodeType

type NodeType int
const (
	TFile NodeType = iota
	TDir
)

type PubFunc

type PubFunc func(context.Context, key.Key) error

type Republisher

type Republisher struct {
	TimeoutLong  time.Duration
	TimeoutShort time.Duration
	Publish      chan struct{}
	// contains filtered or unexported fields
}

Republisher manages when to publish a given entry

func NewRepublisher

func NewRepublisher(ctx context.Context, pf PubFunc, tshort, tlong time.Duration) *Republisher

NewRepublisher creates a new Republisher object to republish the given root using the given short and long time intervals

func (*Republisher) Close

func (p *Republisher) Close() error

func (*Republisher) Run

func (np *Republisher) Run()

Run is the main republisher loop

func (*Republisher) Update

func (np *Republisher) Update(k key.Key)

Touch signals that an update has occurred since the last publish. Multiple consecutive touches may extend the time period before the next Publish occurs in order to more efficiently batch updates

func (*Republisher) WaitPub

func (p *Republisher) WaitPub()

type Root

type Root struct {
	Type string
	// contains filtered or unexported fields
}

Root represents the root of a filesystem tree

func NewRoot

func NewRoot(parent context.Context, ds dag.DAGService, node *dag.Node, pf PubFunc) (*Root, error)

newRoot creates a new Root and starts up a republisher routine for it

func (*Root) Close

func (kr *Root) Close() error

func (*Root) Flush

func (kr *Root) Flush() error

func (*Root) GetValue

func (kr *Root) GetValue() FSNode

Jump to

Keyboard shortcuts

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