internal override void Visit(InsertTxIdRequest req) { string hashId = req.TxId.ToString(); if (this.redisVersionDbMode == RedisVersionDbMode.Cluster) { hashId = RedisVersionDb.PACK_KEY(RedisVersionDb.TX_KEY_PREFIX, hashId); } byte[][] keysBytes = { Encoding.ASCII.GetBytes(TxTableEntry.STATUS_STRING), Encoding.ASCII.GetBytes(TxTableEntry.COMMIT_TIME_STRING), Encoding.ASCII.GetBytes(TxTableEntry.COMMIT_LOWER_BOUND_STRING) }; byte[][] valuesBytes = { BitConverter.GetBytes((int)TxStatus.Ongoing), BitConverter.GetBytes(TxTableEntry.DEFAULT_COMMIT_TIME), BitConverter.GetBytes(TxTableEntry.DEFAULT_LOWER_BOUND) }; RedisRequest redisReq = this.NextRedisRequest(); redisReq.Set(hashId, keysBytes, valuesBytes, RedisRequestType.HMSet); redisReq.ParentRequest = req; }
internal override void Visit(ReplaceVersionRequest req) { string sha1 = this.redisLuaManager.GetLuaScriptSha1(LuaScriptName.REPLACE_VERSION_ENTRY); string hashId = req.RecordKey.ToString(); if (this.redisVersionDbMode == RedisVersionDbMode.Cluster) { hashId = RedisVersionDb.PACK_KEY(RedisVersionDb.VER_KEY_PREFIX, hashId); } byte[][] keysAndArgs = { Encoding.ASCII.GetBytes(hashId), BitConverter.GetBytes(req.VersionKey), BitConverter.GetBytes(req.BeginTs), BitConverter.GetBytes(req.EndTs), BitConverter.GetBytes(req.TxId), BitConverter.GetBytes(req.SenderId), BitConverter.GetBytes(req.ExpectedEndTs), RedisVersionDb.NEGATIVE_ONE_BYTES, }; RedisRequest redisReq = this.NextRedisRequest(); redisReq.Set(keysAndArgs, sha1, 1, RedisRequestType.EvalSha); redisReq.ParentRequest = req; }
private string GetHashKey(VersionEntryRequest request) { string hashId = request.RecordKey.ToString(); return(redisVersionDbMode == RedisVersionDbMode.Cluster ? RedisVersionDb.PACK_KEY(RedisVersionDb.VER_KEY_PREFIX, hashId) : hashId); }
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(UpdateTxStatusRequest req) { string hashId = req.TxId.ToString(); if (this.redisVersionDbMode == RedisVersionDbMode.Cluster) { hashId = RedisVersionDb.PACK_KEY(RedisVersionDb.TX_KEY_PREFIX, hashId); } byte[] keyBytes = Encoding.ASCII.GetBytes(TxTableEntry.STATUS_STRING); byte[] valueBytes = BitConverter.GetBytes((int)req.TxStatus); RedisRequest redisReq = this.NextRedisRequest(); redisReq.Set(hashId, keyBytes, valueBytes, RedisRequestType.HSet); redisReq.ParentRequest = req; }
internal override void Visit(GetTxEntryRequest req) { string hashId = req.TxId.ToString(); if (this.redisVersionDbMode == RedisVersionDbMode.Cluster) { hashId = RedisVersionDb.PACK_KEY(RedisVersionDb.TX_KEY_PREFIX, hashId); } byte[][] keyBytes = { Encoding.ASCII.GetBytes(TxTableEntry.STATUS_STRING), Encoding.ASCII.GetBytes(TxTableEntry.COMMIT_TIME_STRING), Encoding.ASCII.GetBytes(TxTableEntry.COMMIT_LOWER_BOUND_STRING) }; RedisRequest redisReq = this.NextRedisRequest(); redisReq.Set(hashId, keyBytes, RedisRequestType.HMGet); redisReq.ParentRequest = req; }
internal override void Visit(SetCommitTsRequest req) { string hashId = req.TxId.ToString(); if (this.redisVersionDbMode == RedisVersionDbMode.Cluster) { hashId = RedisVersionDb.PACK_KEY(RedisVersionDb.TX_KEY_PREFIX, hashId); } string sha1 = this.redisLuaScriptManager.GetLuaScriptSha1(LuaScriptName.SET_AND_GET_COMMIT_TIME); byte[][] keys = { Encoding.ASCII.GetBytes(hashId), BitConverter.GetBytes(req.ProposedCommitTs), RedisVersionDb.NEGATIVE_ONE_BYTES, }; RedisRequest redisReq = this.NextRedisRequest(); redisReq.Set(keys, sha1, 1, RedisRequestType.EvalSha); redisReq.ParentRequest = req; }
internal override void Visit(UpdateVersionMaxCommitTsRequest req) { string sha1 = this.redisLuaManager.GetLuaScriptSha1(LuaScriptName.UPDATE_VERSION_MAX_COMMIT_TS); string hashId = req.RecordKey.ToString(); if (this.redisVersionDbMode == RedisVersionDbMode.Cluster) { hashId = RedisVersionDb.PACK_KEY(RedisVersionDb.VER_KEY_PREFIX, hashId); } byte[][] keysAndArgs = { Encoding.ASCII.GetBytes(hashId), BitConverter.GetBytes(req.VersionKey), BitConverter.GetBytes(req.MaxCommitTs), RedisVersionDb.NEGATIVE_ONE_BYTES, }; RedisRequest redisReq = this.NextRedisRequest(); redisReq.Set(keysAndArgs, sha1, 1, RedisRequestType.EvalSha); redisReq.ParentRequest = req; }
internal override void Visit(UpdateCommitLowerBoundRequest req) { string hashId = req.TxId.ToString(); if (this.redisVersionDbMode == RedisVersionDbMode.Cluster) { hashId = RedisVersionDb.PACK_KEY(RedisVersionDb.TX_KEY_PREFIX, hashId); } string sha1 = this.redisLuaScriptManager.GetLuaScriptSha1(LuaScriptName.UPDATE_COMMIT_LOWER_BOUND); byte[][] keys = { Encoding.ASCII.GetBytes(hashId), BitConverter.GetBytes(req.CommitTsLowerBound), RedisVersionDb.NEGATIVE_ONE_BYTES, RedisVersionDb.NEGATIVE_TWO_BYTES, }; RedisRequest redisReq = this.NextRedisRequest(); redisReq.Set(keys, sha1, 1, RedisRequestType.EvalSha); redisReq.ParentRequest = req; }
internal override void MockLoadData(int recordCount) { int pk = 0; RedisConnectionPool connPool = null; if (this.redisVersionDbMode == RedisVersionDbMode.Cluster) { connPool = this.singletonConnPool; } int loaded = 0; while (pk < this.PartitionCount) { Console.WriteLine("Loading Partition {0}", pk); if (connPool == null) { connPool = this.RedisManager.GetClientPool(this.redisDbIndex, RedisVersionDb.GetRedisInstanceIndex(pk)); } using (RedisClient redisClient = connPool.GetRedisClient()) { int batchSize = 100; int partitions = this.PartitionCount; for (int i = pk; i < recordCount; i += partitions * batchSize) { int upperBound = Math.Min(recordCount, i + partitions * batchSize); using (IRedisPipeline pipe = redisClient.CreatePipeline()) { for (int j = i; j < upperBound; j += partitions) { object recordKey = j; string hashId = recordKey.ToString(); if (this.redisVersionDbMode == RedisVersionDbMode.Cluster) { hashId = RedisVersionDb.PACK_KEY(RedisVersionDb.VER_KEY_PREFIX, hashId); } VersionEntry versionEntry = new VersionEntry(); VersionEntry.InitFirstVersionEntry(new String('a', 100), versionEntry); byte[] key = BitConverter.GetBytes(VersionEntry.VERSION_KEY_START_INDEX + 1); byte[] value = VersionEntry.Serialize(versionEntry); pipe.QueueCommand(r => ((RedisNativeClient)r).HSet(hashId, key, value)); pipe.QueueCommand(r => ((RedisNativeClient)r).HSet(hashId, RedisVersionDb.LATEST_VERSION_PTR_FIELD, key)); loaded++; } pipe.Flush(); } } } pk++; if (this.redisVersionDbMode != RedisVersionDbMode.Cluster) { connPool = null; } } Console.WriteLine("Loaded {0} records Successfully", loaded); }