2020-10-28 18:59:02 +01:00
|
|
|
package store
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/lbryio/lbry.go/v2/stream"
|
|
|
|
)
|
|
|
|
|
|
|
|
// CloudFrontRWStore combines a Cloudfront and an S3 store. Reads go to Cloudfront, writes go to S3.
|
|
|
|
type CloudFrontRWStore struct {
|
|
|
|
cf *CloudFrontROStore
|
|
|
|
s3 *S3Store
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewCloudFrontRWStore returns an initialized CloudFrontRWStore store pointer.
|
|
|
|
// NOTE: It panics if either argument is nil.
|
|
|
|
func NewCloudFrontRWStore(cf *CloudFrontROStore, s3 *S3Store) *CloudFrontRWStore {
|
|
|
|
if cf == nil || s3 == nil {
|
|
|
|
panic("both stores must be set")
|
|
|
|
}
|
|
|
|
return &CloudFrontRWStore{cf: cf, s3: s3}
|
|
|
|
}
|
|
|
|
|
|
|
|
const nameCloudFrontRW = "cloudfront_rw"
|
|
|
|
|
|
|
|
// Name is the cache type name
|
|
|
|
func (c *CloudFrontRWStore) Name() string { return nameCloudFrontRW }
|
|
|
|
|
|
|
|
// Has checks if the hash is in the store.
|
|
|
|
func (c *CloudFrontRWStore) Has(hash string) (bool, error) {
|
|
|
|
return c.cf.Has(hash)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Get gets the blob from Cloudfront.
|
|
|
|
func (c *CloudFrontRWStore) Get(hash string) (stream.Blob, error) {
|
|
|
|
return c.cf.Get(hash)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Put stores the blob on S3
|
|
|
|
func (c *CloudFrontRWStore) Put(hash string, blob stream.Blob) error {
|
|
|
|
return c.s3.Put(hash, blob)
|
|
|
|
}
|
|
|
|
|
|
|
|
// PutSD stores the sd blob on S3
|
|
|
|
func (c *CloudFrontRWStore) PutSD(hash string, blob stream.Blob) error {
|
|
|
|
return c.s3.PutSD(hash, blob)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Delete deletes the blob from S3
|
|
|
|
func (c *CloudFrontRWStore) Delete(hash string) error {
|
|
|
|
return c.s3.Delete(hash)
|
|
|
|
}
|
2020-12-23 06:04:42 +01:00
|
|
|
|
|
|
|
// Shutdown shuts down the store gracefully
|
|
|
|
func (c *CloudFrontRWStore) Shutdown() {
|
|
|
|
c.s3.Shutdown()
|
|
|
|
c.cf.Shutdown()
|
|
|
|
return
|
|
|
|
}
|