internal override void Visit(InitiGetVersionListRequest req)
        {
            // The version list is empty
            if (!this.dict.ContainsKey(req.RecordKey))
            {
                Dictionary <long, VersionEntry> newVersionList =
                    new Dictionary <long, VersionEntry>(SingletonPartitionedVersionTable.VERSION_CAPACITY);

                // Adds a special entry whose key is TAIL_KEY when the list is initialized.
                // The entry uses beginTimestamp as a pointer pointing to the newest verion in the list.
                newVersionList.Add(
                    SingletonDictionaryVersionTable.TAIL_KEY, VersionEntry.InitEmptyVersionEntry());

                this.dict.Add(req.RecordKey, newVersionList);

                // The version list is newly created by this tx.
                // No meaningful versions exist, except for the artificial entry as a tail pointer.
                req.RemoteVerList = newVersionList;
                req.Result        = true;
                req.Finished      = true;
                return;
            }
            else
            {
                req.RemoteVerList = null;
                req.Result        = false;
                req.Finished      = true;
            }
        }
Esempio n. 2
0
        internal override void Visit(InitiGetVersionListRequest req)
        {
            ConcurrentDictionary <long, VersionEntry> versionList = null;

            if (!this.dict.TryGetValue(req.RecordKey, out versionList))
            {
                ConcurrentDictionary <long, VersionEntry> newVersionList = new ConcurrentDictionary <long, VersionEntry>(32);
                // Adds a special entry whose key is -1 when the list is initialized.
                // The entry uses beginTimestamp as a pointer pointing to the newest verion in the list.
                VersionEntry entry = VersionEntry.InitEmptyVersionEntry();
                ResetTailEntry(entry);
                newVersionList.TryAdd(SingletonDictionaryVersionTable.TAIL_KEY, entry);

                // if concurrentDict.TryAdd()
                this.dict.Add(req.RecordKey, newVersionList);

                // The version list is newly created by this tx.
                // No meaningful versions exist, except for the artificial entry as a tail pointer.
                req.RemoteVerList = newVersionList;
                req.Result        = true;
                req.Finished      = true;
                return;
            }
            req.RemoteVerList = null;
            req.Result        = false;
            req.Finished      = true;
        }
Esempio n. 3
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++;
            }
        }
Esempio n. 5
0
        internal override void Visit(InitiGetVersionListRequest req)
        {
            VersionEntry emptyEntry = VersionEntry.InitEmptyVersionEntry();

            this.CQLExecute(string.Format(PartitionedCassandraVersionTable.CQL_UPLOAD_VERSION_ENTRY,
                                          req.TableId,
                                          req.RecordKey.ToString(),
                                          emptyEntry.VersionKey,
                                          emptyEntry.BeginTimestamp,
                                          emptyEntry.EndTimestamp,
                                          BytesSerializer.ToHexString(BytesSerializer.Serialize(emptyEntry.Record)),
                                          emptyEntry.TxId,
                                          emptyEntry.MaxCommitTs));
            req.Result   = true;
            req.Finished = true;
        }