Пример #1
0
 internal override void Visit(ReadVersionRequest req)
 {
     byte[] valueBytes = req.Result as byte[];
     req.Result = valueBytes == null || valueBytes.Length == 0 ?
                  null :
                  VersionEntry.Deserialize(req.VersionKey, valueBytes, req.LocalVerEntry);
 }
Пример #2
0
 internal override void Visit(ReadVersionRequest req)
 {
     this.HashId = req.RecordKey as string;
     byte[] keyBytes = BitConverter.GetBytes(req.VersionKey);
     this.RedisReq = new RedisRequest(this.HashId, keyBytes, RedisRequestType.HGet)
     {
         ParentRequest = req
     };
 }
        internal override void Visit(ReadVersionRequest req)
        {
            string hashId = req.RecordKey.ToString();

            if (this.redisVersionDbMode == RedisVersionDbMode.Cluster)
            {
                hashId = RedisVersionDb.PACK_KEY(RedisVersionDb.VER_KEY_PREFIX, hashId);
            }

            byte[] keyBytes = BitConverter.GetBytes(req.VersionKey);

            RedisRequest redisReq = this.NextRedisRequest();

            redisReq.Set(hashId, keyBytes, RedisRequestType.HGet);
            redisReq.ParentRequest = req;
        }
        internal override void Visit(ReadVersionRequest req)
        {
            VersionEntry verEntry = req.RemoteVerEntry;

            if (verEntry == null)
            {
                Dictionary <long, VersionEntry> versionList = null;
                if (!this.dict.TryGetValue(req.RecordKey, out versionList) ||
                    !versionList.TryGetValue(req.VersionKey, out verEntry))
                {
                    req.Result   = null;
                    req.Finished = true;
                }
            }

            VersionEntry.CopyValue(verEntry, req.LocalVerEntry);

            req.Result   = req.LocalVerEntry;
            req.Finished = true;
        }
Пример #5
0
        internal override void Visit(ReadVersionRequest req)
        {
            VersionEntry versionEntry = req.RemoteVerEntry;

            if (versionEntry == null)
            {
                ConcurrentDictionary <long, VersionEntry> versionList = null;
                if (!this.dict.TryGetValue(req.RecordKey, out versionList))
                {
                    req.Result   = null;
                    req.Finished = true;
                    return;
                }

                if (!versionList.TryGetValue(req.VersionKey, out versionEntry))
                {
                    req.Result   = null;
                    req.Finished = true;
                    return;
                }
            }

            Debug.Assert(Interlocked.Read(ref versionEntry.VersionKey) == req.VersionKey);
            // Debug Assertion
            // if (!versionEntry.RecordKey.Equals(req.RecordKey))
            // {
            //     throw new Exception("Inconsistent record key");
            // }

            //int ticket = versionEntry.EnterQueuedLatch();
            versionEntry.ReadLock();
            VersionEntry.CopyFromRemote(versionEntry, req.LocalVerEntry);
            //versionEntry.ExitQueuedLatch(ticket);
            versionEntry.UnReadLock();

            req.Result   = req.LocalVerEntry;
            req.Finished = true;
        }
Пример #6
0
        internal override void Visit(ReadVersionRequest req)
        {
            VersionEntry versionEntry = req.RemoteVerEntry;

            if (versionEntry == null)
            {
                throw new TransactionException("The version entry should be referenced for main-memory k-v.");
            }

            if (versionEntry.VersionKey != req.VersionKey)
            {
                throw new TransactionException("The referenced version entry has been recycled for new data.");
            }

            while (Interlocked.CompareExchange(ref versionEntry.latch, 1, 0) != 0)
            {
                ;
            }
            VersionEntry.CopyValue(versionEntry, req.LocalVerEntry);
            Interlocked.Exchange(ref versionEntry.latch, 0);

            req.Result   = req.LocalVerEntry;
            req.Finished = true;
        }
Пример #7
0
 internal virtual void Visit(ReadVersionRequest req)
 {
 }
 internal override void Visit(ReadVersionRequest req)
 {
     req.Result   = this.GetVersionEntryByKey(req.TableId, req.RecordKey, req.VersionKey);
     req.Finished = true;
 }