internal override void MockLoadData(int recordCount) { int pk = 0; while (pk < this.VersionDb.PartitionCount) { Console.WriteLine("Loading Partition {0}", pk); int partitions = this.VersionDb.PartitionCount; for (int i = pk; i < recordCount; i += partitions) { object recordKey = i; if (!this.dicts[pk].ContainsKey(recordKey)) { this.dicts[pk].Add(recordKey, new Dictionary <long, VersionEntry>()); } Dictionary <long, VersionEntry> versionList = this.dicts[pk][recordKey]; // `+ 1` is for conforming to the logic of `Insert` and // `ReadAndInitialize` in 'TransactionExecution.cs'. // It's the version key of the first Inserted version. long firstMeaningfulVersion = VersionEntry.VERSION_KEY_START_INDEX + 1; VersionEntry emptyEntry = new VersionEntry(); VersionEntry.InitEmptyVersionEntry(emptyEntry); emptyEntry.BeginTimestamp = firstMeaningfulVersion; emptyEntry.EndTimestamp = firstMeaningfulVersion; versionList.Add(SingletonDictionaryVersionTable.TAIL_KEY, emptyEntry); VersionEntry versionEntry = new VersionEntry(); VersionEntry.InitFirstVersionEntry(versionEntry.Record == null ? new String('a', 100) : versionEntry.Record, versionEntry); versionList.Add(firstMeaningfulVersion, versionEntry); } pk++; } }
internal override void MockLoadData(int recordCount) { int pk = 0; while (pk < this.VersionDb.PartitionCount) { Console.WriteLine("Loading Partition {0}", pk); for (int i = pk; i < recordCount; i += this.VersionDb.PartitionCount) { object recordKey = i; ConcurrentDictionary <long, VersionEntry> versionList = null; if (!this.dict.TryGetValue(recordKey, out versionList)) { versionList = new ConcurrentDictionary <long, VersionEntry>(); this.dict.Add(recordKey, versionList); } // `+ 1` is for conforming to the logic of `Insert` and // `ReadAndInitialize` in `TransactionExecution`. // It's the version key of the first Inserted version. long firstMeaningfulVersion = VersionEntry.VERSION_KEY_START_INDEX + 1; VersionEntry emptyEntry = new VersionEntry(); VersionEntry.InitEmptyVersionEntry(emptyEntry); emptyEntry.BeginTimestamp = firstMeaningfulVersion; emptyEntry.EndTimestamp = firstMeaningfulVersion; versionList.TryAdd(TAIL_KEY, emptyEntry); VersionEntry versionEntry = new VersionEntry(); VersionEntry.InitFirstVersionEntry(versionEntry.Record == null ? new String('a', 100) : versionEntry.Record, versionEntry); versionList.TryAdd(firstMeaningfulVersion, versionEntry); } pk++; } }
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); }