Updated Client server discovery lifecycle (markdown)

Mark Harrah 2013-10-09 11:25:29 -07:00
parent 9068be9087
commit 6f9e77874b
1 changed files with 25 additions and 0 deletions

@ -47,3 +47,28 @@ This proposal is intended to "self-heal" and work in practice without asking use
## Proposal 2: Some other idea here
* is there some way we can get an actual, reliable lock on a project directory, cross-platform?
The sbt launcher provides a locking facility.
* currently used in practice to:
+ lock down the Ivy cache
+ lock parts of the sbt boot directory
* locks access jvm-wide on a file
+ combination synchronized + file lock
+ only allows one thread across all (cooperating) Java processes
* deals with some weird implementation details
+ overlapping file lock exceptions from Java when locking in the same JVM
+ workaround OS deadlock detection, which is often spurious in a multi-threaded application
* won't magically work on NFS or other environments with poor/missing lock support
* OS will clean up the lock if the process locking it dies
* blocking only- no tryLock to only attempt a lock and return quickly if not available
* API for [File.createNewFile](http://docs.oracle.com/javase/6/docs/api/java/io/File.html#createNewFile%28%29) says it shouldn't be used for file locking (don't know why)
* could use for server startup roughly like:
```scala
val f = <project-lock-file>
withLock(f) {
val port = read(f)
tryConnect(port)
fail: port = start new process; write(f, port)
}
```