Documentation
¶
Index ¶
- type ComposableFS
- type CreateDirResult
- type DeleteResult
- type DeleteStorageSpaceResult
- type FS
- type MoveResult
- type OrphanChecker
- type PathWrapper
- type PrepareUploadResult
- type Registry
- type RestoreRecycleItemResult
- type RestoreRevisionResult
- type RollbackInfo
- type SetLockResult
- type TouchFileResult
- type UnlockResult
- type UnscopeFunc
- type UploadChecksums
- type UploadFinishedFunc
- type UploadInfo
- type UploadRequest
- type UploadSession
- type UploadSessionFilter
- type UploadSessionLister
- type UploadSource
- type UploadsManager
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ComposableFS ¶
type ComposableFS interface {
UseIn(composer *tusd.StoreComposer)
}
Composable is the interface that a struct needs to implement to be composable, so that it can support the TUS methods
type CreateDirResult ¶
type CreateDirResult struct {
SpaceOwner *userpb.UserId
SpaceID string
ResourceID *provider.ResourceId
}
type DeleteResult ¶
type DeleteResult struct {
// SpaceOwner is the owner of the space the deleted resource belonged to.
SpaceOwner *userpb.UserId
// ResourceId is the stable identifier of the deleted resource, used as ItemTrashed.ID in the published event.
ResourceId *provider.ResourceId
}
DeleteResult is returned by FS.Delete on success. It carries the data the storageprovider wrapper needs to publish the ItemTrashed event.
type DeleteStorageSpaceResult ¶
type DeleteStorageSpaceResult struct {
// SpaceName is the name of the space at the time of deletion.
SpaceName string
// FinalMembers is the grant map of the space at the time of deletion,
// keyed by user/group opaque id.
FinalMembers map[string]provider.ResourcePermissions
}
DeleteStorageSpaceResult is returned by FS.DeleteStorageSpace on a successful purge. It carries the data the storageprovider wrapper needs to publish the SpaceDeleted event. The SpaceDisabled flow does not consume it.
type FS ¶
type FS interface {
// Shutdown is called when the process is exiting to give the driver a chance to flush and close all open handles
Shutdown(ctx context.Context) error
// ListStorageSpaces lists the spaces in the storage.
// FIXME The unrestricted parameter is an implementation detail of decomposedfs, remove it from the function?
ListStorageSpaces(ctx context.Context, filter []*provider.ListStorageSpacesRequest_Filter, unrestricted bool) ([]*provider.StorageSpace, error)
// GetQuota returns the quota on the referenced resource
GetQuota(ctx context.Context, ref *provider.Reference) (uint64, uint64, uint64, error)
// GetMD returns the resuorce info for the referenced resource
GetMD(ctx context.Context, ref *provider.Reference, mdKeys, fieldMask []string) (*provider.ResourceInfo, error)
// ListFolder returns the resource infos for all children of the referenced resource
ListFolder(ctx context.Context, ref *provider.Reference, mdKeys, fieldMask []string) ([]*provider.ResourceInfo, error)
// Download returns a ReadCloser for the content of the referenced resource
Download(ctx context.Context, ref *provider.Reference, openReaderfunc func(*provider.ResourceInfo) bool) (*provider.ResourceInfo, io.ReadCloser, error)
// GetPathByID returns the path for the given resource id relative to the space root
// It should only reveal the path visible to the current user to not leak the names uf unshared parent resources
// FIXME should be deprecated in favor of calls to GetMD and the fieldmask 'path'
GetPathByID(ctx context.Context, id *provider.ResourceId) (string, error)
// CreateReference creates a resource of type reference
CreateReference(ctx context.Context, path string, targetURI *url.URL) error
// CreateDir creates a resource of type container
CreateDir(ctx context.Context, ref *provider.Reference) (*CreateDirResult, error)
// TouchFile sets the mtime of a resource, creating an empty file if it does not exist
// FIXME(OCISDEV-900) remove markprocessing bool: coordinator calls MarkProcessing(true) explicitly after TouchFile
// FIXME the mtime should either be a time.Time or a CS3 Timestamp, not a string
TouchFile(ctx context.Context, ref *provider.Reference, markprocessing bool, mtime string) (*TouchFileResult, error)
// Delete deletes a resource.
// If the storage driver supports a recycle bin it should move it to the recycle bin
// On success, returns a DeleteResult used by the wrapper to publish ItemTrashed.
Delete(ctx context.Context, ref *provider.Reference) (*DeleteResult, error)
// Move changes the path of a resource
Move(ctx context.Context, oldRef, newRef *provider.Reference) (*MoveResult, error)
// InitiateUpload returns a list of protocols with urls that can be used to append bytes to a new upload session
InitiateUpload(ctx context.Context, ref *provider.Reference, uploadLength int64, metadata map[string]string) (map[string]string, error)
// Upload creates or updates a resource of type file with a new revision
Upload(ctx context.Context, req UploadRequest, uploadFunc UploadFinishedFunc) (*provider.ResourceInfo, error)
// MarkProcessing toggles a processing flag on the resource.
MarkProcessing(ctx context.Context, ref *provider.Reference, processing bool, sessionID string) error
// CommitUpload writes the staged bytes from source to the resource at ref.
// Caller owns source.Body and must close it after CommitUpload returns.
CommitUpload(ctx context.Context, ref *provider.Reference, sessionID string, source UploadSource) error
// PrepareUpload is called after all bytes are received and before postprocessing begins.
// Implementations may lock the target node, snapshot the previous version, write new metadata,
// and propagate size changes. Drivers that do not require any of these steps may return immediately.
PrepareUpload(ctx context.Context, ref *provider.Reference, sessionID string, info UploadInfo) (*PrepareUploadResult, error)
// RollbackUpload reverts node state after a failed or aborted postprocessing run.
// It is the inverse of PrepareUpload: restores previous metadata and reverts the optimistic
// size propagation. The caller (coordinator) is responsible for unmarking the processing flag
// and deleting the upload session files. Drivers that performed no work in PrepareUpload may return nil.
// Callers must keep the session on a returned error: the rollback is retryable and info
// carries state the driver cannot recover once the session files are gone.
RollbackUpload(ctx context.Context, ref *provider.Reference, sessionID string, info RollbackInfo) error
// ListRevisions lists all revisions for the referenced resource
ListRevisions(ctx context.Context, ref *provider.Reference) ([]*provider.FileVersion, error)
// DownloadRevision downloads a revision
DownloadRevision(ctx context.Context, ref *provider.Reference, key string, openReaderFunc func(md *provider.ResourceInfo) bool) (*provider.ResourceInfo, io.ReadCloser, error)
// RestoreRevision restores a revision
RestoreRevision(ctx context.Context, ref *provider.Reference, key string) (*RestoreRevisionResult, error)
// ListRecycle lists the content of the recycle bin
ListRecycle(ctx context.Context, ref *provider.Reference, key, relativePath string) ([]*provider.RecycleItem, error)
// RestoreRecycleItem restores an item from the recyle bin
// if restoreRef is nil the resource should be restored at the original path
RestoreRecycleItem(ctx context.Context, ref *provider.Reference, key, relativePath string, restoreRef *provider.Reference) (*RestoreRecycleItemResult, error)
// PurgeRecycleItem removes a resource from the recycle bin
PurgeRecycleItem(ctx context.Context, ref *provider.Reference, key, relativePath string) error
// EmptyRecycle removes all resource from the recycle bin
EmptyRecycle(ctx context.Context, ref *provider.Reference) error
// AddGrant adds a grant to a resource
AddGrant(ctx context.Context, ref *provider.Reference, g *provider.Grant) error
// DenyGrant marks a resource as denied for a recipient
// The resource and its children must be completely hidden for the recipient
DenyGrant(ctx context.Context, ref *provider.Reference, g *provider.Grantee) error
// RemoveGrant removes a grant from a resource
RemoveGrant(ctx context.Context, ref *provider.Reference, g *provider.Grant) error
// UpdateGrant updates a grant on a resource
UpdateGrant(ctx context.Context, ref *provider.Reference, g *provider.Grant) error
// ListGrants lists all grants on a resource
ListGrants(ctx context.Context, ref *provider.Reference) ([]*provider.Grant, error)
// SetArbitraryMetadata sets arbitraty metadata on a resource
SetArbitraryMetadata(ctx context.Context, ref *provider.Reference, md *provider.ArbitraryMetadata) error
// UnsetArbitraryMetadata removes arbitraty metadata from a resource
UnsetArbitraryMetadata(ctx context.Context, ref *provider.Reference, keys []string) error
// GetLock returns an existing lock on the given reference
GetLock(ctx context.Context, ref *provider.Reference) (*provider.Lock, error)
// SetLock puts a lock on the given reference
SetLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) (*SetLockResult, error)
// RefreshLock refreshes an existing lock on the given reference
RefreshLock(ctx context.Context, ref *provider.Reference, lock *provider.Lock, existingLockID string) error
// Unlock removes an existing lock from the given reference
Unlock(ctx context.Context, ref *provider.Reference, lock *provider.Lock) (*UnlockResult, error)
// CreateStorageSpace creates a storage space
CreateStorageSpace(ctx context.Context, req *provider.CreateStorageSpaceRequest) (*provider.CreateStorageSpaceResponse, error)
// UpdateStorageSpace updates a storage space
UpdateStorageSpace(ctx context.Context, req *provider.UpdateStorageSpaceRequest) (*provider.UpdateStorageSpaceResponse, error)
// DeleteStorageSpace deletes a storage space.
// On a successful delete (purge), returns a DeleteStorageSpaceResult used by
// the wrapper to publish SpaceDeleted. SpaceDisabled does not need this data.
DeleteStorageSpace(ctx context.Context, req *provider.DeleteStorageSpaceRequest) (*DeleteStorageSpaceResult, error)
// CreateHome creates a users home
// Deprecated: use CreateStorageSpace with type personal
CreateHome(ctx context.Context) error
// GetHome returns the path to the users home
// Deprecated: use ListStorageSpaces with type personal
GetHome(ctx context.Context) (string, error)
}
FS is the interface to implement access to the storage.
type MoveResult ¶
type OrphanChecker ¶
type OrphanChecker interface {
// IsOrphaned reports whether the referenced resource exists but its metadata is unreadable.
IsOrphaned(ctx context.Context, ref *provider.Reference) bool
}
OrphanChecker defines the interface for FS implementations that can resolve a resource's metadata.
type PathWrapper ¶
type PathWrapper interface {
Unwrap(ctx context.Context, rp string) (string, error)
Wrap(ctx context.Context, rp string) (string, error)
}
PathWrapper is the interface to implement for path transformations
type PrepareUploadResult ¶
type Registry ¶
type Registry interface {
// GetProvider returns the Address of the storage provider that should be used for the given space.
// Use it to determine where to create a new storage space.
GetProvider(ctx context.Context, space *provider.StorageSpace) (*registry.ProviderInfo, error)
// ListProviders returns the storage providers that match the given filter
ListProviders(ctx context.Context, filters map[string]string) ([]*registry.ProviderInfo, error)
}
Registry is the interface that storage registries implement for discovering storage providers
type RestoreRevisionResult ¶
type RollbackInfo ¶
type RollbackInfo struct {
NodeExisted bool // true when the target node had a prior version; drivers with nothing to undo for new nodes may no-op
SizeDiff int64
NodeID string
ParentID string
Filename string
Size int64
}
RollbackInfo carries what a driver needs to undo PrepareUpload. NodeID and ParentID come from the upload session rather than the node, so a rollback can still release the quota of a node whose own metadata has become unreadable.
type SetLockResult ¶
type TouchFileResult ¶
type TouchFileResult struct {
SpaceOwner *userpb.UserId
SpaceID string
ResourceID *provider.ResourceId
}
type UnlockResult ¶
type UploadChecksums ¶
type UploadFinishedFunc ¶
UploadFinishedFunc is a callback function used in storage drivers to indicate that an upload has finished
type UploadInfo ¶
type UploadRequest ¶
type UploadRequest struct {
Ref *provider.Reference
Body io.ReadCloser
Length int64
}
UploadRequest us used in FS.Upload() to carry required upload metadata
type UploadSession ¶
type UploadSession interface {
// ID returns the upload id
ID() string
// Filename returns the filename of the file
Filename() string
// Size returns the size of the upload
Size() int64
// Offset returns the current offset
Offset() int64
// Reference returns a reference for the file being uploaded. May be absolute id based or relative to e.g. a space root
Reference() provider.Reference
// Executant returns the userid of the user that created the upload
Executant() userpb.UserId
// SpaceOwner returns the owner of a space if set. optional
SpaceOwner() *userpb.UserId
// Expires returns the time when the upload can no longer be used
Expires() time.Time
// IsProcessing returns true if postprocessing has not finished, yet
// The actual postprocessing state is tracked in the postprocessing service.
IsProcessing() bool
// Purge allows completely removing an upload.
Purge(ctx context.Context)
// ScanData returns the scan data for the UploadSession
ScanData() (string, time.Time)
}
UploadSession is the interface that storage drivers need to return whan listing upload sessions.
type UploadSessionFilter ¶
type UploadSessionFilter struct {
ID *string
Processing *bool
Expired *bool
HasVirus *bool
// Orphaned filters sessions by whether their target node can still be
// resolved. Evaluating it requires reading the node metadata of every
// session, so it is only evaluated when set.
Orphaned *bool
}
UploadSessionFilter can be used to filter upload sessions
type UploadSessionLister ¶
type UploadSessionLister interface {
// ListUploadSessions returns the upload sessions matching the given filter
ListUploadSessions(ctx context.Context, filter UploadSessionFilter) ([]UploadSession, error)
}
UploadSessionLister defines the interface for FS implementations that allow listing and purging upload sessions
type UploadSource ¶
type UploadSource struct {
Body io.ReadCloser
Length int64
// ScanResult is the antivirus verdict: empty means clean.
ScanResult string
// ScanDate is zero when the upload was not scanned.
ScanDate time.Time
}
UploadSource carries the staged bytes for a CommitUpload call.
type UploadsManager ¶
type UploadsManager interface {
ListUploads() ([]tusd.FileInfo, error)
PurgeExpiredUploads(chan<- tusd.FileInfo) error
}
UploadsManager defines the interface for storage drivers that allow for managing uploads Deprecated: No longer used. Storage drivers should implement the UploadSessionLister.
Directories
¶
| Path | Synopsis |
|---|---|
|
fs
|
|
|
utils
|
|
|
indexer
Package indexer provides symlink-based indexer for on-disk document-directories.
|
Package indexer provides symlink-based indexer for on-disk document-directories. |
|
templates
Package templates contains data-driven templates for path layouts.
|
Package templates contains data-driven templates for path layouts. |