Description Usage Arguments Details Value Author(s) See Also Examples
View source: R/lockExternalDir.R
Lock the external Conda installation directory so that multiple processes cannot try to install at the same time.
1 2 3 | lockExternalDir(...)
unlockExternalDir(lock)
|
... |
Further arguments to pass to |
lock |
An existing |
This will apply a lock to the (possibly user-specified) external Conda installation directory, so that a user trying to run parallel basilisk processes will not have race conditions during lazy Conda installation. We use filelock to manage the locking process for us, with the following strategy:
If a system installation is being performed, we do not perform any locking. Rather, the R package manager will lock the entire R installation directory for us.
If the external directory is not yet present, we establish an exclusive lock. We then proceed to the creation of said directory and installation of Conda.
If an external installation directory is already present, we establish a shared lock. This will wait for any exclusive lock to expire (and thus any currently running installation to finish). No waiting is required if there are no existing exclusive locks.
Note that locking is only required during installation of Conda (or its environments), not during actual use.
Once an installation/environment is created, we assume that it is read-only for all processes.
Technically, this might not be true if one were to install a new version of basilisk halfway through an R session,
which would prompt installConda
to wipe out the old Conda installations;
but one cannot in general guarantee the behavior of running R sessions when package versions change anyway,
so we won't bother to protect against that.
lockExternalDir
will return a filelock_lock
object from lock
.
unlockExternalDir
will unlock the file and return NULL
invisibly.
Aaron Lun
installConda
, for an example of how to implement this locking approach.
1 2 | loc <- lockExternalDir()
unlockExternalDir(loc)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.