Folks, The current implementation of IgniteCache.lock(key).lock() has the same semantics as the transactional locks - cache topology cannot be changed while there exists an ongoing transaction or an explicit lock is held. The restriction for transactions is quite fundamental, the lock() issue can be fixed if we re-implement locking the same way IgniteSemaphore currently works.
As for the "Failed to find semaphore with the given name" message, my first guess is that DataStructures were configured with 1 backups which led to the data loss when two nodes were stopped. Mario, can you please re-test your semaphore scenario with 2 backups configured for data structures? >From my side, I can also take a look at the semaphore issue when I'm done with IGNITE-2610.