Exemple #1
0
 public PutManager(ITransactionLog transactionLog, IFeedSessionManager sessionManager, DataStore dataStore, ILog log)
 {
     _transactionLog = transactionLog;
     SessionManager  = sessionManager;
     _dataStore      = dataStore;
     _log            = log;
 }
Exemple #2
0
 /// <summary>
 /// Creates a new server core that uses a specific IStoreManager implementation
 /// rather than getting one from the StoreManagerFactory
 /// </summary>
 /// <param name="baseLocation"></param>
 /// <param name="storeName"></param>
 /// <param name="storeManager"></param>
 public StoreWorker(string baseLocation, string storeName, IStoreManager storeManager)
 {
     _storeName     = storeName;
     _storeLocation = Path.Combine(baseLocation, storeName);
     Logging.LogInfo("StoreWorker created with location {0}", _storeLocation);
     _jobs = new ConcurrentQueue <Job>();
     _jobExecutionStatus = new ConcurrentDictionary <string, JobExecutionStatus>();
     _storeManager       = storeManager;
     _transactionLog     = _storeManager.GetTransactionLog(_storeLocation);
 }
Exemple #3
0
 private void SyncronizeTable(BaseSqlToCS table)
 {
     if (table.Mode != EditMode.None)
     {
         ITransactionLog create = table as ITransactionLog;
         if (create != null)
         {
             create.TransactionId = TransactionId;
         }
     }
 }
Exemple #4
0
 /// <summary>
 /// Creates a new server core 
 /// </summary>
 /// <param name="baseLocation">Path to the stores directory</param>
 /// <param name="storeName">Name of store</param>
 public StoreWorker(string baseLocation, string storeName)
 {
     _storeName = storeName;
     _storeLocation = Path.Combine(baseLocation, storeName);
     Logging.LogInfo("StoreWorker created with location {0}", _storeLocation);
     _jobs = new ConcurrentQueue<Job>();
     // _jobStatus = new ConcurrentDictionary<string, JobStatus>();
     _jobExecutionStatus = new ConcurrentDictionary<string, JobExecutionStatus>();
     _storeManager = StoreManagerFactory.GetStoreManager();
     _transactionLog = _storeManager.GetTransactionLog(_storeLocation);
 }
Exemple #5
0
        public void Update(ITransactionLog entity)
        {
            TransactionLog dbTLog = dbContext.TransactionLogs.Where(s => s.Id == entity.Id).FirstOrDefault();

            dbTLog.StockId         = entity.StockId;
            dbTLog.StockSymbol     = entity.StockSymbol;
            dbTLog.Quantity        = entity.Quantity;
            dbTLog.Price           = entity.Price;
            dbTLog.Purchased       = entity.Purchased;
            dbTLog.TransactionDate = entity.TransactionDate;

            dbContext.SaveChanges();
        }
        public void Update(ITransactionLog entity)
        {
            TransactionLog dbTLog = dbContext.TransactionLogs.Where(s => s.Id == entity.Id).FirstOrDefault();

            dbTLog.StockId = entity.StockId;
            dbTLog.StockSymbol = entity.StockSymbol;
            dbTLog.Quantity = entity.Quantity;
            dbTLog.Price = entity.Price;
            dbTLog.Purchased = entity.Purchased;
            dbTLog.TransactionDate = entity.TransactionDate;

            dbContext.SaveChanges();
        }
Exemple #7
0
        public AtomicLogScope(Transaction transaction, IDatabase database)
        {
            this.transaction = transaction;

            this.log = database
                       .DatabaseEngine
                       .TransactionHandler
                       .GetTransactionLog(this.transaction);

            this.logPosition = this.log.CurrentPosition;
            this.transaction.EnterAtomicSection();

            this.completed = false;
        }
Exemple #8
0
        public AtomicLogScope(Transaction transaction, IDatabase database)
        {
            this.transaction = transaction;

            this.log = database
                .DatabaseEngine
                .TransactionHandler
                .GetTransactionLog(this.transaction);

            this.logPosition = this.log.CurrentPosition;
            this.transaction.EnterAtomicSection();

            this.completed = false;
        }
Exemple #9
0
 /// <summary>
 /// Creates a new server core
 /// </summary>
 /// <param name="baseLocation">Path to the stores directory</param>
 /// <param name="storeName">Name of store</param>
 public StoreWorker(string baseLocation, string storeName)
 {
     _baseLocation  = baseLocation;
     _storeName     = storeName;
     _storeLocation = Path.Combine(baseLocation, storeName);
     Logging.LogInfo("StoreWorker created with location {0}", _storeLocation);
     _jobs = new ConcurrentQueue <Job>();
     _jobExecutionStatus = new ConcurrentDictionary <string, JobExecutionStatus>();
     _storeManager       = StoreManagerFactory.GetStoreManager();
     _transactionLog     = _storeManager.GetTransactionLog(_storeLocation);
     _storeStatisticsLog = _storeManager.GetStatisticsLog(_storeLocation);
     _statsMonitor       = new StatsMonitor();
     InitializeStatsMonitor();
     _shutdownCompleted = new ManualResetEvent(false);
 }
Exemple #10
0
        private async Task EnsureInitializedAsync()
        {
            if (_transactionLog == null)
            {
                using (await _lock.EnterAsync().ConfigureAwait(false))
                {
                    if (_transactionLog == null)
                    {
                        if (!_recoveryHappened)
                        {
                            _initializeBeforeRecovery = true;
                        }

                        var tlog = new TransactionLog(_keyValueStore, _policy, _latest + 1);
                        using (var tx = _keyValueStore.CreateTransaction())
                        {
                            var metadata = _metadataTable.Enter(tx);

                            if (metadata.Contains(LatestKey))
                            {
                                metadata.Update(LatestKey, (_latest + 1).ToString(CultureInfo.InvariantCulture));
                                metadata.Update(ActiveCountKey, (_activeCount + 1).ToString(CultureInfo.InvariantCulture));
                                metadata.Update(HeldCountKey, (_heldCount + 1).ToString(CultureInfo.InvariantCulture));
                            }
                            else
                            {
                                metadata.Add(LatestKey, "1");
                                metadata.Add(ActiveCountKey, "1");
                                metadata.Add(HeldCountKey, "1");
                            }

                            await tx.CommitAsync().ConfigureAwait(false);
                        }

                        _latest++;
                        _activeCount++;
                        _heldCount++;

                        _transactionLog = tlog;
                        _versionedLogs.Enqueue(_transactionLog);
                    }
                }
            }

            AssertInvariants();
        }
        public static TransactionLogData ToModel(this ITransactionLog log, bool withDetails = false)
        {
            if (log == null)
            {
                return(null);
            }
            var data = new TransactionLogData()
            {
                Duration = log.Duration, RecordCount = log.RecordCount
            };

            if (withDetails)
            {
                data.Changes = log.Changes;
            }
            data.AssignCommon(log);
            return(data);
        }
        private static void AppendToLog(ITransactionLog <Guid, TestInfo> log, IEnumerable <KeyValuePair <Guid, TestInfo> > keyValuePairs)
        {
            using (var items = keyValuePairs.GetEnumerator())
            {
                bool more = items.MoveNext();
                while (more)
                {
                    var tx    = log.BeginTransaction();
                    int count = 1000;
                    do
                    {
                        log.AddValue(ref tx, items.Current.Key, items.Current.Value);
                        more = items.MoveNext();
                    } while (more && --count > 0);

                    log.CommitTransaction(ref tx);
                }
            }
        }
Exemple #13
0
        /// <summary>
        /// Starts the transaction manager.
        /// </summary>
        /// <param name="resource">The <see cref="ITransactedResource" /> to be managed.</param>
        /// <param name="log">The unopened <see cref="ITransactionLog" /> implementation to be used.</param>
        /// <param name="recoverCorrupt">Pass as <c>true</c> if recovery of corrupt transaction logs should be attempted.</param>
        public void Start(ITransactedResource resource, ITransactionLog log, bool recoverCorrupt)
        {
            using (TimedLock.Lock(this))
            {
                if (running)
                {
                    throw new TransactionException("Transaction manager has already started for [{0}].", resource.Name);
                }

                switch (log.Open(this))
                {
                case LogStatus.Ready:

                    break;

                case LogStatus.Recover:

                    this.resource = resource;
                    this.log      = log;

                    Recover();
                    break;

                case LogStatus.Corrupt:

                    if (!recoverCorrupt)
                    {
                        throw new TransactionException("Transaction log for [{0]] is corrupt.", resource.Name);
                    }

                    SysLog.LogWarning("Corrupt transaction log detected for [{0}]. Best efforts are being taken to recover.", resource.Name);
                    Recover();
                    break;
                }

                this.running        = true;
                this.resource       = resource;
                this.log            = log;
                this.transactions   = new Dictionary <Guid, BaseTransaction>();
                this.threadTransMap = new Dictionary <int, BaseTransaction>();
            }
        }
Exemple #14
0
        /// <summary>
        /// Snapshots the current transaction log. The returned <see cref="SnapshotCleanup"/> object can be used to trigger truncation after
        /// a checkpoint succeeds.
        /// </summary>
        /// <returns>Task completing after the snapshot succeeds (merely updating some metadata), and returning a cleanup object.</returns>
        public async Task <SnapshotCleanup> SnapshotAsync()
        {
            AssertInvariants();

            using (var t = _keyValueStore.CreateTransaction())
            {
                var tx = _metadataTable.Enter(t);
                if (tx.Contains(LatestKey))
                {
                    tx.Update(LatestKey, (_latest + 1).ToString(CultureInfo.InvariantCulture));
                    tx.Update(ActiveCountKey, (_activeCount + 1).ToString(CultureInfo.InvariantCulture));
                    tx.Update(HeldCountKey, (_heldCount + 1).ToString(CultureInfo.InvariantCulture));
                }
                else
                {
                    tx.Add(LatestKey, "1");
                    tx.Add(ActiveCountKey, "1");
                    tx.Add(HeldCountKey, "1");
                }

                await t.CommitAsync().ConfigureAwait(false);
            }

            _latest++;
            _activeCount++;
            _heldCount++;

            _transactionLog = new TransactionLog(_keyValueStore, _policy, _latest);
            _versionedLogs.Enqueue(_transactionLog);

            Tracing.Transaction_Log_Snapshot(null, _engineId, _latest, _activeCount, _heldCount);

            AssertInvariants();

            return(new SnapshotCleanup(this));
        }
Exemple #15
0
 public ScopedTransactionLog(ITransactionLog transactionLog, IKeyValueStoreTransaction transaction)
 {
     _transactionLog = transactionLog;
     _transaction    = transaction;
 }
Exemple #16
0
 internal TransactionInfoEnumerator(ITransactionLog log)
 {
     _transactionLog    = log;
     _transactionNumber = 0;
 }
 /// <summary> Sets the transaction log to use </summary>
 protected void SetLogFile(ITransactionLog <TKey, TValue> logFile)
 {
     LogFile = logFile;
 }
 public static void WriteEntityUpdate <TEntity>(this ITransactionLog log, EntityPropertyCloner <TEntity> propertyCloner, TEntity storedEntity, TEntity oldEntity)
     where TEntity : class
 {
     log.Write(new UpdateEntityLogItem <TEntity>(propertyCloner, storedEntity, oldEntity));
 }
 public static void WriteIndexDelete <TEntity>(this ITransactionLog log, IIndex <TEntity> index, TEntity entity)
     where TEntity : class
 {
     log.Write(new IndexDeleteTransactionLogItem <TEntity>(index, entity));
 }
        private static void AppendToLog(ITransactionLog<Guid, TestInfo> log, IEnumerable<KeyValuePair<Guid, TestInfo>> keyValuePairs)
        {
            using(var items = keyValuePairs.GetEnumerator())
            {
                bool more = items.MoveNext();
                while (more)
                {
                    var tx = log.BeginTransaction();
                    int count = 1000;
                    do
                    {
                        log.AddValue(ref tx, items.Current.Key, items.Current.Value);
                        more = items.MoveNext();
                    } while (more && --count > 0);

                    log.CommitTransaction(ref tx);
                }
            }
        }
Exemple #21
0
 public DeleteManager(DataStore dataStore, ITransactionLog transactionLog)
 {
     _dataStore      = dataStore;
     _transactionLog = transactionLog;
 }
 public TransactionManager(ILockManager lockManager, ITransactionLog transactionLog)
 {
     _lockManager    = lockManager;
     _transactionLog = transactionLog;
 }
 /// <summary>
 /// Creates a new server core 
 /// </summary>
 /// <param name="baseLocation">Path to the stores directory</param>
 /// <param name="storeName">Name of store</param>
 public StoreWorker(string baseLocation, string storeName)
 {
     _baseLocation = baseLocation;
     _storeName = storeName;
     _storeLocation = Path.Combine(baseLocation, storeName);
     Logging.LogInfo("StoreWorker created with location {0}", _storeLocation);
     _jobs = new ConcurrentQueue<Job>();
     _jobExecutionStatus = new ConcurrentDictionary<string, JobExecutionStatus>();
     _storeManager = StoreManagerFactory.GetStoreManager();
     _transactionLog = _storeManager.GetTransactionLog(_storeLocation);
     _storeStatisticsLog = _storeManager.GetStatisticsLog(_storeLocation);
     _statsMonitor = new StatsMonitor();
     InitializeStatsMonitor();
     _shutdownCompleted = new ManualResetEvent(false);
 }