This lock isn't being set up or used as it needs to be. :(
Remember, previously we created a HashIndex for each operation, and while a HashIndex existed for a particular collection, no other operations could move forward. We needed this so that a write op (which caused internal folder splits to occur) didn't invalidate read paths.
That means that we need a lock per CollectionIndex which is held *for the lifetime of any path we get out of it*. Not just during the lookup period, but from the time we perform the lookup until the time we have finished our read/write/whatever.
In terms of design, CollectionIndex is obviously a single-threaded concept, so the lock should be held and enforced by FileStore, not as a member of CollectionIndex.