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); } } }
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)); }
private void Init(TransactionStatus status, int readStmp) { #if DEBUG ID = IDGenerator.NextID; #endif _transactionStatus = status; ReadStamp = readStmp; ReadSet = new ReadSet(); }
public void Abort() { _transactionStatus = TransactionStatus.Aborted; #if DEBUG Console.WriteLine("ABORTED: " + ID); #endif WriteSet.Clear(); ReadSet.Clear(); }
/// <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)}}}" )); }
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); }
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(); }
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); }
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(); } }
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); }
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(); }
/// <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); } }
public bool ValidateReadset() { return(ReadSet.Validate(this)); }