mirror of
https://github.com/matrix-org/synapse-s3-storage-provider.git
synced 2024-10-23 07:29:40 +00:00
Add storage class config option
This commit is contained in:
parent
bcfc674144
commit
925d1c602b
1 changed files with 22 additions and 9 deletions
|
@ -31,6 +31,10 @@ import os
|
|||
logger = logging.getLogger("synapse.s3")
|
||||
|
||||
|
||||
# The list of valid AWS storage class names
|
||||
_VALID_STORAGE_CLASSES = ('STANDARD', 'REDUCED_REDUNDANCY', 'STANDARD_IA')
|
||||
|
||||
|
||||
class S3StorageProviderBackend(StorageProvider):
|
||||
"""
|
||||
Args:
|
||||
|
@ -40,16 +44,18 @@ class S3StorageProviderBackend(StorageProvider):
|
|||
|
||||
def __init__(self, hs, config):
|
||||
self.cache_directory = hs.config.media_store_path
|
||||
self.bucket = config
|
||||
self.bucket = config["bucket"]
|
||||
self.storage_class = config["storage_class"]
|
||||
|
||||
def store_file(self, path, file_info):
|
||||
"""See StorageProvider.store_file"""
|
||||
|
||||
def _store_file():
|
||||
with open(os.path.join(self.cache_directory, path), 'rb') as f:
|
||||
boto3.resource('s3').Bucket(self.bucket).put_object(
|
||||
Key=path, Body=f,
|
||||
)
|
||||
boto3.resource('s3').Bucket(self.bucket).upload_file(
|
||||
Filename=os.path.join(self.cache_directory, path),
|
||||
Key=path,
|
||||
ExtraArgs={"StorageClass": self.storage_class},
|
||||
)
|
||||
|
||||
return make_deferred_yieldable(
|
||||
reactor.callInThread(_store_file)
|
||||
|
@ -68,11 +74,18 @@ class S3StorageProviderBackend(StorageProvider):
|
|||
|
||||
The returned value is passed into the constructor.
|
||||
|
||||
In this case we only care about a single param, the bucket, so lets
|
||||
just pull that out.
|
||||
In this case we return a dict with fields, `bucket` and `storage_class`
|
||||
"""
|
||||
assert isinstance(config["bucket"], basestring)
|
||||
return config["bucket"]
|
||||
bucket = config["bucket"]
|
||||
storage_class = config.get("storage_class", "STANDARD")
|
||||
|
||||
assert isinstance(bucket, basestring)
|
||||
assert storage_class in _VALID_STORAGE_CLASSES
|
||||
|
||||
return {
|
||||
"bucket": bucket,
|
||||
"storage_class": storage_class,
|
||||
}
|
||||
|
||||
|
||||
class _S3DownloadThread(threading.Thread):
|
||||
|
|
Loading…
Reference in a new issue