Skip to content

Commit 92a9f7f

Browse files
committed
Merge pull request #74 from ewah/master
attr fixes; prepping crypto headers
2 parents 4ca7c9e + c3e088e commit 92a9f7f

File tree

1 file changed

+40
-38
lines changed

1 file changed

+40
-38
lines changed

yas3fs/__init__.py

Lines changed: 40 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -704,8 +704,7 @@ def __init__(self, options):
704704
self.s3_retries_sleep = options.s3_retries_sleep # retry sleep in seconds
705705
logger.info("s3-retries-sleep: '%i' seconds" % self.s3_retries_sleep)
706706

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' ]
709708

710709
self.multipart_uploads_in_progress = 0
711710

@@ -814,10 +813,16 @@ def __init__(self, options):
814813
self.requester_pays = options.requester_pays
815814
logger.info("S3 Request Payer: '%s'" % str(self.requester_pays))
816815

816+
self.default_headers = {}
817817
if self.requester_pays:
818818
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)
821826

822827
self.darwin = options.darwin # To tailor ENOATTR for OS X
823828

@@ -942,7 +947,8 @@ def __init__(self, options):
942947
if self.plugin:
943948
self.plugin.logger = logger
944949

945-
signal.signal(signal.SIGINT, self.handler)
950+
signal.signal(signal.SIGINT, self.signal_handler)
951+
signal.signal(signal.SIGHUP, self.signal_handler)
946952

947953

948954
# faking the funk, get a better wrapper model later
@@ -1050,9 +1056,16 @@ def init(self, path):
10501056
self.http_listen_thread = None
10511057
self.sns.subscribe(self.sns_topic_arn, 'http', self.http_listen_url)
10521058

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)
10561069

10571070
def flush_all_cache(self):
10581071
logger.debug("flush_all_cache")
@@ -1264,6 +1277,8 @@ def check_status(self):
12641277
logger.debug("check_status")
12651278

12661279
while self.cache_entries:
1280+
time.sleep(self.cache_check_interval)
1281+
continue
12671282

12681283
num_entries, mem_size, disk_size = self.cache.get_memory_usage()
12691284
s3q = 0 ### Remove duplicate code
@@ -1292,6 +1307,8 @@ def check_cache_size(self):
12921307
logger.debug("check_cache_size")
12931308

12941309
while self.cache_entries:
1310+
time.sleep(self.cache_check_interval)
1311+
continue
12951312

12961313
logger.debug("check_cache_size get_memory_usage")
12971314
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)
15771594
logger.debug("set_metadata '%s' '%s' S3 new key" % (path, key))
15781595
### key.set_contents_from_string('', headers={'Content-Type': 'application/x-directory'})
15791596
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)
15851598

15861599
cmds = [ [ 'set_contents_from_string', [ '' ], { 'headers': headers } ] ]
15871600
self.do_on_s3(key, pub, cmds)
@@ -1736,12 +1749,7 @@ def mkdir(self, path, mode):
17361749
###k.set_contents_from_string('', headers={'Content-Type': 'application/x-directory'})
17371750
pub = [ 'mkdir', path ]
17381751
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)
17451753
cmds = [ [ 'set_contents_from_string', [ '' ], { 'headers': headers } ] ]
17461754
self.do_on_s3(k, pub, cmds)
17471755
data.delete('change')
@@ -1791,12 +1799,7 @@ def symlink(self, path, link):
17911799
###k.set_contents_from_string(link, headers={'Content-Type': 'application/x-symlink'})
17921800
pub = [ 'symlink', path ]
17931801
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)
18001803
cmds = [ [ 'set_contents_from_string', [ link ], { 'headers': headers } ] ]
18011804
self.do_on_s3(k, pub, cmds)
18021805
data.delete('change')
@@ -2580,12 +2583,7 @@ def upload_to_s3(self, path, data):
25802583
written = False
25812584
pub = [ 'upload', path ] # Add Etag before publish
25822585
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)
25892587

25902588
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))
25912589
if self.multipart_num > 0:
@@ -2751,33 +2749,37 @@ def getxattr(self, path, name, position=0):
27512749
if self.cache.is_empty(path):
27522750
logger.debug("getxattr '%s' '%s' '%i' ENOENT" % (path, name, position))
27532751
raise FuseOSError(errno.ENOENT)
2754-
if name == 'yas3fs.bucket':
2752+
if name in ['yas3fs.bucket', 'user.yas3fs.bucket']:
27552753
return self.s3_bucket_name
2756-
elif name == 'yas3fs.key':
2754+
2755+
if name in ['yas3fs.key', 'user.yas3fs.key']:
27572756
key = self.get_key(path)
27582757
if key:
27592758
return key.key
2760-
elif name == 'yas3fs.URL':
2759+
elif name in ['yas3fs.URL', 'user.yas3fs.URL']:
27612760
key = self.get_key(path)
27622761
if key:
27632762
tmp_key = copy.copy(key)
27642763
tmp_key.metadata = {} # To remove unnecessary metadata headers
2764+
tmp_key.version_id = None
27652765
return tmp_key.generate_url(expires_in=0, headers=self.default_headers, query_auth=False)
27662766
xattr = self.get_metadata(path, 'xattr')
27672767
if xattr == None:
27682768
logger.debug("getxattr <- '%s' '%s' '%i' ENOENT" % (path, name, position))
27692769
raise FuseOSError(errno.ENOENT)
2770-
if name == 'yas3fs.signedURL':
2770+
2771+
if name in ['yas3fs.signedURL', 'user.yas3fs.signedURL']:
27712772
key = self.get_key(path)
27722773
if key:
27732774
try:
2774-
seconds = int(xattr['yas3fs.expiration'])
2775+
seconds = int(xattr['user.yas3fs.expiration'])
27752776
except KeyError:
27762777
seconds = self.default_expiration
27772778
tmp_key = copy.copy(key)
27782779
tmp_key.metadata = {} # To remove unnecessary metadata headers
2780+
tmp_key.version_id = None
27792781
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']:
27812783
key = self.get_key(path)
27822784
if key:
27832785
if name not in xattr:
@@ -2841,7 +2843,7 @@ def setxattr(self, path, name, value, options, position=0):
28412843
if self.cache.is_empty(path):
28422844
logger.debug("setxattr '%s' '%s' ENOENT" % (path, name))
28432845
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' ]:
28452847
return 0 # Do nothing
28462848
xattr = self.get_metadata(path, 'xattr')
28472849
if xattr < 0:

0 commit comments

Comments
 (0)