Exemple #1
0
        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++;
            }
        }
Exemple #3
0
        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);
        }