Bug #18316
closedarv-mount tries to save collection on file close even in read-only mode
100%
Description
De-identified customer backtrace:
2021-11-01 15:22:50 arvados.arvados_fuse127303 ERROR: Error during finalize of inode 13
Traceback (most recent call last):
File "/usr/share/python3/dist/python3-arvados-fuse/lib/python3.8/site-packages/arvados_fuse/__init__.py", line 314, in clear
v.finalize()
File "/usr/share/python3/dist/python3-arvados-fuse/lib/python3.8/site-packages/arvados_fuse/fusedir.py", line 581, in finalize
self.collection.save()
File "/usr/share/python3/dist/python3-arvados-fuse/lib/python3.8/site-packages/arvados/arvfile.py", line 469, in must_be_writable_wrapper
return orig_func(self, *args, **kwargs)
File "/usr/share/python3/dist/python3-arvados-fuse/lib/python3.8/site-packages/arvados/arvfile.py", line 270, in synchronized_wrapper
return orig_func(self, *args, **kwargs)
File "/usr/share/python3/dist/python3-arvados-fuse/lib/python3.8/site-packages/arvados/retry.py", line 177, in num_retries_setter
return orig_func(self, *args, **kwargs)
File "/usr/share/python3/dist/python3-arvados-fuse/lib/python3.8/site-packages/arvados/collection.py", line 1626, in save
self._remember_api_response(self._my_api().collections().update(
File "/usr/share/python3/dist/python3-arvados-fuse/lib/python3.8/site-packages/googleapiclient/_helpers.py", line 134, in positional_wrapper
return wrapped(*args, **kwargs)
File "/usr/share/python3/dist/python3-arvados-fuse/lib/python3.8/site-packages/googleapiclient/http.py", line 915, in execute
raise HttpError(resp, content, uri=self.uri)
arvados.errors.ApiError: <HttpError 403 when requesting https://.....com/arvados/v1/collections/....-4zz18-.........?alt=json returned "request failed: http://localhost:8000/arvados/v1/collections/....-4zz18-...........: 403 Forbidden: Uuid ....-4zz18-.......... is not writable by ....-tpzed-......... (req-ixqstv61tuf3vnx21lwf)">
The token doesn't have write access, but it is trying to save the collection anyway. It shouldn't be trying to save the collection when it closes the file.
There seem to be 2 main bugs here:
- Not tracking change operations, tries to saves the collection record on close every time even though nothing changed, which is unnecessary and incorrect
- Arv-mount was started in read-only mode but flush() still tries to save the collection.