-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WebDAV view to DANDI Archive #164
Conversation
- Put all Dandisets under `/dandisets/` - Set the members of each Dandiset to `draft`, `latest`, and `releases`
This is awesome even if there is no redirections et (or are there??) ! Some initial observations
eyeballed following exception being raised at this code level: AttributeError: 'Version' object has no attribute 'timestamp' -- happened only when I got to `rclone` and it seems that forbids it to operate16:19:53.889 - ERROR : Caught HTTPRequestException(HTTP_INTERNAL_ERROR)
Traceback (most recent call last):
File "/home/yoh/proj/dandi/dandi-infrastructure/webdav/venvs/dev3/lib/python3.11/site-packages/wsgidav/error_printer.py", line 50, in __call__
for v in app_iter:
File "/home/yoh/proj/dandi/dandi-infrastructure/webdav/venvs/dev3/lib/python3.11/site-packages/wsgidav/request_resolver.py", line 224, in __call__
for v in app_iter:
File "/home/yoh/proj/dandi/dandi-infrastructure/webdav/venvs/dev3/lib/python3.11/site-packages/wsgidav/request_server.py", line 126, in __call__
app_iter = provider.custom_request_handler(environ, start_response, method)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/yoh/proj/dandi/dandi-infrastructure/webdav/venvs/dev3/lib/python3.11/site-packages/wsgidav/dav_provider.py", line 1620, in custom_request_handler
return default_handler(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/yoh/proj/dandi/dandi-infrastructure/webdav/venvs/dev3/lib/python3.11/site-packages/wsgidav/request_server.py", line 361, in do_PROPFIND
propList = child.get_properties("allprop")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/yoh/proj/dandi/dandi-infrastructure/webdav/venvs/dev3/lib/python3.11/site-packages/wsgidav/dav_provider.py", line 602, in get_properties
name_list = self.get_property_names(is_allprop=mode == "allprop")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/yoh/proj/dandi/dandi-infrastructure/webdav/venvs/dev3/lib/python3.11/site-packages/wsgidav/dav_provider.py", line 545, in get_property_names
if self.get_creation_date() is not None:
^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/yoh/proj/dandi/dandi-infrastructure/webdav/dandidav.py", line 349, in get_creation_date
return self.dandiset.version.timestamp()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'Version' object has no attribute 'timestamp'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/yoh/proj/dandi/dandi-infrastructure/webdav/venvs/dev3/lib/python3.11/site-packages/wsgidav/error_printer.py", line 83, in __call__
raise as_DAVError(e)
wsgidav.dav_error.DAVError: 500
if I patch with such crude one
then
|
Co-authored-by: Yaroslav Halchenko <debian@onerussian.com>
Redirections are not implemented, and I'd rather not have to implement them the suggested way.
wsgidav disables Range support by default, but I think I can enable it. |
@yarikoptic I think I've enabled Range support; try it now. |
@jwodder could you please assess performance of this webdav implementation (even without redirects) with those davfs2 and webdavfs (rclone seems to be just not cooked enough) and compare against datalad-fuse (fsspec based) for the purpose of our https://github.com/dandi/dandisets-healthstatus ? |
@yarikoptic Exactly what operation do you want me to run with dandisets-healthstatus? Do you want me to run the healthcheck on every asset or just specific assets? What mode? Etc. |
a sample run of
while having I also wonder if any of them has functionality for local caching but that could be investigated later.
just a sample asset of some "typical" size (a few GBs) so there is no full download. May be would be good if ran on something on what we currently have
What do you mean by Overall goal here to see if we could make |
|
@yarikoptic How exactly should the timing of tests be done? |
@yarikoptic Are you expecting me to run these tests on drogon (which is where |
on that same asset(s) on which you run any other benchmark. E.g. the suggested "random" dandiset 000016 sub-mouse1-fni16/sub-mouse1-fni16_ses-161228151100.nwb asset FWIW, I see we needing
hm, good concern -- setup of the environment should not be a part of the benchmarking time. I can only hypothesize on how to accomplish the drill here, e.g.
eh, drogon is probably consistently inconsistent in its load to run benchmarks. May be let's run it on
That one seems to be entirely magically not picky and runs just fine under your account(base) smaug:~$ mkdir /tmp/dandisets-fuse
(base) smaug:~$ /opt/webdavfs/webdavfs http://localhost:8080 /tmp/dandisets-fuse
http://localhost:8080: no PUT Range support, mounting read-only
^Z
[1]+ Stopped /opt/webdavfs/webdavfs http://localhost:8080 /tmp/dandisets-fuse
[148]
(base) smaug:~$ bg
[1]+ /opt/webdavfs/webdavfs http://localhost:8080 /tmp/dandisets-fuse &
(base) smaug:~$ ls -ld /tmp/dandisets-fuse/dandisets/000003
drwx------ 1 jwodder jwodder 0 Nov 6 2020 /tmp/dandisets-fuse/dandisets/000003
unmounting though seems tricky -- just stopping that process not enough and demands running umount as root :-/ You now can run
|
@yarikoptic So you want all the mounting & benchmarking to be done by a script. Is there a reason for this script to be standalone versus a subcommand added to |
yes -- by a script so we could easily redo on some other assets, or extend list of fuse systems to try etc. if you see that it is easier to implement within dandisets-healthstatus somehow -- I totally do not mind. |
Well, you already said above:
Seeing as the benchmarks include tests currently implemented in
|
Code moved to https://github.com/dandi/dandi-webdav. |
Closes #166.
To do:
RemoteReadableAsset
s dandi-cli#1376 merged & released