db

package
v0.11.8 Latest Latest
Warning

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

Go to latest
Published: Jun 7, 2015 License: MPL-2.0 Imports: 19 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.

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
)

Variables

This section is empty.

Functions

func BlocksToSize

func BlocksToSize(num int) int64

func DropFolder

func DropFolder(db *leveldb.DB, folder string)

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

func ListFolders

func ListFolders(db *leveldb.DB) []string

ListFolders returns the folder IDs seen in the database.

Types

type BlockFinder

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

func NewBlockFinder

func NewBlockFinder(db *leveldb.DB, cfg *config.Wrapper) *BlockFinder

func (*BlockFinder) Changed

func (f *BlockFinder) Changed(cfg config.Configuration) error

Changed implements config.Handler interface

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(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.

type BlockMap

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

func NewBlockMap

func NewBlockMap(db *leveldb.DB, folder string) *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
	ActualSize int64
}

func (FileInfoTruncated) Size

func (f FileInfoTruncated) Size() int64

func (*FileInfoTruncated) UnmarshalXDR

func (f *FileInfoTruncated) UnmarshalXDR(bs []byte) 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 *leveldb.DB) *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) LocalVersion

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

func (*FileSet) Replace

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

func (*FileSet) ReplaceWithDelete

func (s *FileSet) ReplaceWithDelete(device protocol.DeviceID, fs []protocol.FileInfo, myID uint64)

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 added in v0.10.25

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

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 added in v0.10.24

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

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

func NewNamespacedKV added in v0.10.24

func NewNamespacedKV(db *leveldb.DB, prefix string) *NamespacedKV

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

func (NamespacedKV) Bytes added in v0.11.4

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 added in v0.10.24

func (n NamespacedKV) Delete(key string)

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

func (*NamespacedKV) Int64 added in v0.10.24

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) PutBytes added in v0.11.4

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 added in v0.10.24

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 added in v0.10.24

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 added in v0.10.24

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 added in v0.11.4

func (n *NamespacedKV) Reset()

Reset removes all entries in this namespace.

func (NamespacedKV) String added in v0.10.24

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 added in v0.10.24

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 added in v0.11.4

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

func NewVirtualMtimeRepo added in v0.11.4

func NewVirtualMtimeRepo(ldb *leveldb.DB, folder string) *VirtualMtimeRepo

func (*VirtualMtimeRepo) DeleteMtime added in v0.11.4

func (r *VirtualMtimeRepo) DeleteMtime(path string)

func (*VirtualMtimeRepo) Drop added in v0.11.4

func (r *VirtualMtimeRepo) Drop()

func (*VirtualMtimeRepo) GetMtime added in v0.11.4

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

func (*VirtualMtimeRepo) UpdateMtime added in v0.11.4

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