Documentation ¶
Index ¶
Constants ¶
const MaxPartSize = 1024 * 1024 * 1024
MaxPartSize is the maximum size for each part.
The MaxPartSize reduces bandwidth usage during retires on network errors when transferring multi-TB files.
Variables ¶
var ( // DeleteAllObjectVersions is a flag for whether to prune previous object versions when deleting an object. DeleteAllObjectVersions = flag.Bool("deleteAllObjectVersions", false, "Whether to prune previous object versions when deleting an object. "+ "By default, when object storage has versioning enabled deleting the file removes only current version. "+ "This option forces removal of all previous versions. "+ "See: https://docs.victoriametrics.com/vmbackup/#permanent-deletion-of-objects-in-s3-compatible-storages") )
Functions ¶
func ToCanonicalPath ¶
ToCanonicalPath returns canonical path by replacing local directory separators with `/`.
Types ¶
type OriginFS ¶
type OriginFS interface { // MustStop must be called when the RemoteFS is no longer needed. MustStop() // String must return human-readable representation of OriginFS. String() string // ListParts must return all the parts for the OriginFS. ListParts() ([]Part, error) }
OriginFS is an interface for remote origin filesystem.
This filesystem is used for performing server-side file copies instead of uploading data from local filesystem.
type Part ¶
type Part struct { // Path is the path to file for backup. // // Path must consistently use `/` as directory separator. // Use ToCanonicalPath() function for converting local directory separators to `/`. Path string // FileSize is the size of the whole file for the given part. FileSize uint64 // Offset is offset in the file to backup. Offset uint64 // Size is the size of the part to backup starting from Offset. Size uint64 // ActualSize is the actual size of the part. // // The part is considered broken if it isn't equal to Size. // Such a part must be removed from remote storage. ActualSize uint64 }
Part is an atomic unit for transfer during backup / restore.
Each source file can be split into parts with up to MaxPartSize sizes.
func PartsIntersect ¶
PartsIntersect returns the intersection of a and b
func (*Part) ParseFromRemotePath ¶
ParseFromRemotePath parses p from remotePath.
Returns true on success.
remotePath must be in canonical form received from ToCanonicalPath().
func (*Part) RemotePath ¶
RemotePath returns remote path for the part p and the given prefix.
type RemoteFS ¶
type RemoteFS interface { // MustStop must be called when the RemoteFS is no longer needed. MustStop() // String must return human-readable representation of RemoteFS. String() string // ListParts must return all the parts for the RemoteFS. ListParts() ([]Part, error) // DeletePart must delete part p from RemoteFS. DeletePart(p Part) error // RemoveEmptyDirs must recursively remove empty directories in RemoteFS. RemoveEmptyDirs() error // CopyPart must copy part p from dstFS to RemoteFS. CopyPart(dstFS OriginFS, p Part) error // DownloadPart must download part p from RemoteFS to w. DownloadPart(p Part, w io.Writer) error // UploadPart must upload part p from r to RemoteFS. UploadPart(p Part, r io.Reader) error // DeleteFile deletes filePath at RemoteFS. // // filePath must use / as directory delimiters. DeleteFile(filePath string) error // CreateFile creates filePath at RemoteFS and puts data into it. // // filePath must use / as directory delimiters. CreateFile(filePath string, data []byte) error // HasFile returns true if filePath exists at RemoteFS. // // filePath must use / as directory delimiters. HasFile(filePath string) (bool, error) // ReadFile returns file contents at the given filePath. // // filePath must use / as directory delimiters. ReadFile(filePath string) ([]byte, error) }
RemoteFS is a filesystem where backups are stored.