Feature request: alternative for symlinks when populating workspaces

closed

#1

Dear cryoSPARC development team,

For one of the projects at our institute, the researcher would like to use a network-based volume/share to store the project/workspace (output files). The share is on a SMB/CIFS server and mounted on the Ubuntu Linux standalone installation.

When we tried to import the data we got the following error message:

Traceback (most recent call last): File “cryosparc2_master/cryosparc2_compute/run.py”, line 78, in cryosparc2_compute.run.main File “cryosparc2_compute/jobs/imports/run.py”, line 435, in run_import_movies_or_micrographs level, all_base_paths, abs_to_rel_map, all_rel_paths = symlink_all_abs_files_to_import_dir(proj_dir_abs, job_dir_rel, abs_paths_to_import) File “cryosparc2_compute/jobs/imports/run.py”, line 383, in symlink_all_abs_files_to_import_dir abs_to_rel_map, all_rel_paths = symlink_paths(proj_dir_abs, os.path.join(job_dir_rel, import_dir_name), all_abs_paths, all_base_paths) File “cryosparc2_compute/jobs/imports/run.py”, line 370, in symlink_paths os.symlink(abs_path, dest) OSError: [Errno 95] Operation not supported

which seems to be caused by the attempt to generate symbolic links inside the CIFS share (which is not supported by the server). Would it be possible to implement a feature such that if the symlink operation fails, the program will create an empty (filesize = 0) file, and an additional “sidecar” file with the extension (.symlink) is created (text file that points to the file)? While this is a potentially costly work-around (doubling the file-system entries), it at least would allow projects to be created on a CIFS-mounted volume.

When the data is being read, an additional operation would have to assert the content can be read (instead of filesize = 0), at which point the program would then also check for the sidecar (.symlink) file.

If this is not feasible, it would be great if the “Import data” mask/input widgets had a checkbox that allowed users to select “copy data instead of symlinks”. While this would duplicate the data (possibly unnecessarily), it would at least allow the operation to run.

Naturally, another approach would be to store a simple text file into the workspace folder that summarizes the files that are being imported (e.g. store a file with a fixed filename, called “cryoSPARC_inputfiles.lst”, and instead of linking files, this file would contain the list of files. This might even improve performance, since the folder would not have to contain as many file entries in the first place…

Thank you very much for your consideration! Best,
/jochen