public long EnsureKeyExistsSafely(string keyStr) { var keyHash = keyStr.ToHash(); long keyId; if (!_sessionFactory.TryGetKeyId(_collectionId, keyHash, out keyId)) { lock (_keyLock) { if (!_sessionFactory.TryGetKeyId(_collectionId, keyHash, out keyId)) { // We have a new key! // store key var keyInfo = PutKey(keyStr); keyId = PutKeyInfo(keyInfo.offset, keyInfo.len, keyInfo.dataType); // store key mapping _sessionFactory.RegisterKeyMapping(_collectionId, keyHash, keyId); } } } return(keyId); }