Exemplo n.º 1
0
        public void RecordRead(ITransactionalResource transactionalResource, TransactionalResourceVersion readVersion, long stableVersion)
        {
            if (readVersion.TransactionId == TransactionId)
            {
                // Just reading our own write here.
                // Sanity check to see if there's a lost write.
                int resourceWriteNumber;
                if (WriteSet.TryGetValue(transactionalResource, out resourceWriteNumber) &&
                    resourceWriteNumber > readVersion.WriteNumber)
                {
                    // Context has record of more writes than we have, some writes must be lost.
                    throw new OrleansTransactionAbortedException(TransactionId, "Lost Write");
                }
            }
            else
            {
                TransactionalResourceVersion resourceReadVersion;
                if (ReadSet.TryGetValue(transactionalResource, out resourceReadVersion) &&
                    resourceReadVersion != readVersion)
                {
                    // Uh-oh. Read two different versions of the grain.
                    throw new OrleansValidationFailedException(TransactionId);
                }

                ReadSet[transactionalResource] = readVersion;

                if (readVersion.TransactionId != TransactionId &&
                    readVersion.TransactionId > stableVersion)
                {
                    DependentTransactions.Add(readVersion.TransactionId);
                }
            }
        }
Exemplo n.º 2
0
        public void Collections_Set_SetEquals()
        {
            var item1 = CreateItem1();
            var item2 = CreateItem2();
            var item3 = CreateItem3();
            var item4 = CreateItem4();

            var list = new List <T>()
            {
                item1, item2
            };

            Assert.IsFalse(ReadSet.SetEquals(list));
            WriteSet.Add(item1);
            WriteSet.Add(item2);
            Assert.IsTrue(ReadSet.SetEquals(list));
            WriteSet.Add(item3);
            Assert.IsFalse(ReadSet.SetEquals(list));
            WriteSet.Remove(item2);
            WriteSet.Add(item4);
            Assert.IsFalse(ReadSet.SetEquals(list));
            WriteSet.Clear();
            WriteSet.Add(item4);
            Assert.IsFalse(ReadSet.SetEquals(list));
            Assert.IsTrue(ReadSet.SetEquals(ReadSet));
        }
Exemplo n.º 3
0
        private void Init(TransactionStatus status, int readStmp)
        {
#if DEBUG
            ID = IDGenerator.NextID;
#endif
            _transactionStatus = status;
            ReadStamp          = readStmp;
            ReadSet            = new ReadSet();
        }
Exemplo n.º 4
0
        public void Abort()
        {
            _transactionStatus = TransactionStatus.Aborted;
#if DEBUG
            Console.WriteLine("ABORTED: " + ID);
#endif
            WriteSet.Clear();
            ReadSet.Clear();
        }
Exemplo n.º 5
0
 /// <summary>
 /// For verbose tracing and debugging.
 /// </summary>
 public override string ToString()
 {
     return(string.Join("",
                        TransactionId,
                        (IsReadOnly ? " RO" : ""),
                        (IsAborted ? " Aborted" : ""),
                        $" R{{{string.Join(",", ReadSet.Select(kvp => $"{kvp.Key.ToShortString()}.{kvp.Value}"))}}}",
                        $" W{{{string.Join(",", WriteSet.Select(kvp => $"{kvp.Key.ToShortString()}.{TransactionId}#{kvp.Value}"))}}}",
                        $" D{{{string.Join(",", DependentTransactions)}}}"
                        ));
 }
Exemplo n.º 6
0
        public void Collections_Set_Add()
        {
            var item1 = CreateItem1();
            var item2 = CreateItem2();

            Assert.IsTrue(WriteSet.Add(item1));
            Assert.IsTrue(WriteSet.Add(item2));
            Assert.IsFalse(WriteSet.Add(item1));

            ReadSet.AssertContainsOnly(item1, item2);
        }
Exemplo n.º 7
0
        public void Collections_Set_Remove()
        {
            var item1 = CreateItem1();
            var item2 = CreateItem2();

            WriteSet.Add(item1);

            Assert.IsFalse(WriteSet.Remove(item2));
            Assert.IsTrue(WriteSet.Remove(item1));

            ReadSet.AssertEmpty();
        }
Exemplo n.º 8
0
        private void Union(TransactionInfo other)
        {
            if (TransactionId != other.TransactionId)
            {
                IsAborted = true;
                string error = $"Attempting to perform union between different Transactions.  Attempted union between Transactions {TransactionId} and {other.TransactionId}";
                throw new InvalidOperationException(error);
            }

            if (other.IsAborted)
            {
                IsAborted = true;
            }

            // Take a union of the ReadSets.
            foreach (var grain in other.ReadSet.Keys)
            {
                if (ReadSet.ContainsKey(grain))
                {
                    if (ReadSet[grain] != other.ReadSet[grain])
                    {
                        // Conflict! Transaction must abort
                        IsAborted = true;
                    }
                }
                else
                {
                    ReadSet.Add(grain, other.ReadSet[grain]);
                }
            }

            // Take a union of the WriteSets.
            foreach (var grain in other.WriteSet.Keys)
            {
                if (!WriteSet.ContainsKey(grain))
                {
                    WriteSet[grain] = 0;
                }

                WriteSet[grain] += other.WriteSet[grain];
            }

            DependentTransactions.UnionWith(other.DependentTransactions);
        }
Exemplo n.º 9
0
        public void ProcessRequest(HttpContext context)
        {
            DBO dbo = new DBO();
            int num = dbo.GetRecordNum("select AccountId from BulkJob_Account");

            context.Response.Write("nissan num:" + num + "<br><br>");



            using (ReadSet rs = new ReadSet("select * from BulkJob_Account"))
            {
                while (rs.Read())
                {
                    Hashtable dataMap = rs.Map;
                    context.Response.Write("name:" + rs.GetString(dataMap, "AccountName") + "<br>");
                }
                rs.Dispose();
            }
        }
Exemplo n.º 10
0
        public void Collections_Set_IntersectWith()
        {
            var item1 = CreateItem1();
            var item2 = CreateItem2();
            var item3 = CreateItem3();

            var list = new List <T>()
            {
                item2, item3
            };

            WriteSet.Add(item1);
            WriteSet.Add(item2);

            WriteSet.IntersectWith(list);

            ReadSet.AssertContainsOnly(item2);

            WriteSet.IntersectWith(ReadSet);

            ReadSet.AssertContainsOnly(item2);
        }
Exemplo n.º 11
0
        public void Collections_Set_SymmetricExceptWith()
        {
            var item1 = CreateItem1();
            var item2 = CreateItem2();
            var item3 = CreateItem3();

            var list = new List <T>()
            {
                item2, item3
            };

            WriteSet.Add(item1);
            WriteSet.Add(item2);

            WriteSet.SymmetricExceptWith(list);

            ReadSet.AssertContainsOnly(item1, item3);

            WriteSet.SymmetricExceptWith(WriteSet);

            ReadSet.AssertEmpty();
        }
Exemplo n.º 12
0
        /// <summary>
        /// Use this endpoint to Get transaction by transaction id.
        /// </summary>
        /// <exception cref="Xooa.Client.Exception.XooaApiException">Thrown when fails to make API call</exception>
        /// <exception cref="Xooa.Client.Exception.XooaRequestTimeoutException">Thrown when a 202 response is recieved.</exception>
        /// <param name="transactionId">Transaction Id to fetch data</param>
        /// <param name="timeout">Timeout interval for transaction.</param>
        /// <returns>TransactionResponse giving the data about the transaction.</returns>
        public TransactionResponse getTransactionByTransactionId(string transactionId, string timeout = "3000")
        {
            Log.Info("Invoking URL - " + XooaConstants.TRANSACTION_URL);

            var localVarPath = XooaConstants.TRANSACTION_URL;
            var contentType  = XooaConstants.CONTENT_TYPE;

            var localVarQueryParameters = new List <KeyValuePair <string, string> >();

            localVarQueryParameters.Add(new KeyValuePair <string, string>(XooaConstants.ASYNC, XooaConstants.FALSE));
            localVarQueryParameters.Add(new KeyValuePair <string, string>(XooaConstants.TIMEOUT, timeout));

            var localVarHeaderParams = new Dictionary <string, string>();

            localVarHeaderParams.Add(XooaConstants.ACCEPT, XooaConstants.CONTENT_TYPE);
            localVarHeaderParams.Add(XooaConstants.AUTHORIZATION, XooaConstants.TOKEN + apiToken);

            var localVarPathParams = new Dictionary <string, string>();

            localVarPathParams.Add("TransactionId", transactionId);

            int statusCode = 0;

            try {
                RestRequest request = XooaSDK.Client.Util.Request.PrepareRequest(localVarPath, RestSharp.Method.GET,
                                                                                 localVarQueryParameters, null, localVarHeaderParams, null, localVarPathParams, contentType);

                IRestResponse response = RestClient.Execute(request);

                JObject details = XooaSDK.Client.Util.Request.GetData(response);

                string txnId         = details["txid"].ToString();
                string smartContract = details["smartcontract"].ToString();
                string creatorMspId  = details["creator_msp_id"].ToString();
                string createdAt     = details["createdt"].ToString();
                string type          = details["type"].ToString();
                var    endorserIds   = details["endorser_msp_id"];
                var    readsets      = details["read_set"];
                var    writesets     = details["write_set"];

                List <string>   endorserMspIds = new List <string>();
                List <ReadSet>  readSetsList   = new List <ReadSet>();
                List <WriteSet> writeSetsList  = new List <WriteSet>();

                foreach (var id in endorserIds)
                {
                    endorserMspIds.Add(id.ToString());
                }

                foreach (var set in readsets)
                {
                    string chaincode   = set["chaincode"].ToString();
                    var    readsubsets = set["set"];

                    List <ReadSubSet> subSetsList = new List <ReadSubSet>();

                    foreach (var subset in readsubsets)
                    {
                        string key  = subset["key"].ToString();
                        var    vrsn = subset["version"];

                        string blockNumber       = vrsn["block_num"].ToString();
                        string transactionNumber = vrsn["tx_num"].ToString();

                        Response.Version version = new Response.Version(blockNumber, transactionNumber);

                        ReadSubSet readSubSet = new ReadSubSet(key, version);

                        subSetsList.Add(readSubSet);
                    }

                    ReadSet readSet = new ReadSet(chaincode, subSetsList);

                    readSetsList.Add(readSet);
                }


                foreach (var set in writesets)
                {
                    string chaincode    = set["chaincode"].ToString();
                    var    writesubsets = set["set"];

                    List <WriteSubSet> writeSubSetsList = new List <WriteSubSet>();

                    foreach (var writesubset in writesubsets)
                    {
                        string key      = set["key"].ToString();
                        string value    = set["value"].ToString();
                        bool   isDelete = (bool)set["is_delete"];

                        WriteSubSet writeSubSet = new WriteSubSet(key, value, isDelete);

                        writeSubSetsList.Add(writeSubSet);
                    }

                    WriteSet writeSet = new WriteSet(chaincode, writeSubSetsList);
                    writeSetsList.Add(writeSet);
                }

                TransactionResponse transactionResponse = new TransactionResponse(txnId, smartContract, creatorMspId, endorserMspIds,
                                                                                  type, createdAt, readSetsList, writeSetsList);

                return(transactionResponse);
            } catch (XooaRequestTimeoutException xrte) {
                Log.Error(xrte);
                throw xrte;
            } catch (XooaApiException xae) {
                Log.Error(xae);
                throw xae;
            } catch (System.Exception e) {
                Log.Error(e);
                throw new XooaApiException(statusCode, e.Message);
            }
        }
Exemplo n.º 13
0
 public bool ValidateReadset()
 {
     return(ReadSet.Validate(this));
 }