X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/fb95d0d2d09c9537f5bdc503e51cf4f091d02c46..c806ef1:/services/fuse/bin/arv-mount diff --git a/services/fuse/bin/arv-mount b/services/fuse/bin/arv-mount index f6b2992782..b874f5ff5b 100755 --- a/services/fuse/bin/arv-mount +++ b/services/fuse/bin/arv-mount @@ -1,10 +1,13 @@ #!/usr/bin/env python -from arvados_fuse import * -import arvados -import subprocess import argparse +import arvados import daemon +import os +import signal +import subprocess + +from arvados_fuse import * if __name__ == '__main__': # Handle command line parameters @@ -35,20 +38,27 @@ collections on the server.""") args = parser.parse_args() # Create the request handler - operations = Operations(os.getuid(), os.getgid()) + operations = Operations(os.getuid(), os.getgid(), args.debug) - if args.groups: - api = arvados.api('v1') - e = operations.inodes.add_entry(GroupsDirectory(llfuse.ROOT_INODE, operations.inodes, api)) - elif args.tags: + if args.debug: + arvados.config.settings()['ARVADOS_DEBUG'] = 'true' + + try: api = arvados.api('v1') - e = operations.inodes.add_entry(TagsDirectory(llfuse.ROOT_INODE, operations.inodes, api)) - elif args.collection != None: - # Set up the request handler with the collection at the root - e = operations.inodes.add_entry(CollectionDirectory(llfuse.ROOT_INODE, operations.inodes, args.collection)) - else: - # Set up the request handler with the 'magic directory' at the root - operations.inodes.add_entry(MagicDirectory(llfuse.ROOT_INODE, operations.inodes)) + + if args.groups: + e = operations.inodes.add_entry(GroupsDirectory(llfuse.ROOT_INODE, operations.inodes, api)) + elif args.tags: + e = operations.inodes.add_entry(TagsDirectory(llfuse.ROOT_INODE, operations.inodes, api)) + elif args.collection != None: + # Set up the request handler with the collection at the root + e = operations.inodes.add_entry(CollectionDirectory(llfuse.ROOT_INODE, operations.inodes, args.collection)) + else: + # Set up the request handler with the 'magic directory' at the root + operations.inodes.add_entry(MagicDirectory(llfuse.ROOT_INODE, operations.inodes)) + except Exception as ex: + print("arv-mount: %s" % ex) + exit(1) # FUSE options, see mount.fuse(8) opts = [optname for optname in ['allow_other', 'debug'] @@ -66,7 +76,20 @@ collections on the server.""") rc = 255 try: - rc = subprocess.call(args.exec_args, shell=False) + sp = subprocess.Popen(args.exec_args, shell=False) + + # forward signals to the process. + signal.signal(signal.SIGINT, lambda signum, frame: sp.send_signal(signum)) + signal.signal(signal.SIGTERM, lambda signum, frame: sp.send_signal(signum)) + signal.signal(signal.SIGQUIT, lambda signum, frame: sp.send_signal(signum)) + + # wait for process to complete. + rc = sp.wait() + + # restore default signal handlers. + signal.signal(signal.SIGINT, signal.SIG_DFL) + signal.signal(signal.SIGTERM, signal.SIG_DFL) + signal.signal(signal.SIGQUIT, signal.SIG_DFL) except OSError as e: sys.stderr.write('arv-mount: %s -- exec %s\n' % (str(e), args.exec_args)) rc = e.errno @@ -77,12 +100,9 @@ collections on the server.""") exit(rc) else: - if args.foreground: - # Initialize the fuse connection - llfuse.init(operations, args.mountpoint, opts) - llfuse.main() - else: - with daemon.DaemonContext(): - # Initialize the fuse connection - llfuse.init(operations, args.mountpoint, opts) - llfuse.main() + os.chdir(args.mountpoint) + if not args.foreground: + daemon_ctx = daemon.DaemonContext(working_directory='.') + daemon_ctx.open() + llfuse.init(operations, '.', opts) + llfuse.main()