db

package
v0.13.2 Latest Latest
Warning

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

Go to latest
Published: May 21, 2016 License: MPL-2.0 Imports: 20 Imported by: 0

Documentation

Overview

Package db provides a set type to track local/remote files with newness checks. We must do a certain amount of normalization in here. We will get fed paths with either native or wire-format separators and encodings depending on who calls us. We transform paths to wire-format (NFC and slashes) on the way to the database, and transform to native format (varying separator and encoding) on the way back out.

Index

Constants

View Source
const (
	KeyTypeDevice = iota
	KeyTypeGlobal
	KeyTypeBlock
	KeyTypeDeviceStatistic
	KeyTypeFolderStatistic
	KeyTypeVirtualMtime
	KeyTypeFolderIdx
	KeyTypeDeviceIdx
)

Variables

This section is empty.

Functions

func BlocksToSize

func BlocksToSize(num int) int64

func DropFolder

func DropFolder(db *Instance, folder string)

DropFolder clears out all information related to the given folder from the database.

Types

type BlockFinder

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

func NewBlockFinder

func NewBlockFinder(db *Instance) *BlockFinder

func (*BlockFinder) Fix

func (f *BlockFinder) Fix(folder, file string, index int32, oldHash, newHash []byte) error

Fix repairs incorrect blockmap entries, removing the old entry and replacing it with a new entry for the given block

func (*BlockFinder) Iterate

func (f *BlockFinder) Iterate(folders []string, hash []byte, iterFn func(string, string, int32) bool) bool

Iterate takes an iterator function which iterates over all matching blocks for the given hash. The iterator function has to return either true (if they are happy with the block) or false to continue iterating for whatever reason. The iterator finally returns the result, whether or not a satisfying block was eventually found.

func (*BlockFinder) String

func (f *BlockFinder) String() string

type BlockMap

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

func NewBlockMap

func NewBlockMap(db *Instance, folder uint32) *BlockMap

func (*BlockMap) Add

func (m *BlockMap) Add(files []protocol.FileInfo) error

Add files to the block map, ignoring any deleted or invalid files.

func (*BlockMap) Discard

func (m *BlockMap) Discard(files []protocol.FileInfo) error

Discard block map state, removing the given files

func (*BlockMap) Drop

func (m *BlockMap) Drop() error

Drop block map, removing all entries related to this block map from the db.

func (*BlockMap) Update

func (m *BlockMap) Update(files []protocol.FileInfo) error

Update block map state, removing any deleted or invalid files.

type FileInfoTruncated

type FileInfoTruncated struct {
	protocol.FileInfo
}

func (*FileInfoTruncated) UnmarshalXDR

func (o *FileInfoTruncated) UnmarshalXDR(bs []byte) error

func (*FileInfoTruncated) UnmarshalXDRFrom added in v0.13.0

func (o *FileInfoTruncated) UnmarshalXDRFrom(u *xdr.Unmarshaller) error

type FileIntf

type FileIntf interface {
	Size() int64
	IsDeleted() bool
	IsInvalid() bool
	IsDirectory() bool
	IsSymlink() bool
	HasPermissionBits() bool
}

FileIntf is the set of methods implemented by both protocol.FileInfo and protocol.FileInfoTruncated.

type FileSet

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

func NewFileSet

func NewFileSet(folder string, db *Instance) *FileSet

func (*FileSet) Availability

func (s *FileSet) Availability(file string) []protocol.DeviceID

func (*FileSet) Get

func (s *FileSet) Get(device protocol.DeviceID, file string) (protocol.FileInfo, bool)

func (*FileSet) GetGlobal

func (s *FileSet) GetGlobal(file string) (protocol.FileInfo, bool)

func (*FileSet) GetGlobalTruncated

func (s *FileSet) GetGlobalTruncated(file string) (FileInfoTruncated, bool)

func (*FileSet) GlobalSize added in v0.12.0

func (s *FileSet) GlobalSize() (files, deleted int, bytes int64)

func (*FileSet) LocalSize added in v0.12.0

func (s *FileSet) LocalSize() (files, deleted int, bytes int64)

func (*FileSet) LocalVersion

func (s *FileSet) LocalVersion(device protocol.DeviceID) int64

func (*FileSet) Replace

func (s *FileSet) Replace(device protocol.DeviceID, fs []protocol.FileInfo)

func (*FileSet) Update

func (s *FileSet) Update(device protocol.DeviceID, fs []protocol.FileInfo)

func (*FileSet) WithGlobal

func (s *FileSet) WithGlobal(fn Iterator)

func (*FileSet) WithGlobalTruncated

func (s *FileSet) WithGlobalTruncated(fn Iterator)

func (*FileSet) WithHave

func (s *FileSet) WithHave(device protocol.DeviceID, fn Iterator)

func (*FileSet) WithHaveTruncated

func (s *FileSet) WithHaveTruncated(device protocol.DeviceID, fn Iterator)

func (*FileSet) WithNeed

func (s *FileSet) WithNeed(device protocol.DeviceID, fn Iterator)

func (*FileSet) WithNeedTruncated

func (s *FileSet) WithNeedTruncated(device protocol.DeviceID, fn Iterator)

func (*FileSet) WithPrefixedGlobalTruncated

func (s *FileSet) WithPrefixedGlobalTruncated(prefix string, fn Iterator)

func (*FileSet) WithPrefixedHaveTruncated added in v0.12.21

func (s *FileSet) WithPrefixedHaveTruncated(device protocol.DeviceID, prefix string, fn Iterator)

type Instance added in v0.12.0

type Instance struct {
	*leveldb.DB
	// contains filtered or unexported fields
}

func Open added in v0.12.0

func Open(file string) (*Instance, error)

func OpenMemory added in v0.12.0

func OpenMemory() *Instance

func (*Instance) ListFolders added in v0.12.0

func (db *Instance) ListFolders() []string

type Iterator

type Iterator func(f FileIntf) bool

The Iterator is called with either a protocol.FileInfo or a protocol.FileInfoTruncated (depending on the method) and returns true to continue iteration, false to stop.

type NamespacedKV

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

NamespacedKV is a simple key-value store using a specific namespace within a leveldb.

func NewNamespacedKV

func NewNamespacedKV(db *Instance, prefix string) *NamespacedKV

NewNamespacedKV returns a new NamespacedKV that lives in the namespace specified by the prefix.

func (NamespacedKV) Bool

func (n NamespacedKV) Bool(key string) (bool, bool)

Bool returns the stored value as a boolean and a boolean that is false if no value was stored at the key.

func (NamespacedKV) Bytes

func (n NamespacedKV) Bytes(key string) ([]byte, bool)

Bytes returns the stored value as a raw byte slice and a boolean that is false if no value was stored at the key.

func (NamespacedKV) Delete

func (n NamespacedKV) Delete(key string)

Delete deletes the specified key. It is allowed to delete a nonexistent key.

func (*NamespacedKV) Int64

func (n *NamespacedKV) Int64(key string) (int64, bool)

Int64 returns the stored value interpreted as an int64 and a boolean that is false if no value was stored at the key.

func (*NamespacedKV) PutBool

func (n *NamespacedKV) PutBool(key string, val bool)

PutBool stores a new boolean. Any existing value (even if of another type) is overwritten.

func (*NamespacedKV) PutBytes

func (n *NamespacedKV) PutBytes(key string, val []byte)

PutBytes stores a new byte slice. Any existing value (even if of another type) is overwritten.

func (*NamespacedKV) PutInt64

func (n *NamespacedKV) PutInt64(key string, val int64)

PutInt64 stores a new int64. Any existing value (even if of another type) is overwritten.

func (*NamespacedKV) PutString

func (n *NamespacedKV) PutString(key, val string)

PutString stores a new string. Any existing value (even if of another type) is overwritten.

func (*NamespacedKV) PutTime

func (n *NamespacedKV) PutTime(key string, val time.Time)

PutTime stores a new time.Time. Any existing value (even if of another type) is overwritten.

func (*NamespacedKV) Reset

func (n *NamespacedKV) Reset()

Reset removes all entries in this namespace.

func (NamespacedKV) String

func (n NamespacedKV) String(key string) (string, bool)

String returns the stored value interpreted as a string and a boolean that is false if no value was stored at the key.

func (NamespacedKV) Time

func (n NamespacedKV) Time(key string) (time.Time, bool)

Time returns the stored value interpreted as a time.Time and a boolean that is false if no value was stored at the key.

type VirtualMtimeRepo

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

func NewVirtualMtimeRepo

func NewVirtualMtimeRepo(ldb *Instance, folder string) *VirtualMtimeRepo

func (*VirtualMtimeRepo) DeleteMtime

func (r *VirtualMtimeRepo) DeleteMtime(path string)

func (*VirtualMtimeRepo) Drop

func (r *VirtualMtimeRepo) Drop()

func (*VirtualMtimeRepo) GetMtime

func (r *VirtualMtimeRepo) GetMtime(path string, diskMtime time.Time) time.Time

func (*VirtualMtimeRepo) UpdateMtime

func (r *VirtualMtimeRepo) UpdateMtime(path string, diskMtime, actualMtime time.Time)

Jump to

Keyboard shortcuts

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