Merge branch '10722-cwl-subworkflow' closes #10722
authorPeter Amstutz <peter.amstutz@curoverse.com>
Fri, 30 Dec 2016 19:12:16 +0000 (14:12 -0500)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Fri, 30 Dec 2016 19:12:16 +0000 (14:12 -0500)
22 files changed:
backports/deb-fuse/fpm-info.sh [new file with mode: 0644]
backports/deb-libfuse-dev/fpm-info.sh [new file with mode: 0644]
backports/python-llfuse/fpm-info.sh
backports/rpm-fuse-devel/fpm-info.sh [new file with mode: 0644]
backports/rpm-fuse/fpm-info.sh [new file with mode: 0644]
build/package-build-dockerfiles/Makefile
build/package-build-dockerfiles/debian7/Dockerfile [deleted file]
build/package-test-dockerfiles/centos6/Dockerfile
build/package-test-dockerfiles/centos7/Dockerfile
build/package-test-dockerfiles/debian7/Dockerfile [deleted file]
build/package-test-dockerfiles/debian8/Dockerfile
build/package-test-dockerfiles/ubuntu1204/Dockerfile
build/package-test-dockerfiles/ubuntu1404/Dockerfile
build/run-build-packages-one-target.sh
build/run-build-packages-sso.sh
build/run-build-packages.sh
build/run-build-test-packages-one-target.sh
build/run-library.sh
build/run-tests.sh
services/fuse/arvados_fuse/__init__.py
services/fuse/setup.py
services/fuse/tests/test_mount.py

diff --git a/backports/deb-fuse/fpm-info.sh b/backports/deb-fuse/fpm-info.sh
new file mode 100644 (file)
index 0000000..6f2b022
--- /dev/null
@@ -0,0 +1,5 @@
+case "$TARGET" in
+    ubuntu1204)
+        fpm_depends+=('libfuse2 = 2.9.2-5')
+        ;;
+esac
diff --git a/backports/deb-libfuse-dev/fpm-info.sh b/backports/deb-libfuse-dev/fpm-info.sh
new file mode 100644 (file)
index 0000000..6f2b022
--- /dev/null
@@ -0,0 +1,5 @@
+case "$TARGET" in
+    ubuntu1204)
+        fpm_depends+=('libfuse2 = 2.9.2-5')
+        ;;
+esac
index 9fc00987e6f9561f37528368264adf15718b3afd..401a8367a7bf2c2a6bc9aeed1fa0b0cd156c6efe 100644 (file)
@@ -1,11 +1,19 @@
 case "$TARGET" in
+    centos6)
+        build_depends+=('fuse-libs' 'fuse-devel')
+        fpm_depends+=(glibc 'fuse-libs = 2.9.2-5' 'fuse = 2.9.2-5')
+        ;;
     centos*)
         build_depends+=('fuse-devel')
         fpm_depends+=(glibc fuse-libs)
         ;;
+    ubuntu1204)
+        build_depends+=(libfuse2 libfuse-dev)
+        fpm_depends+=(libc6 python-contextlib2 'libfuse2 = 2.9.2-5' 'fuse = 2.9.2-5')
+        ;;
     debian* | ubuntu*)
         build_depends+=('libfuse-dev')
-        fpm_depends+=(libc6 libfuse2)
+        fpm_depends+=(libc6 'libfuse2 > 2.9.0' 'fuse > 2.9.0')
         ;;
 esac
 
diff --git a/backports/rpm-fuse-devel/fpm-info.sh b/backports/rpm-fuse-devel/fpm-info.sh
new file mode 100644 (file)
index 0000000..89cdebe
--- /dev/null
@@ -0,0 +1,5 @@
+case "$TARGET" in
+    centos6)
+        fpm_depends+=('fuse-libs = 2.9.2-5')
+        ;;
+esac
diff --git a/backports/rpm-fuse/fpm-info.sh b/backports/rpm-fuse/fpm-info.sh
new file mode 100644 (file)
index 0000000..89cdebe
--- /dev/null
@@ -0,0 +1,5 @@
+case "$TARGET" in
+    centos6)
+        fpm_depends+=('fuse-libs = 2.9.2-5')
+        ;;
+esac
index 18694ed1844af6cb2fa87dd5f12b863df6402e7c..624d5f242d942846299348705f5442513e878e16 100644 (file)
@@ -1,4 +1,4 @@
-all: centos6/generated centos7/generated debian7/generated debian8/generated ubuntu1204/generated ubuntu1404/generated
+all: centos6/generated centos7/generated debian8/generated ubuntu1204/generated ubuntu1404/generated
 
 centos6/generated: common-generated-all
        test -d centos6/generated || mkdir centos6/generated
@@ -8,10 +8,6 @@ centos7/generated: common-generated-all
        test -d centos7/generated || mkdir centos7/generated
        cp -rlt centos7/generated common-generated/*
 
-debian7/generated: common-generated-all
-       test -d debian7/generated || mkdir debian7/generated
-       cp -rlt debian7/generated common-generated/*
-
 debian8/generated: common-generated-all
        test -d debian8/generated || mkdir debian8/generated
        cp -rlt debian8/generated common-generated/*
diff --git a/build/package-build-dockerfiles/debian7/Dockerfile b/build/package-build-dockerfiles/debian7/Dockerfile
deleted file mode 100644 (file)
index 7632c94..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-FROM debian:wheezy
-MAINTAINER Ward Vandewege <ward@curoverse.com>
-
-# Install dependencies and set up system.
-RUN /usr/bin/apt-get update && /usr/bin/apt-get install -q -y python2.7-dev python3 python-setuptools python3-setuptools libcurl4-gnutls-dev curl git procps libattr1-dev libfuse-dev libpq-dev python-pip unzip
-
-# Install RVM
-RUN gpg --keyserver pool.sks-keyservers.net --recv-keys D39DC0E3 && \
-    curl -L https://get.rvm.io | bash -s stable && \
-    /usr/local/rvm/bin/rvm install 2.1 && \
-    /usr/local/rvm/bin/rvm alias create default ruby-2.1 && \
-    /usr/local/rvm/bin/rvm-exec default gem install bundler && \
-    /usr/local/rvm/bin/rvm-exec default gem install cure-fpm --version 1.6.0b
-
-# Install golang binary
-ADD generated/go1.7.1.linux-amd64.tar.gz /usr/local/
-RUN ln -s /usr/local/go/bin/go /usr/local/bin/
-
-ENV WORKSPACE /arvados
-CMD ["/usr/local/rvm/bin/rvm-exec", "default", "bash", "/jenkins/run-build-packages.sh", "--target", "debian7"]
index d38507a2416bbfb38cdb735339b7d5c9a297bcd3..46229cf60f3eac9a7cc4dd9f43f2120399711d1a 100644 (file)
@@ -8,8 +8,8 @@ RUN yum -q install --assumeyes scl-utils centos-release-scl \
 RUN touch /var/lib/rpm/* && \
     gpg --keyserver pool.sks-keyservers.net --recv-keys D39DC0E3 && \
     curl -L https://get.rvm.io | bash -s stable && \
-    /usr/local/rvm/bin/rvm install 2.1 && \
-    /usr/local/rvm/bin/rvm alias create default ruby-2.1 && \
+    /usr/local/rvm/bin/rvm install 2.3 && \
+    /usr/local/rvm/bin/rvm alias create default ruby-2.3 && \
     /usr/local/rvm/bin/rvm-exec default gem install bundle && \
     /usr/local/rvm/bin/rvm-exec default gem install cure-fpm --version 1.6.0b
 
index 6bc40bffa56fac9bdffe85ccce65416ae016aaac..06a39ca397979e022028e727ba563253bbaa777d 100644 (file)
@@ -7,8 +7,8 @@ RUN yum -q -y install scl-utils centos-release-scl which tar
 RUN touch /var/lib/rpm/* && \
     gpg --keyserver pool.sks-keyservers.net --recv-keys D39DC0E3 && \
     curl -L https://get.rvm.io | bash -s stable && \
-    /usr/local/rvm/bin/rvm install 2.1 && \
-    /usr/local/rvm/bin/rvm alias create default ruby-2.1 && \
+    /usr/local/rvm/bin/rvm install 2.3 && \
+    /usr/local/rvm/bin/rvm alias create default ruby-2.3 && \
     /usr/local/rvm/bin/rvm-exec default gem install bundle && \
     /usr/local/rvm/bin/rvm-exec default gem install cure-fpm --version 1.6.0b
 
diff --git a/build/package-test-dockerfiles/debian7/Dockerfile b/build/package-test-dockerfiles/debian7/Dockerfile
deleted file mode 100644 (file)
index c9a2fdc..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-FROM debian:7
-MAINTAINER Peter Amstutz <peter.amstutz@curoverse.com>
-
-# Install RVM
-RUN apt-get update && apt-get -y install curl procps && \
-    gpg --keyserver pool.sks-keyservers.net --recv-keys D39DC0E3 && \
-    curl -L https://get.rvm.io | bash -s stable && \
-    /usr/local/rvm/bin/rvm install 2.1 && \
-    /usr/local/rvm/bin/rvm alias create default ruby-2.1
-
-# udev daemon can't start in a container, so don't try.
-RUN mkdir -p /etc/udev/disabled
-
-RUN echo "deb file:///arvados/packages/debian7/ /" >>/etc/apt/sources.list
index cde18472333cdc59e9421a24fecc5f10d1611d38..c6bc8f4f98c0cd8ea9a102b358a8d2da57329e47 100644 (file)
@@ -2,11 +2,12 @@ FROM debian:8
 MAINTAINER Peter Amstutz <peter.amstutz@curoverse.com>
 
 # Install RVM
-RUN apt-get update && apt-get -y install curl && \
+RUN apt-get update && \
+    DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends curl ca-certificates && \
     gpg --keyserver pool.sks-keyservers.net --recv-keys D39DC0E3 && \
     curl -L https://get.rvm.io | bash -s stable && \
-    /usr/local/rvm/bin/rvm install 2.1 && \
-    /usr/local/rvm/bin/rvm alias create default ruby-2.1
+    /usr/local/rvm/bin/rvm install 2.3 && \
+    /usr/local/rvm/bin/rvm alias create default ruby-2.3
 
 # udev daemon can't start in a container, so don't try.
 RUN mkdir -p /etc/udev/disabled
index 0cb77c8f8a92a2bbc18bd9005b7a4246d66b48a4..f6223715e1e43793fd71906856fc02aa1f661533 100644 (file)
@@ -2,13 +2,14 @@ FROM ubuntu:precise
 MAINTAINER Peter Amstutz <peter.amstutz@curoverse.com>
 
 # Install RVM
-RUN apt-get update && apt-get -y install curl && \
+RUN apt-get update && \
+    DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends curl ca-certificates && \
     gpg --keyserver pool.sks-keyservers.net --recv-keys D39DC0E3 && \
     curl -L https://get.rvm.io | bash -s stable && \
-    /usr/local/rvm/bin/rvm install 2.1 && \
-    /usr/local/rvm/bin/rvm alias create default ruby-2.1
+    /usr/local/rvm/bin/rvm install 2.3 && \
+    /usr/local/rvm/bin/rvm alias create default ruby-2.3
 
 # udev daemon can't start in a container, so don't try.
 RUN mkdir -p /etc/udev/disabled
 
-RUN echo "deb file:///arvados/packages/ubuntu1204/ /" >>/etc/apt/sources.list
\ No newline at end of file
+RUN echo "deb file:///arvados/packages/ubuntu1204/ /" >>/etc/apt/sources.list
index 6c4d0e9b51f3c3a7f6acd27e4eec0f7c7cf413ad..f7ee48644df5ecd8afb57c85f0cd3e47ee49386b 100644 (file)
@@ -2,13 +2,14 @@ FROM ubuntu:trusty
 MAINTAINER Peter Amstutz <peter.amstutz@curoverse.com>
 
 # Install RVM
-RUN apt-get update && apt-get -y install curl && \
+RUN apt-get update && \
+    DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends curl ca-certificates && \
     gpg --keyserver pool.sks-keyservers.net --recv-keys D39DC0E3 && \
     curl -L https://get.rvm.io | bash -s stable && \
-    /usr/local/rvm/bin/rvm install 2.1 && \
-    /usr/local/rvm/bin/rvm alias create default ruby-2.1
+    /usr/local/rvm/bin/rvm install 2.3 && \
+    /usr/local/rvm/bin/rvm alias create default ruby-2.3
 
 # udev daemon can't start in a container, so don't try.
 RUN mkdir -p /etc/udev/disabled
 
-RUN echo "deb file:///arvados/packages/ubuntu1404/ /" >>/etc/apt/sources.list
\ No newline at end of file
+RUN echo "deb file:///arvados/packages/ubuntu1404/ /" >>/etc/apt/sources.list
index 16c7129d9b8efc0747da64f394366680f1ce4fc6..958067c91c67a84398889459aa41a2313d22793d 100755 (executable)
@@ -7,7 +7,7 @@ Syntax:
         WORKSPACE=/path/to/arvados $(basename $0) [options]
 
 --target <target>
-    Distribution to build packages for (default: debian7)
+    Distribution to build packages for (default: debian8)
 --command
     Build command to execute (default: use built-in Docker image command)
 --test-packages
@@ -48,7 +48,7 @@ if [ $? -ne 0 ]; then
     exit 1
 fi
 
-TARGET=debian7
+TARGET=debian8
 COMMAND=
 DEBUG=
 
@@ -174,6 +174,9 @@ docker_volume_args=(
 
 if [[ -n "$test_packages" ]]; then
     for p in $packages ; do
+        if [[ -n "$ONLY_BUILD" ]] && [[ "$p" != "$ONLY_BUILD" ]]; then
+            continue
+        fi
         echo
         echo "START: $p test on $IMAGE" >&2
         if docker run --rm \
index b5dcdfce53b9e41518fe18d981af80815c47cde5..c8b25293e54eb0471e4c52a3ae857e842a479d2b 100755 (executable)
@@ -14,7 +14,7 @@ Options:
 --debug
     Output debug information (default: false)
 --target
-    Distribution to build packages for (default: debian7)
+    Distribution to build packages for (default: debian8)
 
 WORKSPACE=path         Path to the Arvados SSO source tree to build packages from
 
@@ -22,7 +22,7 @@ EOF
 
 EXITCODE=0
 DEBUG=${ARVADOS_DEBUG:-0}
-TARGET=debian7
+TARGET=debian8
 
 PARSEDOPTS=$(getopt --name "$0" --longoptions \
     help,build-bundle-packages,debug,target: \
@@ -68,9 +68,6 @@ if [[ "$DEBUG" != 0 ]]; then
 fi
 
 case "$TARGET" in
-    debian7)
-        FORMAT=deb
-        ;;
     debian8)
         FORMAT=deb
         ;;
index 08b7e213684f51f525c19db265e55116c01654e9..cfdc3daf98fa3d18c25076cc671e1ac50272bb91 100755 (executable)
@@ -16,7 +16,7 @@ Options:
 --debug
     Output debug information (default: false)
 --target <target>
-    Distribution to build packages for (default: debian7)
+    Distribution to build packages for (default: debian8)
 --only-build <package>
     Build only a specific package (or $ONLY_BUILD from environment)
 --command
@@ -29,7 +29,7 @@ EOF
 
 EXITCODE=0
 DEBUG=${ARVADOS_DEBUG:-0}
-TARGET=debian7
+TARGET=debian8
 COMMAND=
 
 PARSEDOPTS=$(getopt --name "$0" --longoptions \
@@ -101,23 +101,12 @@ PYTHON3_INSTALL_LIB=lib/python$PYTHON3_VERSION/dist-packages
 ## End Debian Python defaults.
 
 case "$TARGET" in
-    debian7)
-        FORMAT=deb
-        PYTHON_BACKPORTS=(python-gflags==2.0 google-api-python-client==1.4.2 \
-            oauth2client==1.5.2 pyasn1==0.1.7 pyasn1-modules==0.0.5 \
-            rsa uritemplate httplib2 ws4py pykka six  \
-            ciso8601 pycrypto backports.ssl_match_hostname llfuse==0.41.1 \
-            'pycurl<7.21.5' contextlib2 pyyaml 'rdflib>=4.2.0' \
-            shellescape mistune typing avro ruamel.ordereddict
-            cachecontrol requests 'pathlib2>=2.1.0')
-        PYTHON3_BACKPORTS=(docker-py==1.7.2 six requests websocket-client==0.37.0)
-        ;;
     debian8)
         FORMAT=deb
         PYTHON_BACKPORTS=(python-gflags==2.0 google-api-python-client==1.4.2 \
             oauth2client==1.5.2 pyasn1==0.1.7 pyasn1-modules==0.0.5 \
-            rsa uritemplate httplib2 ws4py pykka six  \
-            ciso8601 pycrypto backports.ssl_match_hostname llfuse==0.41.1 \
+            rsa uritemplate httplib2 ws4py pykka six \
+            ciso8601 pycrypto backports.ssl_match_hostname 'llfuse>=1.0' \
             'pycurl<7.21.5' pyyaml 'rdflib>=4.2.0' \
             shellescape mistune typing avro ruamel.ordereddict
             cachecontrol 'pathlib2>=2.1.0')
@@ -127,8 +116,8 @@ case "$TARGET" in
         FORMAT=deb
         PYTHON_BACKPORTS=(python-gflags==2.0 google-api-python-client==1.4.2 \
             oauth2client==1.5.2 pyasn1==0.1.7 pyasn1-modules==0.0.5 \
-            rsa uritemplate httplib2 ws4py pykka six  \
-            ciso8601 pycrypto backports.ssl_match_hostname llfuse==0.41.1 \
+            rsa uritemplate httplib2 ws4py pykka six \
+            ciso8601 pycrypto backports.ssl_match_hostname 'llfuse>=1.0' \
             contextlib2 'pycurl<7.21.5' pyyaml 'rdflib>=4.2.0' \
             shellescape mistune typing avro isodate ruamel.ordereddict
             cachecontrol requests 'pathlib2>=2.1.0')
@@ -136,7 +125,7 @@ case "$TARGET" in
         ;;
     ubuntu1404)
         FORMAT=deb
-        PYTHON_BACKPORTS=(pyasn1==0.1.7 pyasn1-modules==0.0.5 llfuse==0.41.1 ciso8601 \
+        PYTHON_BACKPORTS=(pyasn1==0.1.7 pyasn1-modules==0.0.5 'llfuse>=1.0' ciso8601 \
             google-api-python-client==1.4.2 six uritemplate oauth2client==1.5.2 httplib2 \
             rsa 'pycurl<7.21.5' backports.ssl_match_hostname pyyaml 'rdflib>=4.2.0' \
             shellescape mistune typing avro ruamel.ordereddict
@@ -157,7 +146,7 @@ case "$TARGET" in
             oauth2client==1.5.2 pyasn1==0.1.7 pyasn1-modules==0.0.5 \
             rsa uritemplate httplib2 ws4py pykka six  \
             ciso8601 pycrypto backports.ssl_match_hostname 'pycurl<7.21.5' \
-            python-daemon llfuse==0.41.1 'pbr<1.0' pyyaml \
+            python-daemon 'llfuse>=1.0' 'pbr<1.0' pyyaml contextlib2 \
             'rdflib>=4.2.0' shellescape mistune typing avro requests \
             isodate pyparsing sparqlwrapper html5lib==0.9999999 keepalive \
             ruamel.ordereddict cachecontrol 'pathlib2>=2.1.0')
@@ -177,7 +166,7 @@ case "$TARGET" in
             oauth2client==1.5.2 pyasn1==0.1.7 pyasn1-modules==0.0.5 \
             rsa uritemplate httplib2 ws4py pykka  \
             ciso8601 pycrypto 'pycurl<7.21.5' \
-            python-daemon==2.1.1 llfuse==0.41.1 'pbr<1.0' pyyaml \
+            python-daemon==2.1.1 'llfuse>=1.0' 'pbr<1.0' pyyaml contextlib2 \
             'rdflib>=4.2.0' shellescape mistune typing avro \
             isodate pyparsing sparqlwrapper html5lib==0.9999999 keepalive \
             ruamel.ordereddict cachecontrol 'pathlib2>=2.1.0')
index ff6bad4a71fed426b9f7087e317d98d3ef93ee43..46b8133466509b799724361f410872ff315a2228 100755 (executable)
@@ -7,7 +7,7 @@ Syntax:
         WORKSPACE=/path/to/arvados $(basename $0) [options]
 
 --target <target>
-    Distribution to build packages for (default: debian7)
+    Distribution to build packages for (default: debian8)
 --upload
     If the build and test steps are successful, upload the packages
     to a remote apt repository (default: false)
@@ -39,7 +39,7 @@ if [ $? -ne 0 ]; then
     exit 1
 fi
 
-TARGET=debian7
+TARGET=debian8
 UPLOAD=0
 
 eval set -- "$PARSEDOPTS"
index 541e684bf3ac202940742bd787a62baa93ffc7b9..01b7c2c9def3681296844e045fbfcd52824a6cf4 100755 (executable)
@@ -306,7 +306,7 @@ fpm_build () {
   declare -a fpm_dirs=(
       # source dir part of 'dir' package ("/source=/dest" => "/source"):
       "${PACKAGE%%=/*}"
-      # backports ("llfuse==0.41.1" => "backports/python-llfuse")
+      # backports ("llfuse>=1.0" => "backports/python-llfuse")
       "${WORKSPACE}/backports/${PACKAGE_TYPE}-${PACKAGE%%[<=>]*}")
   if [[ -n "$PACKAGE_NAME" ]]; then
       fpm_dirs+=("${WORKSPACE}/backports/${PACKAGE_NAME}")
index e0e1ce28524327851e6925d26284530ced1dd5a0..2831cf932e5cf3c2c23514057d4fa8a9811f92a5 100755 (executable)
@@ -457,13 +457,10 @@ pip freeze 2>/dev/null | egrep ^apache-libcloud==$LIBCLOUD_PIN \
     || pip install --pre --ignore-installed https://github.com/curoverse/libcloud/archive/apache-libcloud-$LIBCLOUD_PIN.zip >/dev/null \
     || fatal "pip install apache-libcloud failed"
 
-# This will help people who reuse --temp dirs when we upgrade to llfuse 0.42
-if egrep -q 'llfuse.*>= *0\.42' "$WORKSPACE/services/fuse/setup.py"; then
-    # Uninstall old llfuse, because services/fuse "pip install" won't
-    # upgrade it by default.
-    if pip freeze | egrep '^llfuse==0\.41\.'; then
-        yes | pip uninstall 'llfuse<0.42'
-    fi
+# Uninstall old llfuse (<1.0), because services/fuse "pip install"
+# won't upgrade it by default.
+if pip freeze | egrep '^llfuse==0'; then
+    yes | pip uninstall 'llfuse<1.0'
 fi
 
 # Deactivate Python 2 virtualenv
index 51b0a57a7fe11e573361e242eb80d324a540dfda..289966ffb5ea93007348ff1fb36c4bfa80ba331a 100644 (file)
@@ -74,7 +74,7 @@ import Queue
 # unlimited to avoid deadlocks, see https://arvados.org/issues/3198#note-43 for
 # details.
 
-llfuse.capi._notify_queue = Queue.Queue()
+llfuse._notify_queue = Queue.Queue()
 
 from fusedir import sanitize_filename, Directory, CollectionDirectory, TmpCollectionDirectory, MagicDirectory, TagsDirectory, ProjectDirectory, SharedDirectory, CollectionDirectoryBase
 from fusefile import StringFile, FuseArvadosFile
@@ -355,13 +355,12 @@ class Operations(llfuse.Operations):
 
     @catch_exceptions
     def destroy(self):
-        with llfuse.lock:
-            self._shutdown_started.set()
-            if self.events:
-                self.events.close()
-                self.events = None
+        self._shutdown_started.set()
+        if self.events:
+            self.events.close()
+            self.events = None
 
-            self.inodes.clear()
+        self.inodes.clear()
 
     def access(self, inode, mode, ctx):
         return True
@@ -400,7 +399,7 @@ class Operations(llfuse.Operations):
                 parent.update()
 
     @catch_exceptions
-    def getattr(self, inode):
+    def getattr(self, inode, ctx=None):
         if inode not in self.inodes:
             raise llfuse.FUSEError(errno.ENOENT)
 
@@ -432,19 +431,23 @@ class Operations(llfuse.Operations):
 
         entry.st_blksize = 512
         entry.st_blocks = (entry.st_size/512)+1
-        entry.st_atime = int(e.atime())
-        entry.st_mtime = int(e.mtime())
-        entry.st_ctime = int(e.mtime())
+        entry.st_atime_ns = int(e.atime() * 1000000000)
+        entry.st_mtime_ns = int(e.mtime() * 1000000000)
+        entry.st_ctime_ns = int(e.mtime() * 1000000000)
 
         return entry
 
     @catch_exceptions
-    def setattr(self, inode, attr):
+    def setattr(self, inode, attr, fields, fh, ctx):
         entry = self.getattr(inode)
 
-        e = self.inodes[inode]
+        if fh is not None and fh in self._filehandles:
+            handle = self._filehandles[fh]
+            e = handle.obj
+        else:
+            e = self.inodes[inode]
 
-        if attr.st_size is not None and isinstance(e, FuseArvadosFile):
+        if fields.update_size and isinstance(e, FuseArvadosFile):
             with llfuse.lock_released:
                 e.arvfile.truncate(attr.st_size)
                 entry.st_size = e.arvfile.size()
@@ -452,7 +455,7 @@ class Operations(llfuse.Operations):
         return entry
 
     @catch_exceptions
-    def lookup(self, parent_inode, name):
+    def lookup(self, parent_inode, name, ctx):
         name = unicode(name, self.inodes.encoding)
         inode = None
 
@@ -488,7 +491,7 @@ class Operations(llfuse.Operations):
                 self.inodes.del_entry(ent)
 
     @catch_exceptions
-    def open(self, inode, flags):
+    def open(self, inode, flags, ctx):
         if inode in self.inodes:
             p = self.inodes[inode]
         else:
@@ -575,7 +578,7 @@ class Operations(llfuse.Operations):
         self.release(fh)
 
     @catch_exceptions
-    def opendir(self, inode):
+    def opendir(self, inode, ctx):
         _logger.debug("arv-mount opendir: inode %i", inode)
 
         if inode in self.inodes:
@@ -614,7 +617,7 @@ class Operations(llfuse.Operations):
             e += 1
 
     @catch_exceptions
-    def statfs(self):
+    def statfs(self, ctx):
         st = llfuse.StatvfsData()
         st.f_bsize = 128 * 1024
         st.f_blocks = 0
@@ -676,19 +679,19 @@ class Operations(llfuse.Operations):
         return self.getattr(d.inode)
 
     @catch_exceptions
-    def unlink(self, inode_parent, name):
+    def unlink(self, inode_parent, name, ctx):
         _logger.debug("arv-mount unlink: parent_inode %i '%s'", inode_parent, name)
         p = self._check_writable(inode_parent)
         p.unlink(name)
 
     @catch_exceptions
-    def rmdir(self, inode_parent, name):
+    def rmdir(self, inode_parent, name, ctx):
         _logger.debug("arv-mount rmdir: parent_inode %i '%s'", inode_parent, name)
         p = self._check_writable(inode_parent)
         p.rmdir(name)
 
     @catch_exceptions
-    def rename(self, inode_parent_old, name_old, inode_parent_new, name_new):
+    def rename(self, inode_parent_old, name_old, inode_parent_new, name_new, ctx):
         _logger.debug("arv-mount rename: old_parent_inode %i '%s' new_parent_inode %i '%s'", inode_parent_old, name_old, inode_parent_new, name_new)
         src = self._check_writable(inode_parent_old)
         dest = self._check_writable(inode_parent_new)
index 9e282caf49919972b3fefe60001c603ae8176305..0e0ed4b0924c364e1e9f3957ae6521783156013a 100644 (file)
@@ -38,7 +38,7 @@ setup(name='arvados_fuse',
       ],
       install_requires=[
         'arvados-python-client >= 0.1.20151118035730',
-        'llfuse==0.41.1',
+        'llfuse >= 1.0',
         'python-daemon',
         'ciso8601',
         'setuptools'
index 4c70ce98d3d36bb2d28f77b3ad30a5bbfda42238..f623ae538633a75d87fc9b520c740f6ae117f6c8 100644 (file)
@@ -267,14 +267,22 @@ class FuseSharedTest(MountTestBase):
 
         # check mtime on template
         st = os.stat(pipeline_template_path)
-        self.assertEqual(st.st_mtime, 1397493304)
+        try:
+            mtime = st.st_mtime_ns / 1000000000
+        except AttributeError:
+            mtime = st.st_mtime
+        self.assertEqual(mtime, 1397493304)
 
         # check mtime on collection
         st = os.stat(os.path.join(
                 self.mounttmp,
                 'FUSE User',
                 'collection #1 owned by FUSE'))
-        self.assertEqual(st.st_mtime, 1391448174)
+        try:
+            mtime = st.st_mtime_ns / 1000000000
+        except AttributeError:
+            mtime = st.st_mtime
+        self.assertEqual(mtime, 1391448174)
 
 
 class FuseHomeTest(MountTestBase):