@@ -704,8 +704,7 @@ def __init__(self, options):
704
704
self .s3_retries_sleep = options .s3_retries_sleep # retry sleep in seconds
705
705
logger .info ("s3-retries-sleep: '%i' seconds" % self .s3_retries_sleep )
706
706
707
- self .yas3fs_xattrs = [ 'yas3fs.bucket' , 'yas3fs.key' , 'yas3fs.URL' , 'yas3fs.signedURL' ,
708
- 'yas3fs.expiration' ]
707
+ self .yas3fs_xattrs = [ 'user.yas3fs.bucket' , 'user.yas3fs.key' , 'user.yas3fs.URL' , 'user.yas3fs.signedURL' , 'user.yas3fs.expiration' ]
709
708
710
709
self .multipart_uploads_in_progress = 0
711
710
@@ -814,10 +813,16 @@ def __init__(self, options):
814
813
self .requester_pays = options .requester_pays
815
814
logger .info ("S3 Request Payer: '%s'" % str (self .requester_pays ))
816
815
816
+ self .default_headers = {}
817
817
if self .requester_pays :
818
818
self .default_headers = { 'x-amz-request-payer' : 'requester' }
819
- else :
820
- self .default_headers = {}
819
+
820
+ crypto_headers = {}
821
+ if self .aws_managed_encryption :
822
+ crypto_headers = { 'x-amz-server-side-encryption' : 'AES256' }
823
+
824
+ self .default_write_headers = copy .copy (self .default_headers )
825
+ self .default_write_headers .update (crypto_headers )
821
826
822
827
self .darwin = options .darwin # To tailor ENOATTR for OS X
823
828
@@ -942,7 +947,8 @@ def __init__(self, options):
942
947
if self .plugin :
943
948
self .plugin .logger = logger
944
949
945
- signal .signal (signal .SIGINT , self .handler )
950
+ signal .signal (signal .SIGINT , self .signal_handler )
951
+ signal .signal (signal .SIGHUP , self .signal_handler )
946
952
947
953
948
954
# faking the funk, get a better wrapper model later
@@ -1050,9 +1056,16 @@ def init(self, path):
1050
1056
self .http_listen_thread = None
1051
1057
self .sns .subscribe (self .sns_topic_arn , 'http' , self .http_listen_url )
1052
1058
1053
- def handler (signum , frame ):
1054
- logger .info ("interrupt_handler RECEIVED SIGINT" )
1055
- self .destroy ('/' )
1059
+ def signal_handler (self , signum , frame ):
1060
+ logger .info ("signal_handler RECEIVED %s" , signum )
1061
+ if signum == signal .SIGINT :
1062
+ logger .info ("interrupt RECEIVED SIGINT %s" , signum )
1063
+ self .destroy ('/' )
1064
+
1065
+ elif signum == signal .SIGHUP :
1066
+ logger .info ("hangup RECEIVED SIGHUP %s" , signum )
1067
+
1068
+ logger .info ("signal_handler DONE %s" , signum )
1056
1069
1057
1070
def flush_all_cache (self ):
1058
1071
logger .debug ("flush_all_cache" )
@@ -1264,6 +1277,8 @@ def check_status(self):
1264
1277
logger .debug ("check_status" )
1265
1278
1266
1279
while self .cache_entries :
1280
+ time .sleep (self .cache_check_interval )
1281
+ continue
1267
1282
1268
1283
num_entries , mem_size , disk_size = self .cache .get_memory_usage ()
1269
1284
s3q = 0 ### Remove duplicate code
@@ -1292,6 +1307,8 @@ def check_cache_size(self):
1292
1307
logger .debug ("check_cache_size" )
1293
1308
1294
1309
while self .cache_entries :
1310
+ time .sleep (self .cache_check_interval )
1311
+ continue
1295
1312
1296
1313
logger .debug ("check_cache_size get_memory_usage" )
1297
1314
num_entries , mem_size , disk_size = self .cache .get_memory_usage ()
@@ -1577,11 +1594,7 @@ def set_metadata(self, path, metadata_name=None, metadata_values=None, key=None)
1577
1594
logger .debug ("set_metadata '%s' '%s' S3 new key" % (path , key ))
1578
1595
### key.set_contents_from_string('', headers={'Content-Type': 'application/x-directory'})
1579
1596
headers = { 'Content-Type' : 'application/x-directory' }
1580
- headers .update (self .default_headers )
1581
-
1582
- if self .aws_managed_encryption :
1583
- crypto_headers = { 'x-amz-server-side-encryption' : 'AES256' }
1584
- headers .update (crypto_headers )
1597
+ headers .update (self .default_write_headers )
1585
1598
1586
1599
cmds = [ [ 'set_contents_from_string' , [ '' ], { 'headers' : headers } ] ]
1587
1600
self .do_on_s3 (key , pub , cmds )
@@ -1736,12 +1749,7 @@ def mkdir(self, path, mode):
1736
1749
###k.set_contents_from_string('', headers={'Content-Type': 'application/x-directory'})
1737
1750
pub = [ 'mkdir' , path ]
1738
1751
headers = { 'Content-Type' : 'application/x-directory' }
1739
- headers .update (self .default_headers )
1740
-
1741
- if self .aws_managed_encryption :
1742
- crypto_headers = { 'x-amz-server-side-encryption' : 'AES256' }
1743
- headers .update (crypto_headers )
1744
-
1752
+ headers .update (self .default_write_headers )
1745
1753
cmds = [ [ 'set_contents_from_string' , [ '' ], { 'headers' : headers } ] ]
1746
1754
self .do_on_s3 (k , pub , cmds )
1747
1755
data .delete ('change' )
@@ -1791,12 +1799,7 @@ def symlink(self, path, link):
1791
1799
###k.set_contents_from_string(link, headers={'Content-Type': 'application/x-symlink'})
1792
1800
pub = [ 'symlink' , path ]
1793
1801
headers = { 'Content-Type' : 'application/x-symlink' }
1794
- headers .update (self .default_headers )
1795
-
1796
- if self .aws_managed_encryption :
1797
- crypto_headers = { 'x-amz-server-side-encryption' : 'AES256' }
1798
- headers .update (crypto_headers )
1799
-
1802
+ headers .update (self .default_write_headers )
1800
1803
cmds = [ [ 'set_contents_from_string' , [ link ], { 'headers' : headers } ] ]
1801
1804
self .do_on_s3 (k , pub , cmds )
1802
1805
data .delete ('change' )
@@ -2580,12 +2583,7 @@ def upload_to_s3(self, path, data):
2580
2583
written = False
2581
2584
pub = [ 'upload' , path ] # Add Etag before publish
2582
2585
headers = { 'Content-Type' : mimetype }
2583
-
2584
- if self .aws_managed_encryption :
2585
- crypto_headers = { 'x-amz-server-side-encryption' : 'AES256' }
2586
- headers .update (crypto_headers )
2587
-
2588
- headers .update (self .default_headers )
2586
+ headers .update (self .default_write_headers )
2589
2587
2590
2588
logger .debug ("multipart test: key '%s' mp-num '%s' st_size '%s' mp-size '%s'" % (path , self .multipart_num , attr ['st_size' ], self .multipart_size ))
2591
2589
if self .multipart_num > 0 :
@@ -2751,33 +2749,37 @@ def getxattr(self, path, name, position=0):
2751
2749
if self .cache .is_empty (path ):
2752
2750
logger .debug ("getxattr '%s' '%s' '%i' ENOENT" % (path , name , position ))
2753
2751
raise FuseOSError (errno .ENOENT )
2754
- if name == 'yas3fs.bucket' :
2752
+ if name in [ 'yas3fs.bucket' , 'user.yas3fs.bucket' ] :
2755
2753
return self .s3_bucket_name
2756
- elif name == 'yas3fs.key' :
2754
+
2755
+ if name in ['yas3fs.key' , 'user.yas3fs.key' ]:
2757
2756
key = self .get_key (path )
2758
2757
if key :
2759
2758
return key .key
2760
- elif name == 'yas3fs.URL' :
2759
+ elif name in [ 'yas3fs.URL' , 'user.yas3fs.URL' ] :
2761
2760
key = self .get_key (path )
2762
2761
if key :
2763
2762
tmp_key = copy .copy (key )
2764
2763
tmp_key .metadata = {} # To remove unnecessary metadata headers
2764
+ tmp_key .version_id = None
2765
2765
return tmp_key .generate_url (expires_in = 0 , headers = self .default_headers , query_auth = False )
2766
2766
xattr = self .get_metadata (path , 'xattr' )
2767
2767
if xattr == None :
2768
2768
logger .debug ("getxattr <- '%s' '%s' '%i' ENOENT" % (path , name , position ))
2769
2769
raise FuseOSError (errno .ENOENT )
2770
- if name == 'yas3fs.signedURL' :
2770
+
2771
+ if name in ['yas3fs.signedURL' , 'user.yas3fs.signedURL' ]:
2771
2772
key = self .get_key (path )
2772
2773
if key :
2773
2774
try :
2774
- seconds = int (xattr ['yas3fs.expiration' ])
2775
+ seconds = int (xattr ['user. yas3fs.expiration' ])
2775
2776
except KeyError :
2776
2777
seconds = self .default_expiration
2777
2778
tmp_key = copy .copy (key )
2778
2779
tmp_key .metadata = {} # To remove unnecessary metadata headers
2780
+ tmp_key .version_id = None
2779
2781
return tmp_key .generate_url (expires_in = seconds , headers = self .default_headers )
2780
- elif name == 'yas3fs.expiration' :
2782
+ elif name in [ 'yas3fs.expiration' , 'user.yas3fs.expiration' ] :
2781
2783
key = self .get_key (path )
2782
2784
if key :
2783
2785
if name not in xattr :
@@ -2841,7 +2843,7 @@ def setxattr(self, path, name, value, options, position=0):
2841
2843
if self .cache .is_empty (path ):
2842
2844
logger .debug ("setxattr '%s' '%s' ENOENT" % (path , name ))
2843
2845
raise FuseOSError (errno .ENOENT )
2844
- if name in [ 'yas3fs.bucket' , 'yas3fs.key' , 'yas3fs.signedURL30d ' ]:
2846
+ if name in [ 'user. yas3fs.bucket' , 'user. yas3fs.key' , 'user. yas3fs.URL' , 'user.yas3fs.signedURL ' ]:
2845
2847
return 0 # Do nothing
2846
2848
xattr = self .get_metadata (path , 'xattr' )
2847
2849
if xattr < 0 :
0 commit comments