@@ -24,28 +24,31 @@ def _reduce_method(m):
2424
2525class S3 (Task ):
2626 def __init__ (self , manager , config , timer , base_dir , backup_dir , ** kwargs ):
27- super (Nsca , self ).__init__ (self .__class__ .__name__ , manager , config , timer , base_dir , backup_dir , ** kwargs )
27+ super (S3 , self ).__init__ (self .__class__ .__name__ , manager , config , timer , base_dir , backup_dir , ** kwargs )
2828 self .remove_uploaded = self .config .upload .remove_uploaded
29- self .s3_host = self .config .upload .s3 .host
29+ self .region = self .config .upload .s3 .region
3030 self .bucket_name = self .config .upload .s3 .bucket_name
3131 self .bucket_prefix = self .config .upload .s3 .bucket_prefix
3232 self .access_key = self .config .upload .s3 .access_key
3333 self .secret_key = self .config .upload .s3 .secret_key
3434 self .thread_count = self .config .upload .s3 .threads
3535 self .chunk_size_mb = self .config .upload .s3 .chunk_size_mb
3636 self .chunk_size = self .chunk_size_mb * 1024 * 1024
37+ self .secure = self .config .upload .s3 .secure
38+ self .retries = self .config .upload .s3 .retries
39+ self .s3_acl = self .config .upload .s3 .acl
3740
38- self .key_prefix = None
41+ self .key_prefix = base_dir
3942 if 'key_prefix' in self .args :
4043 self .key_prefix = key_prefix
4144
4245 self ._pool = None
4346 self ._multipart = None
4447 self ._upload_done = False
45- if None in (self .access_key , self .secret_key ,self .s3_host ):
46- raise "Invalid S3 security key or host detected!"
48+ if None in (self .access_key , self .secret_key , self .region ):
49+ raise "Invalid S3 security key or region detected!"
4750 try :
48- self .s3_conn = S3Session (self .access_key , self .secret_key , self .s3_host )
51+ self .s3_conn = S3Session (self .region , self . access_key , self .secret_key , self .bucket_name )
4952 self .bucket = self .s3_conn .get_bucket (self .bucket_name )
5053 except Exception , e :
5154 raise OperationError (e )
@@ -57,15 +60,18 @@ def run(self):
5760 try :
5861 self .timer .start (self .timer_name )
5962 for file_name in os .listdir (self .backup_dir ):
63+ file_path = os .path .join (self .backup_dir , file_name )
64+ # skip mongodb-consistent-backup_META dir
65+ if os .path .isdir (file_path ):
66+ continue
67+ file_size = os .stat (file_path ).st_size
68+ chunk_count = int (ceil (file_size / float (self .chunk_size )))
69+
6070 if self .bucket_prefix == "/" :
6171 key_name = "/%s/%s" % (self .key_prefix , file_name )
6272 else :
6373 key_name = "%s/%s/%s" % (self .bucket_prefix , self .key_prefix , file_name )
6474
65- file_path = os .path .join (self .backup_dir , file_name )
66- file_size = os .stat (file_path ).st_size
67- chunk_count = int (ceil (file_size / float (self .chunk_size )))
68-
6975 logging .info ("Starting multipart AWS S3 upload to key: %s%s using %i threads, %imb chunks, %i retries" % (
7076 self .bucket_name ,
7177 key_name ,
@@ -82,9 +88,9 @@ def run(self):
8288 part_num = i + 1
8389 self ._pool .apply_async (S3UploadThread (
8490 self .bucket_name ,
91+ self .region ,
8592 self .access_key ,
8693 self .secret_key ,
87- self .s3_host ,
8894 self ._multipart .id ,
8995 part_num ,
9096 file_path ,
@@ -99,7 +105,8 @@ def run(self):
99105 if len (self ._multipart .get_all_parts ()) == chunk_count :
100106 self ._multipart .complete_upload ()
101107 key = self .bucket .get_key (key_name )
102- key .set_acl (self .s3_acl )
108+ if self .s3_acl :
109+ key .set_acl (self .s3_acl )
103110 self ._upload_done = True
104111
105112 if self .remove_uploaded :
0 commit comments