Esempio n. 1
0
        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);
        }