Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def blocking_umount(mountpoint):
'''Invoke fusermount and wait for daemon to terminate.'''
with open('/dev/null', 'wb') as devnull:
if subprocess.call(['fuser', '-m', mountpoint], stdout=devnull,
stderr=devnull) == 0:
raise MountInUseError(mountpoint)
ctrlfile = os.path.join(mountpoint, CTRL_NAME)
log.debug('Flushing cache...')
pyfuse3.setxattr(ctrlfile, 's3ql_flushcache!', b'dummy')
# Get pid
log.debug('Trying to get pid')
pid = parse_literal(pyfuse3.getxattr(ctrlfile, 's3ql_pid?'), int)
log.debug('PID is %d', pid)
# Get command line to make race conditions less-likely
cmdline = get_cmdline(pid)
# Unmount
log.debug('Unmounting...')
if os.getuid() == 0 or platform.system() == 'Darwin':
# MacOS X always uses umount rather than fusermount
umount_cmd = ['umount', mountpoint]
else:
umount_cmd = ['fusermount', '-u', mountpoint]
if subprocess.call(umount_cmd) != 0:
raise UmountSubError(mountpoint)
args = sys.argv[1:]
options = parse_args(args)
setup_logging(options)
if options.raw:
pprint = lambda x: '%d bytes' % x
else:
pprint = pretty_print_size
ctrlfile = assert_fs_owner(options.mountpoint, mountpoint=True)
# Use a decent sized buffer, otherwise the statistics have to be
# calculated three(!) times because we need to invoke getxattr
# three times.
buf = pyfuse3.getxattr(ctrlfile, 's3qlstat', size_guess=256)
(entries, blocks, inodes, fs_size, dedup_size,
compr_size, db_size, cache_cnt, cache_size, dirty_cnt,
dirty_size, removal_cnt) = struct.unpack('QQQQQQQQQQQQ', buf)
p_dedup = dedup_size * 100 / fs_size if fs_size else 0
p_compr_1 = compr_size * 100 / fs_size if fs_size else 0
p_compr_2 = compr_size * 100 / dedup_size if dedup_size else 0
print ('Directory entries: %d' % entries,
'Inodes: %d' % inodes,
'Data blocks: %d' % blocks,
'Total data size: %s' % pprint(fs_size),
'After de-duplication: %s (%.2f%% of total)'
% (pprint(dedup_size), p_dedup),
'After compression: %s (%.2f%% of total, %.2f%% of de-duplicated)'
% (pprint(compr_size), p_compr_1, p_compr_2),
'Database size: %s (uncompressed)' % pprint(db_size),