Skip to content

Commit 7edb94e

Browse files
jessewilestimvaillancourt
authored andcommitted
Explicit S3 key (#224)
* Add logic for using explicit S3 key
1 parent 05343da commit 7edb94e

File tree

2 files changed

+22
-16
lines changed

2 files changed

+22
-16
lines changed

mongodb_consistent_backup/Upload/S3/S3.py

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,20 @@ def _reduce_method(m):
2828
class S3(Task):
2929
def __init__(self, manager, config, timer, base_dir, backup_dir, **kwargs):
3030
super(S3, self).__init__(self.__class__.__name__, manager, config, timer, base_dir, backup_dir, **kwargs)
31-
self.remove_uploaded = self.config.upload.remove_uploaded
32-
self.retries = self.config.upload.retries
33-
self.thread_count = self.config.upload.threads
34-
self.region = self.config.upload.s3.region
35-
self.bucket_name = self.config.upload.s3.bucket_name
36-
self.bucket_prefix = self.config.upload.s3.bucket_prefix
37-
self.access_key = self.config.upload.s3.access_key
38-
self.secret_key = self.config.upload.s3.secret_key
39-
self.chunk_size_mb = self.config.upload.s3.chunk_size_mb
40-
self.chunk_size = self.chunk_size_mb * 1024 * 1024
41-
self.secure = self.config.upload.s3.secure
42-
self.s3_acl = self.config.upload.s3.acl
43-
self.key_prefix = base_dir
31+
self.remove_uploaded = self.config.upload.remove_uploaded
32+
self.retries = self.config.upload.retries
33+
self.thread_count = self.config.upload.threads
34+
self.region = self.config.upload.s3.region
35+
self.bucket_name = self.config.upload.s3.bucket_name
36+
self.bucket_prefix = self.config.upload.s3.bucket_prefix
37+
self.bucket_explicit_key = self.config.upload.s3.bucket_explicit_key
38+
self.access_key = self.config.upload.s3.access_key
39+
self.secret_key = self.config.upload.s3.secret_key
40+
self.chunk_size_mb = self.config.upload.s3.chunk_size_mb
41+
self.chunk_size = self.chunk_size_mb * 1024 * 1024
42+
self.secure = self.config.upload.s3.secure
43+
self.s3_acl = self.config.upload.s3.acl
44+
self.key_prefix = base_dir
4445

4546
self._pool = None
4647
self._multipart = None
@@ -67,10 +68,13 @@ def run(self):
6768
file_size = os.stat(file_path).st_size
6869
chunk_count = int(ceil(file_size / float(self.chunk_size)))
6970

70-
if self.bucket_prefix == "/":
71-
key_name = "/%s/%s" % (self.key_prefix, file_name)
71+
if self.bucket_explicit_key:
72+
key_name = self.bucket_explicit_key
7273
else:
73-
key_name = "%s/%s/%s" % (self.bucket_prefix, self.key_prefix, file_name)
74+
if self.bucket_prefix == "/":
75+
key_name = "/%s/%s" % (self.key_prefix, file_name)
76+
else:
77+
key_name = "%s/%s/%s" % (self.bucket_prefix, self.key_prefix, file_name)
7478

7579
logging.info("Starting multipart AWS S3 upload to key: %s%s using %i threads, %imb chunks, %i retries" % (
7680
self.bucket_name,

mongodb_consistent_backup/Upload/S3/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ def config(parser):
1212
help="S3 Uploader destination bucket name")
1313
parser.add_argument("--upload.s3.bucket_prefix", dest="upload.s3.bucket_prefix", type=str,
1414
help="S3 Uploader destination bucket path prefix")
15+
parser.add_argument("--upload.s3.bucket_explicit_key", dest="upload.s3.bucket_explicit_key", type=str,
16+
help="S3 Uploader explicit storage key within the S3 bucket")
1517
parser.add_argument("--upload.s3.chunk_size_mb", dest="upload.s3.chunk_size_mb", default=50, type=int,
1618
help="S3 Uploader upload chunk size, in megabytes (default: 50)")
1719
parser.add_argument("--upload.s3.secure", dest="upload.s3.secure", default=True, action="store_false",

0 commit comments

Comments
 (0)