Documentation ¶
Index ¶
- Constants
- Variables
- func ApplyUpdates(updates ...writeaheadlog.Update) error
- func CombinedChunkIndex(numChunks, chunkIndex uint64, numCombinedChunks int) int
- func ExtractSegment(pieces [][]byte, segmentIndex int, segmentSize uint64) [][]byte
- func IsSiaFileUpdate(update writeaheadlog.Update) bool
- func LoadSiaFileFromReaderWithChunks(r io.ReadSeeker, path string, wal *writeaheadlog.WAL) (*SiaFile, Chunks, error)
- func NewRSCode(nData, nParity int) (modules.ErasureCoder, error)
- func NewRSSubCode(nData, nParity int, segmentSize uint64) (modules.ErasureCoder, error)
- type BubbledMetadata
- type Chunk
- type Chunks
- type FileChunk
- type FileData
- type HostPublicKey
- type Metadata
- type PartialChunkInfo
- type Piece
- type RSCode
- func (rs *RSCode) Encode(data []byte) ([][]byte, error)
- func (rs *RSCode) EncodeShards(pieces [][]byte) ([][]byte, error)
- func (rs *RSCode) Identifier() modules.ErasureCoderIdentifier
- func (rs *RSCode) MinPieces() int
- func (rs *RSCode) NumPieces() int
- func (rs *RSCode) Reconstruct(pieces [][]byte) error
- func (rs *RSCode) Recover(pieces [][]byte, n uint64, w io.Writer) error
- func (rs *RSCode) SupportsPartialEncoding() bool
- func (rs *RSCode) Type() modules.ErasureCoderType
- type RSSubCode
- func (rs *RSSubCode) Encode(data []byte) ([][]byte, error)
- func (rs *RSSubCode) EncodeShards(pieces [][]byte) ([][]byte, error)
- func (rs *RSSubCode) Identifier() modules.ErasureCoderIdentifier
- func (rs *RSSubCode) Reconstruct(pieces [][]byte) error
- func (rs *RSSubCode) Recover(pieces [][]byte, n uint64, w io.Writer) error
- func (rs *RSSubCode) SupportsPartialEncoding() bool
- func (rs *RSSubCode) Type() modules.ErasureCoderType
- type SiaFile
- func LoadSiaFile(path string, wal *writeaheadlog.WAL) (*SiaFile, error)
- func LoadSiaFileFromReader(r io.ReadSeeker, path string, wal *writeaheadlog.WAL) (*SiaFile, error)
- func New(siaFilePath, source string, wal *writeaheadlog.WAL, ...) (*SiaFile, error)
- func NewFromLegacyData(fd FileData, siaFilePath string, wal *writeaheadlog.WAL) (*SiaFile, error)
- func (sf *SiaFile) AccessTime() time.Time
- func (sf *SiaFile) AddPiece(pk types.SiaPublicKey, chunkIndex, pieceIndex uint64, merkleRoot crypto.Hash) (err error)
- func (sf *SiaFile) AddSkylink(s modules.Skylink) (err error)
- func (sf *SiaFile) ChangeTime() time.Time
- func (sf *SiaFile) Chunk(chunkIndex uint64) (chunk, error)
- func (sf *SiaFile) ChunkHealth(index int, offlineMap map[string]bool, goodForRenewMap map[string]bool) (float64, float64, error)
- func (sf *SiaFile) ChunkSize() uint64
- func (sf *SiaFile) CreateTime() time.Time
- func (sf *SiaFile) Delete() (err error)
- func (sf *SiaFile) Deleted() bool
- func (sf *SiaFile) ErasureCode() modules.ErasureCoder
- func (sf *SiaFile) Expiration(contracts map[string]modules.RenterContract) types.BlockHeight
- func (sf *SiaFile) GoodPieces(chunkIndex int, offlineMap map[string]bool, goodForRenewMap map[string]bool) (uint64, uint64)
- func (sf *SiaFile) GrowNumChunks(numChunks uint64) (err error)
- func (sf *SiaFile) HasPartialChunk() bool
- func (sf *SiaFile) Health(offline map[string]bool, goodForRenew map[string]bool) (h float64, sh float64, uh float64, ush float64, nsc uint64)
- func (sf *SiaFile) HostPublicKeys() (spks []types.SiaPublicKey)
- func (sf *SiaFile) IsIncludedPartialChunk(chunkIndex uint64) bool
- func (sf *SiaFile) IsIncompletePartialChunk(chunkIndex uint64) bool
- func (sf *SiaFile) LastHealthCheckTime() time.Time
- func (sf *SiaFile) LocalPath() string
- func (sf *SiaFile) Lock()
- func (sf *SiaFile) MasterKey() crypto.CipherKey
- func (sf *SiaFile) Merge(newFile *SiaFile) (map[uint64]uint64, error)
- func (sf *SiaFile) Metadata() Metadata
- func (sf *SiaFile) ModTime() time.Time
- func (sf *SiaFile) Mode() os.FileMode
- func (sf *SiaFile) NumChunks() uint64
- func (sf *SiaFile) NumStuckChunks() uint64
- func (sf *SiaFile) PartialChunks() []PartialChunkInfo
- func (sf *SiaFile) PieceSize() uint64
- func (sf *SiaFile) Pieces(chunkIndex uint64) ([][]Piece, error)
- func (sf *SiaFile) Redundancy(offlineMap map[string]bool, goodForRenewMap map[string]bool) (r, ur float64, err error)
- func (sf *SiaFile) RemoveLastChunk() error
- func (sf *SiaFile) Rename(newSiaFilePath string) error
- func (sf *SiaFile) SaveHeader() (err error)
- func (sf *SiaFile) SaveMetadata() (err error)
- func (sf *SiaFile) SaveWithChunks(chunks Chunks) (err error)
- func (sf *SiaFile) SetAllStuck(stuck bool) (err error)
- func (sf *SiaFile) SetChunkStatusCompleted(pci uint64) (err error)
- func (sf *SiaFile) SetFileSize(fileSize uint64) (err error)
- func (sf *SiaFile) SetLastHealthCheckTime()
- func (sf *SiaFile) SetLocalPath(path string) (err error)
- func (sf *SiaFile) SetMode(mode os.FileMode) (err error)
- func (sf *SiaFile) SetPartialChunks(combinedChunks []modules.PartialChunk, updates []writeaheadlog.Update) (err error)
- func (sf *SiaFile) SetPartialsSiaFile(partialsSiaFile *SiaFile)
- func (sf *SiaFile) SetSiaFilePath(path string)
- func (sf *SiaFile) SetStuck(index uint64, stuck bool) (err error)
- func (sf *SiaFile) SiaFilePath() string
- func (sf *SiaFile) Size() uint64
- func (sf *SiaFile) Snapshot(sp modules.SiaPath) (*Snapshot, error)
- func (sf *SiaFile) SnapshotReader() (*SnapshotReader, error)
- func (sf *SiaFile) StuckChunkByIndex(index uint64) (bool, error)
- func (sf *SiaFile) UID() SiafileUID
- func (sf *SiaFile) Unlock()
- func (sf *SiaFile) UnmanagedSetDeleted(deleted bool)
- func (sf *SiaFile) UnmanagedSetSiaFilePath(newSiaFilePath string)
- func (sf *SiaFile) UpdateAccessTime() (err error)
- func (sf *SiaFile) UpdateUniqueID()
- func (sf *SiaFile) UpdateUsedHosts(used []types.SiaPublicKey) (err error)
- func (sf *SiaFile) UploadProgressAndBytes() (float64, uint64, error)
- type SiafileUID
- type Snapshot
- func (s *Snapshot) ChunkIndexByOffset(offset uint64) (chunkIndex uint64, off uint64)
- func (s *Snapshot) ChunkSize() uint64
- func (s *Snapshot) ErasureCode() modules.ErasureCoder
- func (s *Snapshot) IsIncludedPartialChunk(chunkIndex uint64) (PartialChunkInfo, bool)
- func (s *Snapshot) IsIncompletePartialChunk(chunkIndex uint64) bool
- func (s *Snapshot) LocalPath() string
- func (s *Snapshot) MasterKey() crypto.CipherKey
- func (s *Snapshot) Mode() os.FileMode
- func (s *Snapshot) NumChunks() uint64
- func (s *Snapshot) PartialChunks() []PartialChunkInfo
- func (s *Snapshot) PieceSize() uint64
- func (s *Snapshot) Pieces(chunkIndex uint64) [][]Piece
- func (s *Snapshot) SiaPath() modules.SiaPath
- func (s *Snapshot) Size() uint64
- func (s *Snapshot) UID() SiafileUID
- type SnapshotReader
Constants ¶
const ( CombinedChunkStatusInvalid = iota // status wasn't initialized CombinedChunkStatusInComplete // partial chunk is included in an incomplete combined chunk. CombinedChunkStatusCompleted // partial chunk is included in a completed combined chunk. )
Constants to indicate which part of the partial upload the combined chunk is currently at.
Variables ¶
var ( // ECReedSolomon is the marshaled type of the reed solomon coder. ECReedSolomon = modules.ErasureCoderType{0, 0, 0, 1} // ECReedSolomonSubShards64 is the marshaled type of the reed solomon coder // for files where every 64 bytes of an encoded piece can be decoded // separately. ECReedSolomonSubShards64 = modules.ErasureCoderType{0, 0, 0, 2} )
var ( // ErrPathOverload is an error when a file already exists at that location ErrPathOverload = errors.New("a file already exists at that location") // ErrUnknownPath is an error when a file cannot be found with the given path ErrUnknownPath = errors.New("no file known with that path") // ErrUnknownThread is an error when a SiaFile is trying to be closed by a // thread that is not in the threadMap ErrUnknownThread = errors.New("thread should not be calling Close(), does not have control of the siafile") // ErrDeleted is returned when an operation failed due to the siafile being // deleted already. ErrDeleted = errors.New("files was deleted") )
Functions ¶
func ApplyUpdates ¶
func ApplyUpdates(updates ...writeaheadlog.Update) error
ApplyUpdates is a wrapper for applyUpdates that uses the production dependencies.
func CombinedChunkIndex ¶
CombinedChunkIndex is a helper method which translates a chunk's index to the corresponding combined chunk index dependng on the number of combined chunks.
func ExtractSegment ¶
ExtractSegment is a convenience method that extracts the data of the segment at segmentIndex from pieces.
func IsSiaFileUpdate ¶
func IsSiaFileUpdate(update writeaheadlog.Update) bool
IsSiaFileUpdate is a helper method that makes sure that a wal update belongs to the SiaFile package.
func LoadSiaFileFromReaderWithChunks ¶
func LoadSiaFileFromReaderWithChunks(r io.ReadSeeker, path string, wal *writeaheadlog.WAL) (*SiaFile, Chunks, error)
LoadSiaFileFromReaderWithChunks does not only read the header of the Siafile from disk but also the chunks which it returns separately. This is useful if the file is read from a buffer in-memory and the chunks can't be read from disk later.
func NewRSCode ¶
func NewRSCode(nData, nParity int) (modules.ErasureCoder, error)
NewRSCode creates a new Reed-Solomon encoder/decoder using the supplied parameters.
func NewRSSubCode ¶
func NewRSSubCode(nData, nParity int, segmentSize uint64) (modules.ErasureCoder, error)
NewRSSubCode creates a new Reed-Solomon encoder/decoder using the supplied parameters.
Types ¶
type BubbledMetadata ¶
type BubbledMetadata struct { Health float64 LastHealthCheckTime time.Time ModTime time.Time NumStuckChunks uint64 OnDisk bool Redundancy float64 Size uint64 StuckHealth float64 UID SiafileUID }
BubbledMetadata is the metadata of a siafile that gets bubbled
type Chunk ¶
type Chunk struct {
Pieces [][]Piece
}
Chunk is an exported chunk. It contains exported pieces.
type Chunks ¶
type Chunks struct {
// contains filtered or unexported fields
}
Chunks is an exported version of a chunk slice.. It exists for convenience to make sure the caller has an exported type to pass around.
type FileChunk ¶
type FileChunk struct {
Pieces [][]Piece
}
FileChunk is a helper struct that contains data about a chunk.
type FileData ¶
type FileData struct { Name string FileSize uint64 MasterKey [crypto.EntropySize]byte ErasureCode modules.ErasureCoder RepairPath string PieceSize uint64 Mode os.FileMode Deleted bool UID SiafileUID Chunks []FileChunk }
FileData is a helper struct that contains all the relevant information of a file. It simplifies passing the necessary data between modules and keeps the interface clean.
type HostPublicKey ¶
type HostPublicKey struct { PublicKey types.SiaPublicKey // public key of host Used bool // indicates if we currently use this host }
HostPublicKey is an entry in the HostPubKey table.
func (HostPublicKey) MarshalSia ¶
func (hpk HostPublicKey) MarshalSia(w io.Writer) error
MarshalSia implements the encoding.SiaMarshaler interface.
func (*HostPublicKey) UnmarshalSia ¶
func (hpk *HostPublicKey) UnmarshalSia(r io.Reader) error
UnmarshalSia implements the encoding.SiaUnmarshaler interface.
type Metadata ¶
type Metadata struct { UniqueID SiafileUID `json:"uniqueid"` // unique identifier for file StaticPagesPerChunk uint8 `json:"pagesperchunk"` // number of pages reserved for storing a chunk. StaticVersion [16]byte `json:"version"` // version of the sia file format used FileSize int64 `json:"filesize"` // total size of the file StaticPieceSize uint64 `json:"piecesize"` // size of a single piece of the file LocalPath string `json:"localpath"` // file to the local copy of the file used for repairing // Fields for encryption StaticMasterKey []byte `json:"masterkey"` // masterkey used to encrypt pieces StaticMasterKeyType crypto.CipherType `json:"masterkeytype"` StaticSharingKey []byte `json:"sharingkey"` // key used to encrypt shared pieces StaticSharingKeyType crypto.CipherType `json:"sharingkeytype"` // Fields for partial uploads DisablePartialChunk bool `json:"disablepartialchunk"` // determines whether the file should be treated like legacy files PartialChunks []PartialChunkInfo `json:"partialchunks"` // information about the partial chunk. HasPartialChunk bool `json:"haspartialchunk"` // indicates whether this file is supposed to have a partial chunk or not // The following fields are the usual unix timestamps of files. ModTime time.Time `json:"modtime"` // time of last content modification ChangeTime time.Time `json:"changetime"` // time of last metadata modification AccessTime time.Time `json:"accesstime"` // time of last access CreateTime time.Time `json:"createtime"` // time of file creation // Cached fields. These fields are cached fields and are only meant to be used // to create FileInfos for file related API endpoints. There is no guarantee // that these fields are up-to-date. Neither in memory nor on disk. Updates to // these fields aren't persisted immediately. Instead they will only be // persisted whenever another method persists the metadata or when the SiaFile // is closed. // // CachedRedundancy is the redundancy of the file on the network and is // updated within the 'Redundancy' method which is periodically called by the // repair code. // // CachedUserRedundancy is the redundancy of the file on the network as // visible to the user and is updated within the 'Redundancy' method which is // periodically called by the repair code. // // CachedHealth is the health of the file on the network and is also // periodically updated by the health check loop whenever 'Health' is called. // // CachedStuckHealth is the health of the stuck chunks of the file. It is // updated by the health check loop. CachedExpiration is the lowest height at // which any of the file's contracts will expire. Also updated periodically by // the health check loop whenever 'Health' is called. // // CachedUploadedBytes is the number of bytes of the file that have been // uploaded to the network so far. Is updated every time a piece is added to // the siafile. // // CachedUploadProgress is the upload progress of the file and is updated // every time a piece is added to the siafile. // CachedRedundancy float64 `json:"cachedredundancy"` CachedUserRedundancy float64 `json:"cacheduserredundancy"` CachedHealth float64 `json:"cachedhealth"` CachedStuckHealth float64 `json:"cachedstuckhealth"` CachedExpiration types.BlockHeight `json:"cachedexpiration"` CachedUploadedBytes uint64 `json:"cacheduploadedbytes"` CachedUploadProgress float64 `json:"cacheduploadprogress"` // Repair loop fields // // Health is the worst health of the file's unstuck chunks and // represents the percent of redundancy missing // // LastHealthCheckTime is the timestamp of the last time the SiaFile's // health was checked by Health() // // NumStuckChunks is the number of all the SiaFile's chunks that have // been marked as stuck by the repair loop. This doesn't include a potential // partial chunk at the end of the file though. Use 'numStuckChunks()' for // that instead. // // Redundancy is the cached value of the last time the file's redundancy // was checked // // StuckHealth is the worst health of any of the file's stuck chunks // Health float64 `json:"health"` LastHealthCheckTime time.Time `json:"lasthealthchecktime"` NumStuckChunks uint64 `json:"numstuckchunks"` Redundancy float64 `json:"redundancy"` StuckHealth float64 `json:"stuckhealth"` // File ownership/permission fields. Mode os.FileMode `json:"mode"` // unix filemode of the sia file - uint32 UserID int32 `json:"userid"` // id of the user who owns the file GroupID int32 `json:"groupid"` // id of the group that owns the file // The following fields are the offsets for data that is written to disk // after the pubKeyTable. We reserve a generous amount of space for the // table and extra fields, but we need to remember those offsets in case we // need to resize later on. // // chunkOffset is the offset of the first chunk, forced to be a factor of // 4096, default 4kib // // pubKeyTableOffset is the offset of the publicKeyTable within the // file. // ChunkOffset int64 `json:"chunkoffset"` PubKeyTableOffset int64 `json:"pubkeytableoffset"` // erasure code settings. // // StaticErasureCodeType specifies the algorithm used for erasure coding // chunks. Available types are: // 0 - Invalid / Missing Code // 1 - Reed Solomon Code // // erasureCodeParams specifies possible parameters for a certain // StaticErasureCodeType. Currently params will be parsed as follows: // Reed Solomon Code - 4 bytes dataPieces / 4 bytes parityPieces // StaticErasureCodeType [4]byte `json:"erasurecodetype"` StaticErasureCodeParams [8]byte `json:"erasurecodeparams"` // Skylink tracking. If this siafile is known to have sectors of any // skyfiles, those skyfiles will be listed here. It should be noted that // a single siafile can be responsible for tracking many skyfiles. Skylinks []string `json:"skylinks"` // contains filtered or unexported fields }
Metadata is the metadata of a SiaFile and is JSON encoded. Note: Methods which update the metadata and can potentially fail after doing so and before persisting the change should use backup() and restore() to restore the metadata before returning the error. Also changes to Metadata require backup() and restore() to be updated as well.
func LoadSiaFileMetadata ¶
LoadSiaFileMetadata is a wrapper for loadSiaFileMetadata that uses the production dependencies.
type PartialChunkInfo ¶
type PartialChunkInfo struct { ID modules.CombinedChunkID `json:"id"` // ID of the combined chunk Index uint64 `json:"index"` // Index of the combined chunk within partialsSiaFile Offset uint64 `json:"offset"` // Offset of partial chunk within combined chunk Length uint64 `json:"length"` // Length of partial chunk within combined chunk Status uint8 `json:"status"` // Status of combined chunk }
PartialChunkInfo contains all the essential information about a partial chunk relevant to SiaFiles. A SiaFile with a partial chunk may contain 1 or 2 PartialChunkInfos since the partial chunk might be split between 2 combined chunks.
type Piece ¶
type Piece struct { HostPubKey types.SiaPublicKey // public key of the host MerkleRoot crypto.Hash // merkle root of the piece }
Piece is an exported piece. It contains a resolved public key instead of the table offset.
type RSCode ¶
type RSCode struct {
// contains filtered or unexported fields
}
RSCode is a Reed-Solomon encoder/decoder. It implements the modules.ErasureCoder interface.
func (*RSCode) Encode ¶
Encode splits data into equal-length pieces, some containing the original data and some containing parity data.
func (*RSCode) EncodeShards ¶
EncodeShards creates the parity shards for an already sharded input.
func (*RSCode) Identifier ¶
func (rs *RSCode) Identifier() modules.ErasureCoderIdentifier
Identifier returns an identifier for an erasure coder which can be used to identify erasure coders of the same type, dataPieces and parityPieces.
func (*RSCode) MinPieces ¶
MinPieces return the minimum number of pieces that must be present to recover the original data.
func (*RSCode) Reconstruct ¶
Reconstruct recovers the full set of encoded shards from the provided pieces, of which at least MinPieces must be non-nil.
func (*RSCode) Recover ¶
Recover recovers the original data from pieces and writes it to w. pieces should be identical to the slice returned by Encode (length and order must be preserved), but with missing elements set to nil.
func (*RSCode) SupportsPartialEncoding ¶
SupportsPartialEncoding returns false for the basic reed-solomon encoder.
func (*RSCode) Type ¶
func (rs *RSCode) Type() modules.ErasureCoderType
Type returns the erasure coders type identifier.
type RSSubCode ¶
type RSSubCode struct { RSCode // contains filtered or unexported fields }
RSSubCode is a Reed-Solomon encoder/decoder. It implements the modules.ErasureCoder interface in a way that every crypto.SegmentSize bytes of encoded data can be recovered separately.
func (*RSSubCode) Encode ¶
Encode splits data into equal-length pieces, some containing the original data and some containing parity data.
func (*RSSubCode) EncodeShards ¶
EncodeShards encodes data in a way that every segmentSize bytes of the encoded data can be decoded independently.
func (*RSSubCode) Identifier ¶
func (rs *RSSubCode) Identifier() modules.ErasureCoderIdentifier
Identifier returns an identifier for an erasure coder which can be used to identify erasure coders of the same type, dataPieces and parityPieces.
func (*RSSubCode) Reconstruct ¶
Reconstruct recovers the full set of encoded shards from the provided pieces, of which at least MinPieces must be non-nil.
func (*RSSubCode) Recover ¶
Recover accepts encoded pieces and decodes the segment at segmentIndex. The size of the decoded data is segmentSize * dataPieces.
func (*RSSubCode) SupportsPartialEncoding ¶
SupportsPartialEncoding returns true for the custom reed-solomon encoder.
func (*RSSubCode) Type ¶
func (rs *RSSubCode) Type() modules.ErasureCoderType
Type returns the erasure coders type identifier.
type SiaFile ¶
type SiaFile struct {
// contains filtered or unexported fields
}
SiaFile is the disk format for files uploaded to the Sia network. It contains all the necessary information to recover a file from its hosts and allows for easy constant-time updates of the file without having to read or write the whole file.
func LoadSiaFile ¶
func LoadSiaFile(path string, wal *writeaheadlog.WAL) (*SiaFile, error)
LoadSiaFile is a wrapper for loadSiaFile that uses the production dependencies.
func LoadSiaFileFromReader ¶
func LoadSiaFileFromReader(r io.ReadSeeker, path string, wal *writeaheadlog.WAL) (*SiaFile, error)
LoadSiaFileFromReader allows loading a SiaFile from a different location that directly from disk as long as the source satisfies the SiaFileSource interface.
func New ¶
func New(siaFilePath, source string, wal *writeaheadlog.WAL, erasureCode modules.ErasureCoder, masterKey crypto.CipherKey, fileSize uint64, fileMode os.FileMode, partialsSiaFile *SiaFile, disablePartialUpload bool) (*SiaFile, error)
New create a new SiaFile.
func NewFromLegacyData ¶
NewFromLegacyData creates a new SiaFile from data that was previously loaded from a legacy file.
func (*SiaFile) AccessTime ¶
AccessTime returns the AccessTime timestamp of the file.
func (*SiaFile) AddPiece ¶
func (sf *SiaFile) AddPiece(pk types.SiaPublicKey, chunkIndex, pieceIndex uint64, merkleRoot crypto.Hash) (err error)
AddPiece adds an uploaded piece to the file. It also updates the host table if the public key of the host is not already known.
func (*SiaFile) AddSkylink ¶
AddSkylink will add a skylink to the SiaFile.
func (*SiaFile) ChangeTime ¶
ChangeTime returns the ChangeTime timestamp of the file.
func (*SiaFile) ChunkHealth ¶
func (sf *SiaFile) ChunkHealth(index int, offlineMap map[string]bool, goodForRenewMap map[string]bool) (float64, float64, error)
ChunkHealth returns the health of the chunk which is defined as the percent of parity pieces remaining.
func (*SiaFile) CreateTime ¶
CreateTime returns the CreateTime timestamp of the file.
func (*SiaFile) Delete ¶
Delete removes the file from disk and marks it as deleted. Once the file is deleted, certain methods should return an error.
func (*SiaFile) ErasureCode ¶
func (sf *SiaFile) ErasureCode() modules.ErasureCoder
ErasureCode returns the erasure coder used by the file.
func (*SiaFile) Expiration ¶
func (sf *SiaFile) Expiration(contracts map[string]modules.RenterContract) types.BlockHeight
Expiration updates CachedExpiration with the lowest height at which any of the file's contracts will expire and returns the new value.
func (*SiaFile) GoodPieces ¶
func (sf *SiaFile) GoodPieces(chunkIndex int, offlineMap map[string]bool, goodForRenewMap map[string]bool) (uint64, uint64)
GoodPieces loops over the pieces of a chunk and tracks the number of unique pieces that are good for upload, meaning the host is online, and the number of unique pieces that are good for renew, meaning the contract is set to renew.
func (*SiaFile) GrowNumChunks ¶
GrowNumChunks increases the number of chunks in the SiaFile to numChunks. If the file already contains >= numChunks chunks then GrowNumChunks is a no-op.
func (*SiaFile) HasPartialChunk ¶
HasPartialChunk returns whether this file is supposed to have a partial chunk or not.
func (*SiaFile) Health ¶
func (sf *SiaFile) Health(offline map[string]bool, goodForRenew map[string]bool) (h float64, sh float64, uh float64, ush float64, nsc uint64)
Health calculates the health of the file to be used in determining repair priority. Health of the file is the lowest health of any of the chunks and is defined as the percent of parity pieces remaining. The NumStuckChunks will be calculated for the SiaFile and returned.
NOTE: The cached values of the health and stuck health will be set but not saved to disk as Health() does not write to disk. If the cached values need to be updated on disk then a metadata save method should be called in conjunction with Health()
health = 0 is full redundancy, health <= 1 is recoverable, health > 1 needs to be repaired from disk
func (*SiaFile) HostPublicKeys ¶
func (sf *SiaFile) HostPublicKeys() (spks []types.SiaPublicKey)
HostPublicKeys returns all the public keys of hosts the file has ever been uploaded to. That means some of those hosts might no longer be in use.
func (*SiaFile) IsIncludedPartialChunk ¶
IsIncludedPartialChunk returns 'true' if the provided index points to a partial chunk which has been added to the partials sia file already.
func (*SiaFile) IsIncompletePartialChunk ¶
IsIncompletePartialChunk returns 'true' if the provided index points to a partial chunk which hasn't been added to a partials siafile yet.
func (*SiaFile) LastHealthCheckTime ¶
LastHealthCheckTime returns the LastHealthCheckTime timestamp of the file
func (*SiaFile) Lock ¶
func (sf *SiaFile) Lock()
Lock acquires the SiaFile's mutex for calling Unmanaged exported methods.
func (*SiaFile) Merge ¶
Merge merges two PartialsSiafiles into one, returning a map which translates chunk indices in newFile to indices in sf.
func (*SiaFile) Metadata ¶
Metadata returns the SiaFile's metadata, resolving any fields related to partial chunks.
func (*SiaFile) NumChunks ¶
NumChunks returns the number of chunks the file consists of. This will return the number of chunks the file consists of even if the file is not fully uploaded yet.
func (*SiaFile) NumStuckChunks ¶
NumStuckChunks returns the Number of Stuck Chunks recorded in the file's metadata
func (*SiaFile) PartialChunks ¶
func (sf *SiaFile) PartialChunks() []PartialChunkInfo
PartialChunks returns the partial chunk infos of the siafile.
func (*SiaFile) Pieces ¶
Pieces returns all the pieces for a chunk in a slice of slices that contains all the pieces for a certain index.
func (*SiaFile) Redundancy ¶
func (sf *SiaFile) Redundancy(offlineMap map[string]bool, goodForRenewMap map[string]bool) (r, ur float64, err error)
Redundancy returns the redundancy of the least redundant chunk. A file becomes available when this redundancy is >= 1. Assumes that every piece is unique within a file contract. -1 is returned if the file has size 0. It takes two arguments, a map of offline contracts for this file and a map that indicates if a contract is goodForRenew. The first redundancy returned is the one that should be used by the repair code and is more accurate. The other one is the redundancy presented to users.
func (*SiaFile) RemoveLastChunk ¶
RemoveLastChunk removes the last chunk of the SiaFile and truncates the file accordingly.
func (*SiaFile) Rename ¶
Rename changes the name of the file to a new one. To guarantee that renaming the file is atomic across all operating systems, we create a wal transaction that moves over all the chunks one-by-one and deletes the src file.
func (*SiaFile) SaveHeader ¶
SaveHeader saves the file's header to disk.
func (*SiaFile) SaveMetadata ¶
SaveMetadata saves the file's metadata to disk.
func (*SiaFile) SaveWithChunks ¶
SaveWithChunks saves the file's header to disk and appends the raw chunks provided at the end of the file.
func (*SiaFile) SetAllStuck ¶
SetAllStuck sets the Stuck field of all chunks to stuck.
func (*SiaFile) SetChunkStatusCompleted ¶
SetChunkStatusCompleted sets the CombinedChunkStatus field of the metadata to completed.
func (*SiaFile) SetFileSize ¶
SetFileSize changes the fileSize of the SiaFile.
func (*SiaFile) SetLastHealthCheckTime ¶
func (sf *SiaFile) SetLastHealthCheckTime()
SetLastHealthCheckTime sets the LastHealthCheckTime in memory to the current time but does not update and write to disk.
NOTE: This call should be used in conjunction with a method that saves the SiaFile metadata
func (*SiaFile) SetLocalPath ¶
SetLocalPath changes the local path of the file which is used to repair the file from disk.
func (*SiaFile) SetPartialChunks ¶
func (sf *SiaFile) SetPartialChunks(combinedChunks []modules.PartialChunk, updates []writeaheadlog.Update) (err error)
SetPartialChunks informs the SiaFile about a partial chunk that has been saved by the partial chunk set. As such it should be exclusively called by the partial chunk set. It updates the metadata of the SiaFile and also adds a new chunk to the partial SiaFile if necessary. At the end it applies the updates of the partial chunk set, the SiaFile and the partial SiaFile atomically.
func (*SiaFile) SetPartialsSiaFile ¶
SetPartialsSiaFile sets the partialsSiaFile field of the SiaFile. This is usually done for non-partials SiaFiles after loading them from disk.
func (*SiaFile) SetSiaFilePath ¶
SetSiaFilePath sets the path of the siafile on disk.
func (*SiaFile) SiaFilePath ¶
SiaFilePath returns the siaFilePath field of the SiaFile.
func (*SiaFile) SnapshotReader ¶
func (sf *SiaFile) SnapshotReader() (*SnapshotReader, error)
SnapshotReader creates a io.ReadCloser that can be used to read the raw Siafile from disk. Note that the underlying siafile holds a readlock until the SnapshotReader is closed, which means that no operations can be called to the underlying siafile which may cause it to grab a lock, because that will cause a deadlock.
Operations which require grabbing a readlock on the underlying siafile are also not okay, because if some other thread has attempted to grab a writelock on the siafile, the readlock will block and then the Close() statement may never be reached for the SnapshotReader.
TODO: Things upstream would be a lot easier if we could drop the requirement to hold a lock for the duration of the life of the snapshot reader.
func (*SiaFile) StuckChunkByIndex ¶
StuckChunkByIndex returns if the chunk at the index is marked as Stuck or not
func (*SiaFile) UID ¶
func (sf *SiaFile) UID() SiafileUID
UID returns a unique identifier for this file.
func (*SiaFile) UnmanagedSetDeleted ¶
UnmanagedSetDeleted sets the deleted field of the SiaFile without holding the lock.
func (*SiaFile) UnmanagedSetSiaFilePath ¶
UnmanagedSetSiaFilePath sets the siaFilePath field of the SiaFile without holding the lock.
func (*SiaFile) UpdateAccessTime ¶
UpdateAccessTime updates the AccessTime timestamp to the current time.
func (*SiaFile) UpdateUniqueID ¶
func (sf *SiaFile) UpdateUniqueID()
UpdateUniqueID creates a new random uid for the SiaFile.
func (*SiaFile) UpdateUsedHosts ¶
func (sf *SiaFile) UpdateUsedHosts(used []types.SiaPublicKey) (err error)
UpdateUsedHosts updates the 'Used' flag for the entries in the pubKeyTable of the SiaFile. The keys of all used hosts should be passed to the method and the SiaFile will update the flag for hosts it knows of to 'true' and set hosts which were not passed in to 'false'.
type SiafileUID ¶
type SiafileUID string
SiafileUID is a unique identifier for siafile which is used to track siafiles even after renaming them.
type Snapshot ¶
type Snapshot struct {
// contains filtered or unexported fields
}
Snapshot is a snapshot of a SiaFile. A snapshot is a deep-copy and can be accessed without locking at the cost of being a frozen readonly representation of a siafile which only exists in memory.
func SnapshotFromReader ¶
SnapshotFromReader reads a siafile from the specified reader and creates a snapshot from it.
func (*Snapshot) ChunkIndexByOffset ¶
ChunkIndexByOffset will return the chunkIndex that contains the provided offset of a file and also the relative offset within the chunk. If the offset is out of bounds, chunkIndex will be equal to NumChunk().
func (*Snapshot) ErasureCode ¶
func (s *Snapshot) ErasureCode() modules.ErasureCoder
ErasureCode returns the erasure coder used by the file.
func (*Snapshot) IsIncludedPartialChunk ¶
func (s *Snapshot) IsIncludedPartialChunk(chunkIndex uint64) (PartialChunkInfo, bool)
IsIncludedPartialChunk returns 'true' if the provided index points to a partial chunk which has been added to the partials sia file already.
func (*Snapshot) IsIncompletePartialChunk ¶
IsIncompletePartialChunk returns 'true' if the provided index points to a partial chunk which hasn't been added to a partials siafile yet.
func (*Snapshot) NumChunks ¶
NumChunks returns the number of chunks the file consists of. This will return the number of chunks the file consists of even if the file is not fully uploaded yet.
func (*Snapshot) PartialChunks ¶
func (s *Snapshot) PartialChunks() []PartialChunkInfo
PartialChunks returns the snapshot's PartialChunks.
func (*Snapshot) Pieces ¶
Pieces returns all the pieces for a chunk in a slice of slices that contains all the pieces for a certain index.
type SnapshotReader ¶
type SnapshotReader struct {
// contains filtered or unexported fields
}
SnapshotReader is a helper type that allows reading a raw SiaFile from disk while keeping the file in memory locked.
func (*SnapshotReader) Close ¶
func (sfr *SnapshotReader) Close() error
Close closes the underlying file.