public void SetReservationsTest() { var customer = new Customer { Id = Guid.NewGuid() }; var db = CreateDatabase(); var target = new TransactionStorage(db); var reservations = new Dictionary <Customer, HashSet <RID> > { { customer, new HashSet <RID> { new RID(53), new RID(TP.RID.Type.ROOM, "Room") } } }; // TODO: need to fix this because the class signiture changed //target.SetReservations(reservations); //var result = target.GetReservations(); //Assert.IsTrue(result.ContainsKey(customer)); //Assert.AreEqual(2, result[customer].Count); //Assert.IsTrue(result[customer].Contains(new RID(53))); //Assert.IsTrue(result[customer].Contains(new RID(TP.RID.Type.ROOM, "Room"))); }
async Task <bool> DownloadTransactionSlices(RemoteSyncItem remote, ChainSyncItem chainSyncItem) { var chainId = chainSyncItem.ChainId; var chainType = chainSyncItem.ChainType; var chainIndex = chainSyncItem.ChainIndex; chainSyncItem.UpdateLastBlockInfo((await remote.Client.DownloadLastBlockInfo(chainType, chainId, chainIndex)).Data); var localStartSlice = 0; var localLast = TransactionStorage.GetTransactionSlices(_storage, chainType, chainId, chainIndex, true).LastOrDefault(); if (localLast.Value != null) { localStartSlice = localLast.Value.SliceId + 1; } var remoteLastAvailableSlice = TransactionSliceInfo.GetSliceIndex(chainSyncItem.BlockState.LastTransactionId) - 1; if (remoteLastAvailableSlice < 0) // -1: ignore last "hot" slice { Log.Debug($"Skipping transaction slice download for chain {chainId}/{chainIndex}, no available remote stored slice found.", this); return(true); } var count = 0; if (remoteLastAvailableSlice >= 0 && remoteLastAvailableSlice >= localStartSlice) { for (var sliceId = localStartSlice; sliceId <= remoteLastAvailableSlice; sliceId++) { Log.Trace($"Downloading transaction slice {sliceId}/{remoteLastAvailableSlice} for chain {chainId}.", this); var sliceData = (await remote.Client.DownloadTransactionSlice(_storage, chainType, chainId, chainIndex, sliceId)).Data; var error = false; if (sliceData == null || !sliceData.Move()) { Log.Trace($"Slice {sliceId} download for chain {chainId}/{chainIndex} failed.", this); sliceData?.Delete(); error = true; } sliceData?.Dispose(); if (error) { return(false); } count++; } } if (count > 0) // check for new slices { return(await DownloadTransactionSlices(remote, chainSyncItem)); } return(true); }
public RabbitMQReceiver(IConnection conn, TransactionStorage storage, IConfiguration configuration) { _conn = conn; _storage = storage; _exchangeName = configuration["RabbitMQ:ExchangeName"]; _queueNameProcessed = configuration["RabbitMQ:QueueProcessed"]; _routingKeyProcessed = configuration["RabbitMQ:RoutingKeyProcessed"]; }
public void WriteDeleteBeforeCommit() { Transaction context = new Transaction(); RID rid = new RID(RID.Type.FLIGHT, "test"); var db = CreateDatabase(); TransactionStorage tr = new TransactionStorage(db); tr.Write(context, rid, new Resource(rid, 10, 11)); tr.Delete(context, rid); Resource res = tr.Read(context, rid); Assert.IsNull(res); }
public Product AuthTransaction(TransactionAuth transactionAuthData) { var transaction = TransactionStorage.FirstOrDefault(s => s.TransactionGuid == transactionAuthData.TransactionId && s.TransactionStatus == TransactionStatusEnum.AuthWaiting); if (transaction == null) { throw new ArgumentException("No transaction"); } var product = transaction.ProductToBuy; transaction.Authorize(transactionAuthData.AuthCode); return(product); }
public void AbortTest() { Transaction context = new Transaction(); RID rid = new RID(RID.Type.FLIGHT, "test"); var db = CreateDatabase(); TransactionStorage tr = new TransactionStorage(db); tr.Write(context, rid, new Resource(rid, 10, 11)); //Resource res = tr.Read(context, rid); //Assert.AreEqual(11, res.getPrice()); tr.Abort(context); var res = tr.Read(context, rid); Assert.IsNull(res, "Transaction aborted, but record still there"); }
public string RegisterTransaction(Product product) { var transactionId = Guid.NewGuid().ToString(); TransactionStorage.Add(new TransactionData { ProductToBuy = product, TransactionChangeTime = DateTime.Now, TransactionGuid = transactionId, TransactionStatus = TransactionStatusEnum.AuthWaiting, AuthCode = "1234", }); return(transactionId); }
/// <summary> /// Commits the database transaction. /// </summary> public void Commit() { if (Transaction == null) { return; } Transaction.Commit(); foreach (IDbTransaction storage in TransactionStorage) { storage.Commit(); storage.Dispose(); } TransactionStorage.Clear(); Transaction = null; }
public void ReadWriteTest() { Transaction context = new Transaction(); RID rid = new RID(RID.Type.FLIGHT, "test"); Customer c = new Customer(); HashSet <RID> reservations = new HashSet <RID> { rid }; var db = CreateDatabase(); TransactionStorage tr = new TransactionStorage(db); tr.Write(context, c, reservations); HashSet <RID> actual = tr.Read(context, c); Assert.IsTrue(reservations.SetEquals(actual)); }
public void CommitTest() { Transaction context = new Transaction(); Transaction context1 = new Transaction(); RID rid = new RID(RID.Type.FLIGHT, Guid.NewGuid().ToString().Substring(0, 24)); var db = CreateDatabase(); TransactionStorage tr = new TransactionStorage(db); tr.Write(context, rid, new Resource(rid, 10, 11)); Resource res = tr.Read(context1, rid); Assert.IsNull(res); tr.Prepare(context); tr.Commit(context); res = tr.Read(context, rid); Assert.AreEqual(11, res.getPrice()); }
public void DeleteTest1() { Transaction context = new Transaction(); RID rid = new RID(RID.Type.FLIGHT, "test"); Customer c = new Customer(); HashSet <RID> reservations = new HashSet <RID> { rid }; var db = CreateDatabase(); TransactionStorage tr = new TransactionStorage(db); tr.Write(context, c, reservations); tr.Delete(context, c); List <Customer> cs = new List <Customer>(tr.GetCustomers(context)); Assert.AreEqual(0, cs.Count); }
public void ConsumeBlockData(BlockData <MaintainBlock> blockData) { if (!Active) { return; } var block = blockData.Block; if (block.BlockId <= LastProcessedBlockId) { return; } var dirtyData = new DirtyData(); var commitItems = NewCommitItems(); foreach (var item in block.Items) { ConsumeTransaction(dirtyData, commitItems, item); TransactionStorage.Add(block.BlockId, item); } CommmitDirtyData(dirtyData, commitItems); commitItems.Commit(); var lastTransactionid = LastProcessedTransactionId; var count = block.Transactions.Count; if (count > 0) { lastTransactionid = block.Transactions[count - 1].TransactionId; } foreach (var metaStorage in _metaDiscStorage) { metaStorage.LastBlockId = block.BlockId; metaStorage.LastTransactionId = lastTransactionid; metaStorage.Commit(); } TransactionStorage.Save(); }
public void ConsumeCoreBlockData(BlockData <CoreBlock> blockData) { var block = blockData.Block; if (block.BlockId < LastProcessedBlockId) { return; } var dirtyData = new DirtyData(); var i = 0; foreach (var item in block.Items) { var operation = item.Transaction; if (ConsumeTransaction(dirtyData, item)) { TransactionStorage.Add(block.BlockId, item); i++; } } ProcessDirtyData(dirtyData); var lastTransactionid = LastProcessedTransactionId; var count = block.Items.Count; if (count > 0) { lastTransactionid = block.Items[count - 1].Transaction.OperationId; } foreach (var metaStorage in _metaDiscStorage) { metaStorage.LastBlockId = block.BlockId; metaStorage.LastTransactionId = lastTransactionid; metaStorage.Commit(); } TransactionStorage.Save(); }
public void SetResourcesTest() { var db = CreateDatabase(); var target = new TransactionStorage(db); var resources = new Dictionary <RID, Resource>(); var rid1 = new RID(TP.RID.Type.ROOM, "Motel6"); resources.Add(rid1, new Resource(rid1, 1000, 20)); var rid2 = new RID(TP.RID.Type.FLIGHT, "53"); resources.Add(rid2, new Resource(rid2, 260, 550)); // TODO: need to fix this because the class signiture changed //target.SetResources(resources); //var result = target.GetResources(); //Assert.IsTrue(result.ContainsKey(rid1)); //Assert.IsTrue(result.ContainsKey(rid2)); //Assert.AreEqual(260, result[rid2].getCount()); //Assert.AreEqual(550, result[rid2].getPrice()); //Assert.AreEqual("53", result[rid2].getName()); }
public TransactionReport(TransactionStorage transactionStorage, CategoryStorage categoryStorage) { _transactionStorage = transactionStorage; _categoryStorage = categoryStorage; }
internal TransactionPolicy( [Import(RequiredCreationPolicy = CreationPolicy.Shared)] TransactionStorage <T> storage) : base(storage) { }
// IDataChain public TransactionItem <DataTransaction> GetTransactionItem(long transactionId) { return(TransactionStorage.GetTransactionItem <DataTransaction>(transactionId)); }
public TransactionController(RabbitMQSend conn, TransactionStorage storage) { _send = conn; _storage = storage; }
protected override string GetPath() { return(TransactionStorage.GetTransactionStoragePath(ChainType, _chainId, _chainIndex));; }