io

package
v0.2.2 Latest Latest
Warning

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

Go to latest
Published: Jan 25, 2022 License: BSD-3-Clause Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const (
	BlockSize int = 1024 * 1024 // 1MB
)
View Source
const (
	BufferSizeMax int = 1024 * 1024 * 4 // 4MB
)

Variables

This section is empty.

Functions

This section is empty.

Types

type AsyncWriter

type AsyncWriter struct {
	Path            string
	IRODSFileHandle *irodsfs.FileHandle
	FileHandleLock  *sync.Mutex

	Buffer               Buffer
	BufferEntryGroupName string

	WriteWaitTasks sync.WaitGroup
	WriteQueue     channels.Channel

	PendingErrors []error
	Mutex         sync.Mutex // for WriteIOErrors
}

AsyncWriter helps async write

func NewAsyncWriter

func NewAsyncWriter(path string, fileHandleID string, fileHandle *irodsfs.FileHandle, fileHandleLock *sync.Mutex, writeBuffer Buffer) *AsyncWriter

NewAsyncWriter create a new AsyncWriter

func (*AsyncWriter) Flush

func (writer *AsyncWriter) Flush() error

func (*AsyncWriter) GetPendingError

func (writer *AsyncWriter) GetPendingError() error

func (*AsyncWriter) Release

func (writer *AsyncWriter) Release()

Release releases all resources

func (*AsyncWriter) WriteAt

func (writer *AsyncWriter) WriteAt(offset int64, data []byte) error

Write writes data

type Buffer

type Buffer interface {
	Release()

	GetSizeCap() int64

	GetTotalEntries() int
	GetTotalEntrySize() int64
	GetAvailableSize() int64

	WaitForSpace(spaceRequired int64) bool

	CreateEntryGroup(name string) BufferEntryGroup
	GetEntryGroup(name string) BufferEntryGroup
	GetEntryGroups() []BufferEntryGroup
	DeleteEntryGroup(name string)

	DeleteAllEntryGroups()
}

Buffer is a buffer management object

type BufferEntry

type BufferEntry interface {
	GetKey() string
	GetSize() int
	GetAccessCount() int
	GetCreationTime() time.Time

	GetData() []byte
}

BufferEntry is a buffer entry (e.g., a file chunk)

type BufferEntryGroup

type BufferEntryGroup interface {
	GetBuffer() Buffer

	GetName() string
	GetEntryCount() int
	GetSize() int64

	GetEntryKeys() []string
	DeleteAllEntries()

	CreateEntry(key string, data []byte) (BufferEntry, error)
	GetEntry(key string) BufferEntry
	DeleteEntry(key string)
	PopEntry(key string) BufferEntry
}

BufferEntryGroup defines an entry group (e.g., a file)

type BufferedWriter

type BufferedWriter struct {
	Path string

	Buffer            bytes.Buffer
	BufferStartOffset int64
	Mutex             sync.Mutex // lock for WriteBuffer

	Writer Writer
}

func NewBufferedWriter

func NewBufferedWriter(path string, writer Writer) *BufferedWriter

func (*BufferedWriter) Flush

func (writer *BufferedWriter) Flush() error

func (*BufferedWriter) GetPendingError

func (writer *BufferedWriter) GetPendingError() error

func (*BufferedWriter) Release

func (writer *BufferedWriter) Release()

Release releases all resources

func (*BufferedWriter) WriteAt

func (writer *BufferedWriter) WriteAt(offset int64, data []byte) error

type Cache

type Cache interface {
	Release()

	GetSizeCap() int64

	GetTotalEntries() int
	GetTotalEntrySize() int64
	GetAvailableSize() int64

	DeleteAllEntries()
	DeleteAllEntriesForGroup(group string)

	GetEntryKeys() []string
	GetEntryKeysForGroup(group string) []string

	CreateEntry(key string, group string, data []byte) (CacheEntry, error)
	HasEntry(key string) bool
	GetEntry(key string) CacheEntry
	DeleteEntry(key string)
}

Cache is a cache management object

type CacheEntry

type CacheEntry interface {
	GetKey() string
	GetGroup() string
	GetSize() int
	GetCreationTime() time.Time

	GetData() ([]byte, error)
}

CacheEntry is a cache entry (e.g., a file chunk)

type CacheReader

type CacheReader struct {
	Path     string
	Checksum string

	Cache       Cache
	Reader      Reader
	BlockHelper *utils.FileBlockHelper
}

CacheReader helps read through cache

func NewCacheReader

func NewCacheReader(path string, checksum string, cache Cache, reader Reader) *CacheReader

NewCacheReader create a new CacheReader

func (*CacheReader) GetPendingError

func (reader *CacheReader) GetPendingError() error

func (*CacheReader) ReadAt

func (reader *CacheReader) ReadAt(offset int64, length int) ([]byte, error)

ReadAt reads data

func (*CacheReader) Release

func (reader *CacheReader) Release()

Release releases all resources

type DiskCache

type DiskCache struct {
	SizeCap  int64
	EntryCap int
	RootPath string
	Cache    *lrucache.Cache
	Groups   map[string]map[string]bool // key = group name, value = cache keys for a group
	Mutex    sync.Mutex
}

DiskCache

func NewDiskCache

func NewDiskCache(sizeCap int64, rootPath string) (*DiskCache, error)

func (*DiskCache) CreateEntry

func (cache *DiskCache) CreateEntry(key string, group string, data []byte) (CacheEntry, error)

func (*DiskCache) DeleteAllEntries

func (cache *DiskCache) DeleteAllEntries()

func (*DiskCache) DeleteAllEntriesForGroup added in v0.1.1

func (cache *DiskCache) DeleteAllEntriesForGroup(group string)

func (*DiskCache) DeleteEntry

func (cache *DiskCache) DeleteEntry(key string)

func (*DiskCache) GetAvailableSize

func (cache *DiskCache) GetAvailableSize() int64

func (*DiskCache) GetEntry

func (cache *DiskCache) GetEntry(key string) CacheEntry

func (*DiskCache) GetEntryKeys

func (cache *DiskCache) GetEntryKeys() []string

func (*DiskCache) GetEntryKeysForGroup added in v0.1.1

func (cache *DiskCache) GetEntryKeysForGroup(group string) []string

func (*DiskCache) GetRootPath

func (cache *DiskCache) GetRootPath() string

func (*DiskCache) GetSizeCap

func (cache *DiskCache) GetSizeCap() int64

func (*DiskCache) GetTotalEntries

func (cache *DiskCache) GetTotalEntries() int

func (*DiskCache) GetTotalEntrySize

func (cache *DiskCache) GetTotalEntrySize() int64

func (*DiskCache) HasEntry

func (cache *DiskCache) HasEntry(key string) bool

func (*DiskCache) Release

func (cache *DiskCache) Release()

type DiskCacheEntry

type DiskCacheEntry struct {
	Key          string
	Group        string
	Size         int
	CreationTime time.Time
	FilePath     string
}

func NewDiskCacheEntry

func NewDiskCacheEntry(cache *DiskCache, key string, group string, data []byte) (*DiskCacheEntry, error)

func (*DiskCacheEntry) GetCreationTime

func (entry *DiskCacheEntry) GetCreationTime() time.Time

func (*DiskCacheEntry) GetData

func (entry *DiskCacheEntry) GetData() ([]byte, error)

func (*DiskCacheEntry) GetGroup added in v0.1.1

func (entry *DiskCacheEntry) GetGroup() string

func (*DiskCacheEntry) GetKey

func (entry *DiskCacheEntry) GetKey() string

func (*DiskCacheEntry) GetSize

func (entry *DiskCacheEntry) GetSize() int

type RAMBuffer

type RAMBuffer struct {
	SizeCap       int64
	EntryGroupMap map[string]*RAMBufferEntryGroup

	Mutex     *sync.Mutex
	Condition *sync.Cond
}

RAMBuffer

func NewRAMBuffer

func NewRAMBuffer(sizeCap int64) *RAMBuffer

func (*RAMBuffer) CreateEntryGroup

func (buffer *RAMBuffer) CreateEntryGroup(name string) BufferEntryGroup

func (*RAMBuffer) DeleteAllEntryGroups

func (buffer *RAMBuffer) DeleteAllEntryGroups()

func (*RAMBuffer) DeleteEntryGroup

func (buffer *RAMBuffer) DeleteEntryGroup(name string)

func (*RAMBuffer) GetAvailableSize

func (buffer *RAMBuffer) GetAvailableSize() int64

func (*RAMBuffer) GetEntryGroup

func (buffer *RAMBuffer) GetEntryGroup(name string) BufferEntryGroup

func (*RAMBuffer) GetEntryGroups

func (buffer *RAMBuffer) GetEntryGroups() []BufferEntryGroup

func (*RAMBuffer) GetSizeCap

func (buffer *RAMBuffer) GetSizeCap() int64

func (*RAMBuffer) GetTotalEntries

func (buffer *RAMBuffer) GetTotalEntries() int

func (*RAMBuffer) GetTotalEntrySize

func (buffer *RAMBuffer) GetTotalEntrySize() int64

func (*RAMBuffer) Release

func (buffer *RAMBuffer) Release()

func (*RAMBuffer) WaitForSpace

func (buffer *RAMBuffer) WaitForSpace(spaceRequired int64) bool

type RAMBufferEntry

type RAMBufferEntry struct {
	Key          string
	Size         int
	AccessCount  int
	CreationTime time.Time
	Data         []byte
	Mutex        sync.Mutex
}

func NewRAMBufferEntry

func NewRAMBufferEntry(key string, data []byte) *RAMBufferEntry

func (*RAMBufferEntry) GetAccessCount

func (entry *RAMBufferEntry) GetAccessCount() int

func (*RAMBufferEntry) GetCreationTime

func (entry *RAMBufferEntry) GetCreationTime() time.Time

func (*RAMBufferEntry) GetData

func (entry *RAMBufferEntry) GetData() []byte

func (*RAMBufferEntry) GetKey

func (entry *RAMBufferEntry) GetKey() string

func (*RAMBufferEntry) GetSize

func (entry *RAMBufferEntry) GetSize() int

type RAMBufferEntryGroup

type RAMBufferEntryGroup struct {
	Buffer *RAMBuffer

	Name     string
	Size     int64
	EntryMap map[string]*RAMBufferEntry

	Mutex sync.Mutex
}

RAMBufferEntryGroup defines a group

func NewRAMBufferEntryGroup

func NewRAMBufferEntryGroup(buffer *RAMBuffer, name string) *RAMBufferEntryGroup

func (*RAMBufferEntryGroup) CreateEntry

func (group *RAMBufferEntryGroup) CreateEntry(key string, data []byte) (BufferEntry, error)

func (*RAMBufferEntryGroup) DeleteAllEntries

func (group *RAMBufferEntryGroup) DeleteAllEntries()

func (*RAMBufferEntryGroup) DeleteEntry

func (group *RAMBufferEntryGroup) DeleteEntry(key string)

func (*RAMBufferEntryGroup) GetBuffer

func (group *RAMBufferEntryGroup) GetBuffer() Buffer

func (*RAMBufferEntryGroup) GetEntry

func (group *RAMBufferEntryGroup) GetEntry(key string) BufferEntry

func (*RAMBufferEntryGroup) GetEntryCount

func (group *RAMBufferEntryGroup) GetEntryCount() int

func (*RAMBufferEntryGroup) GetEntryKeys

func (group *RAMBufferEntryGroup) GetEntryKeys() []string

func (*RAMBufferEntryGroup) GetName

func (group *RAMBufferEntryGroup) GetName() string

func (*RAMBufferEntryGroup) GetSize

func (group *RAMBufferEntryGroup) GetSize() int64

func (*RAMBufferEntryGroup) PopEntry

func (group *RAMBufferEntryGroup) PopEntry(key string) BufferEntry

type Reader

type Reader interface {
	ReadAt(offset int64, length int) ([]byte, error)
	GetPendingError() error
	Release()
}

Reader helps data read

type SyncReader

type SyncReader struct {
	Path            string
	IRODSFileHandle *irodsfs.FileHandle
	FileHandleLock  *sync.Mutex
}

SyncReader helps sync read

func NewSyncReader

func NewSyncReader(path string, fileHandle *irodsfs.FileHandle, fileHandleLock *sync.Mutex) *SyncReader

NewSyncReader create a new SyncReader

func (*SyncReader) GetPendingError

func (reader *SyncReader) GetPendingError() error

func (*SyncReader) ReadAt

func (reader *SyncReader) ReadAt(offset int64, length int) ([]byte, error)

ReadAt reads data

func (*SyncReader) Release

func (reader *SyncReader) Release()

Release releases all resources

type SyncWriter

type SyncWriter struct {
	Path            string
	IRODSFileHandle *irodsfs.FileHandle
	FileHandleLock  *sync.Mutex
}

SyncWriter helps sync write

func NewSyncWriter

func NewSyncWriter(path string, fileHandle *irodsfs.FileHandle, fileHandleLock *sync.Mutex) *SyncWriter

NewSyncWriter create a new SyncWriter

func (*SyncWriter) Flush

func (writer *SyncWriter) Flush() error

func (*SyncWriter) GetPendingError

func (writer *SyncWriter) GetPendingError() error

func (*SyncWriter) Release

func (writer *SyncWriter) Release()

Release releases all resources

func (*SyncWriter) WriteAt

func (writer *SyncWriter) WriteAt(offset int64, data []byte) error

WriteAt writes data

type Writer

type Writer interface {
	WriteAt(offset int64, data []byte) error
	Flush() error
	GetPendingError() error
	Release()
}

Writer helps data write

Jump to

Keyboard shortcuts

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