internal override void Visit(UploadVersionRequest req) { this.HashId = req.RecordKey as string; byte[] keyBytes = BitConverter.GetBytes(req.VersionKey); byte[] valueBytes = VersionEntry.Serialize(req.VersionEntry); this.RedisReq = new RedisRequest(this.HashId, keyBytes, valueBytes, RedisRequestType.HSetNX) { ParentRequest = req }; }
internal override void Visit(UploadVersionRequest req) { string hashKey = GetHashKey(req); byte[][] args = { Encoding.ASCII.GetBytes(hashKey), BitConverter.GetBytes(req.VersionKey), VersionEntry.Serialize(req.VersionEntry) }; var redisRequest = CreateLuaRequest( LuaScriptName.UPLOAD_NEW_VERSION, args); redisRequest.ParentRequest = req; }
internal override void Visit(InitiGetVersionListRequest req) { this.HashId = req.RecordKey as string; long versionKey = VersionEntry.VERSION_KEY_START_INDEX; VersionEntry emptyEntry = new VersionEntry( versionKey, VersionEntry.EMPTY_RECORD, VersionEntry.EMPTY_TXID); byte[] keyBytes = BitConverter.GetBytes(versionKey); byte[] valueBytes = VersionEntry.Serialize(emptyEntry); this.RedisReq = new RedisRequest(this.HashId, keyBytes, valueBytes, RedisRequestType.HSetNX) { 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); }