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);
        }
Пример #3
0
        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);
        }
Пример #12
0
        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();
        }
Пример #13
0
        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());
        }
Пример #15
0
 public TransactionReport(TransactionStorage transactionStorage, CategoryStorage categoryStorage)
 {
     _transactionStorage = transactionStorage;
     _categoryStorage    = categoryStorage;
 }
 internal TransactionPolicy(
     [Import(RequiredCreationPolicy = CreationPolicy.Shared)]
     TransactionStorage <T> storage) : base(storage)
 {
 }
Пример #17
0
 // IDataChain
 public TransactionItem <DataTransaction> GetTransactionItem(long transactionId)
 {
     return(TransactionStorage.GetTransactionItem <DataTransaction>(transactionId));
 }
Пример #18
0
 public TransactionController(RabbitMQSend conn, TransactionStorage storage)
 {
     _send    = conn;
     _storage = storage;
 }
Пример #19
0
 protected override string GetPath()
 {
     return(TransactionStorage.GetTransactionStoragePath(ChainType, _chainId, _chainIndex));;
 }