Documentation
¶
Overview ¶
Package fs is a S3-compatible storage server implementation.
Package fs contains the go:generate directives for the repository's generated code.
Index ¶
- Variables
- type ACL
- type Bucket
- type CompleteMultipartUploadRequest
- type CompleteMultipartUploadResponse
- type CompletedPart
- type CreateMultipartUploadRequest
- type GetObjectResponse
- type MultipartUpload
- type Object
- type ObjectMetadata
- type Part
- type PutObjectRequest
- type PutObjectResponse
- type Storage
- type Tag
- type UploadPartRequest
Constants ¶
This section is empty.
Variables ¶
var ( ErrBucketNotFound = errors.New("bucket not found") ErrBucketAlreadyExists = errors.New("bucket already exists") ErrBucketNotEmpty = errors.New("bucket not empty") ErrObjectNotFound = errors.New("object not found") ErrUploadNotFound = errors.New("upload not found") ErrInvalidBucketName = errors.New("invalid bucket name") ErrUnsupportedOperation = errors.New("unsupported operation") ErrPreconditionFailed = errors.New("precondition failed") // ErrInvalidPart reports that a part referenced by CompleteMultipartUpload // was never uploaded or its ETag does not match. ErrInvalidPart = errors.New("invalid part") // ErrInvalidPartOrder reports that the CompleteMultipartUpload part list is // not in strictly ascending part-number order. ErrInvalidPartOrder = errors.New("invalid part order") // ErrInvalidPartNumber reports a part number outside the valid 1..10000 range. ErrInvalidPartNumber = errors.New("invalid part number") // ErrEntityTooSmall reports a non-last multipart part smaller than the 5 MiB // minimum. ErrEntityTooSmall = errors.New("entity too small") // ErrInvalidTag reports an object tag set violating the S3 limits // (at most 10 tags, unique keys, key ≤ 128 chars, value ≤ 256 chars). ErrInvalidTag = errors.New("invalid tag") // ErrIntegrity reports that an object's stored content does not match its // recorded checksum (bit-rot / corruption detected on read). ErrIntegrity = errors.New("object integrity check failed") )
Functions ¶
This section is empty.
Types ¶
type ACL ¶ added in v0.5.0
type ACL string
ACL is a canned S3 access-control level applied to a bucket or object. Only the canned subset is modeled — full ACL grammar (arbitrary grantees, AccessControlPolicy XML) is out of scope; the `?acl` subresource is echo-only.
func ParseACL ¶ added in v0.5.0
ParseACL normalizes a canned ACL header value, defaulting empty or unrecognized values to ACLPrivate.
func (ACL) AllowsAnonRead ¶ added in v0.5.0
AllowsAnonRead reports whether the level permits anonymous reads.
func (ACL) AllowsAnonWrite ¶ added in v0.5.0
AllowsAnonWrite reports whether the level permits anonymous writes.
type CompleteMultipartUploadRequest ¶ added in v0.0.4
type CompleteMultipartUploadRequest struct {
Bucket string
Key string
UploadID string
Parts []CompletedPart
}
CompleteMultipartUploadRequest represents a request to complete multipart upload.
type CompleteMultipartUploadResponse ¶ added in v0.0.4
type CompleteMultipartUploadResponse struct {
Location string
Bucket string
Key string
ETag string
}
CompleteMultipartUploadResponse represents the response for completing multipart upload.
type CompletedPart ¶ added in v0.0.4
CompletedPart represents a completed part for completing multipart upload.
type CreateMultipartUploadRequest ¶ added in v0.4.0
type CreateMultipartUploadRequest struct {
Bucket string
Key string
Metadata ObjectMetadata
Tags []Tag
ACL ACL
}
CreateMultipartUploadRequest represents a request to start a multipart upload. Metadata and tags are applied to the object at completion.
type GetObjectResponse ¶
type GetObjectResponse struct {
Reader io.ReadCloser
Size int64
LastModified time.Time
ETag string
Metadata ObjectMetadata
}
GetObjectResponse represents the response for GetObject operation.
type MultipartUpload ¶ added in v0.0.4
MultipartUpload represents an in-progress multipart upload.
type ObjectMetadata ¶ added in v0.4.0
type ObjectMetadata struct {
ContentType string
CacheControl string
ContentDisposition string
ContentEncoding string
// UserMetadata holds x-amz-meta-* pairs, keyed by the lowercase name
// without the prefix (e.g. "color" for x-amz-meta-color).
UserMetadata map[string]string
}
ObjectMetadata holds the user-controlled metadata stored with an object: the standard HTTP representation headers plus x-amz-meta-* pairs.
func (ObjectMetadata) IsZero ¶ added in v0.4.0
func (m ObjectMetadata) IsZero() bool
IsZero reports whether no metadata field is set.
type PutObjectRequest ¶
type PutObjectRequest struct {
Reader io.Reader
Bucket string
Key string
Size int64
Metadata ObjectMetadata
Tags []Tag
// ACL is the canned access-control level for the object (default
// ACLPrivate). Governs anonymous access only.
ACL ACL
// IfNoneMatch and IfMatch carry the raw conditional-write header values
// (e.g. "*" or a quoted ETag list). When set, the storage backend must
// evaluate them atomically with the write — see PreconditionFailed — so
// concurrent conditional PUTs resolve to a single winner. Empty means no
// condition.
IfNoneMatch string
IfMatch string
}
func (*PutObjectRequest) PreconditionFailed ¶ added in v0.4.0
func (r *PutObjectRequest) PreconditionFailed(exists bool, currentETag string) bool
PreconditionFailed reports whether the request's If-None-Match / If-Match conditions fail against the current object state, where exists reports whether the target object is present and currentETag is its ETag (quoted or bare; only meaningful when exists is true). A true result means the write must be rejected with ErrPreconditionFailed.
Storage backends MUST call this while holding the lock that serializes writes to the key, so the evaluation is atomic with the write. Evaluating the condition in a separate step before the write (check-then-act) races: several concurrent If-None-Match: * writers can all observe "absent" and all succeed.
Semantics (matching S3):
- If-None-Match: * fail if the object exists.
- If-None-Match: "<etag>" fail if it exists and the ETag matches.
- If-Match: * fail if the object does not exist.
- If-Match: "<etag>" fail if it is missing or the ETag differs.
type PutObjectResponse ¶ added in v0.4.0
type PutObjectResponse struct {
ETag string
}
PutObjectResponse reports the stored object's ETag.
type Storage ¶
type Storage interface {
ListBuckets(ctx context.Context) ([]Bucket, error)
CreateBucket(ctx context.Context, bucket string) error
DeleteBucket(ctx context.Context, bucket string) error
BucketExists(ctx context.Context, bucket string) (bool, error)
ListObjects(ctx context.Context, bucket, prefix string) ([]Object, error)
PutObject(ctx context.Context, req *PutObjectRequest) (*PutObjectResponse, error)
GetObject(ctx context.Context, bucket, key string) (*GetObjectResponse, error)
DeleteObject(ctx context.Context, bucket, key string) error
// GetObjectTagging returns the object's tag set (empty when untagged).
GetObjectTagging(ctx context.Context, bucket, key string) ([]Tag, error)
// PutObjectTagging replaces the object's tag set.
PutObjectTagging(ctx context.Context, bucket, key string, tags []Tag) error
// DeleteObjectTagging removes the object's tag set.
DeleteObjectTagging(ctx context.Context, bucket, key string) error
// SetBucketACL records the bucket's canned ACL.
SetBucketACL(ctx context.Context, bucket string, acl ACL) error
// BucketACL returns the bucket's canned ACL (ACLPrivate default);
// ErrBucketNotFound when the bucket is absent.
BucketACL(ctx context.Context, bucket string) (ACL, error)
// ObjectACL returns the object's canned ACL (ACLPrivate default);
// ErrBucketNotFound/ErrObjectNotFound when absent.
ObjectACL(ctx context.Context, bucket, key string) (ACL, error)
CreateMultipartUpload(ctx context.Context, req *CreateMultipartUploadRequest) (*MultipartUpload, error)
UploadPart(ctx context.Context, req *UploadPartRequest) (*Part, error)
// ListParts returns the parts uploaded so far for an in-progress multipart
// upload, sorted by ascending part number.
ListParts(ctx context.Context, bucket, key, uploadID string) ([]Part, error)
// ListMultipartUploads returns the in-progress multipart uploads for a
// bucket, sorted by object key (then upload ID for equal keys).
ListMultipartUploads(ctx context.Context, bucket string) ([]MultipartUpload, error)
CompleteMultipartUpload(ctx context.Context, req *CompleteMultipartUploadRequest) (*CompleteMultipartUploadResponse, error)
AbortMultipartUpload(ctx context.Context, bucket, key, uploadID string) error
}
Storage defines the interface for S3-compatible storage operations.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package auth provides credential storage and a small grant-based authorization model for the S3 server.
|
Package auth provides credential storage and a small grant-based authorization model for the S3 server. |
|
Package clusterstore is the replicating storage layer for go-faster/fs cluster mode (DESIGN.md §4, ROADMAP.md M3 Phase 7).
|
Package clusterstore is the replicating storage layer for go-faster/fs cluster mode (DESIGN.md §4, ROADMAP.md M3 Phase 7). |
|
cmd
|
|
|
fs
command
|
|
|
Package cors provides per-bucket CORS configuration for the S3 server: which cross-origin requests are allowed and what preflight responses to return.
|
Package cors provides per-bucket CORS configuration for the S3 server: which cross-origin requests are allowed and what preflight responses to return. |
|
internal
|
|
|
adminhandler
Package adminhandler implements the go-faster/fs admin API: instance info and runtime access-key management, backed by an auth.Manager.
|
Package adminhandler implements the go-faster/fs admin API: instance info and runtime access-key management, backed by an auth.Manager. |
|
cluster
Package cluster holds the shared domain types for go-faster/fs cluster mode: the failure-domain topology (rack → server → disk) that the etcd control plane publishes and the placement function consumes.
|
Package cluster holds the shared domain types for go-faster/fs cluster mode: the failure-domain topology (rack → server → disk) that the etcd control plane publishes and the placement function consumes. |
|
cluster/diskstore
Package diskstore is the filesystem-backed fragment store for go-faster/fs cluster mode: the durable transport.Store a production node serves its fragments from, one root directory per disk.
|
Package diskstore is the filesystem-backed fragment store for go-faster/fs cluster mode: the durable transport.Store a production node serves its fragments from, one root directory per disk. |
|
cluster/etcd
Package etcd is the go-faster/fs cluster control plane: the only component that talks to etcd.
|
Package etcd is the go-faster/fs cluster control plane: the only component that talks to etcd. |
|
cluster/fragment
Package fragment is the connective layer between placement and the erasure schemes: it encodes an object into the per-target fragments a scheme stores, and reconstructs the object from whatever fragments survive.
|
Package fragment is the connective layer between placement and the erasure schemes: it encodes an object into the per-target fragments a scheme stores, and reconstructs the object from whatever fragments survive. |
|
cluster/placement
Package placement is the pure, failure-domain-aware placement function for go-faster/fs cluster mode (DESIGN.md FR-16).
|
Package placement is the pure, failure-domain-aware placement function for go-faster/fs cluster mode (DESIGN.md FR-16). |
|
cluster/scheme
Package scheme models the go-faster/fs replication and erasure schemes (DESIGN.md FR-17) and implements the pure codecs they need.
|
Package scheme models the go-faster/fs replication and erasure schemes (DESIGN.md FR-17) and implements the pure codecs they need. |
|
cluster/transport
Package transport is the peer replication transport for go-faster/fs cluster mode: the internal HTTP API nodes use to store, fetch and delete object fragments on each other (the payloads produced by internal/cluster/fragment).
|
Package transport is the peer replication transport for go-faster/fs cluster mode: the internal HTTP API nodes use to store, fetch and delete object fragments on each other (the payloads produced by internal/cluster/fragment). |
|
s3err
Package s3err renders S3-compatible error responses.
|
Package s3err renders S3-compatible error responses. |
|
sigv4
Package sigv4 verifies AWS Signature Version 4 on incoming S3 requests: Authorization-header auth, presigned-URL (query) auth, and the seed signature for streaming (aws-chunked) uploads.
|
Package sigv4 verifies AWS Signature Version 4 on incoming S3 requests: Authorization-header auth, presigned-URL (query) auth, and the seed signature for streaming (aws-chunked) uploads. |
|
scripts
|
|
|
gencompat
command
Command gencompat generates docs/CONFORMANCE.md from the ceph/s3-tests allow-list, grouping the passing tests by feature area.
|
Command gencompat generates docs/CONFORMANCE.md from the ceph/s3-tests allow-list, grouping the passing tests by feature area. |
|
Package server provides an embeddable S3-compatible HTTP server.
|
Package server provides an embeddable S3-compatible HTTP server. |
|
Package storagefs implements fs.Storage.
|
Package storagefs implements fs.Storage. |
|
Package storagemem implements fs.Storage using in-memory storage.
|
Package storagemem implements fs.Storage using in-memory storage. |
|
Package storagetest provides a conformance test suite for fs.Storage implementations.
|
Package storagetest provides a conformance test suite for fs.Storage implementations. |