Esempio n. 1
0
        public Transaction(StorageEnvironment env, long id, TransactionFlags flags, IFreeSpaceHandling freeSpaceHandling)
        {
            _dataPager = env.Options.DataPager;
            _env = env;
            _journal = env.Journal;
            _id = id;
            _freeSpaceHandling = freeSpaceHandling;
            Flags = flags;
            var scratchPagerState = env.ScratchBufferPool.PagerState;
            scratchPagerState.AddRef();
            _pagerStates.Add(scratchPagerState);
            if (flags.HasFlag(TransactionFlags.ReadWrite) == false)
            {
                // for read transactions, we need to keep the pager state frozen
                // for write transactions, we can use the current one (which == null)
                _scratchPagerState = scratchPagerState;

                _state = env.State.Clone(this);
                _journal.GetSnapshots().ForEach(AddJournalSnapshot);
                return;
            }

            _state = env.State.Clone(this);

            InitTransactionHeader();

            MarkTreesForWriteTransaction();
        }
Esempio n. 2
0
        public StorageEnvironment(StorageEnvironmentOptions options)
        {
            try
            {
                _options = options;
                _dataPager = options.DataPager;
                _freeSpaceHandling = new FreeSpaceHandling();
                _headerAccessor = new HeaderAccessor(this);
                var isNew = _headerAccessor.Initialize();

                _scratchBufferPool = new ScratchBufferPool(this);

				_journal = new WriteAheadJournal(this);
				
				if (isNew)
                    CreateNewDatabase();
                else // existing db, let us load it
                    LoadExistingDatabase();


                State.FreeSpaceRoot.Name = Constants.FreeSpaceTreeName;
                State.Root.Name = Constants.RootTreeName;

                Writer = new TransactionMergingWriter(this, _cancellationTokenSource.Token);

                if (_options.ManualFlushing == false)
                    _flushingTask = FlushWritesToDataFileAsync();
            }
            catch (Exception)
            {
                Dispose();
                throw;
            }
		}
Esempio n. 3
0
 public JournalApplicator(WriteAheadJournal waj)
 {
     _waj = waj;
 }
Esempio n. 4
0
			public JournalApplicator(WriteAheadJournal waj)
			{
				_waj = waj;
			}
Esempio n. 5
0
 public JournalApplicator(WriteAheadJournal waj, ReaderWriterLockSlim flushingSemaphore)
 {
     _waj = waj;
     _flushingSemaphore = flushingSemaphore;
 }
 public JournalApplicator(WriteAheadJournal waj, ReaderWriterLockSlim flushingSemaphore = null)
 {
     _waj = waj;
     _flushingSemaphore = flushingSemaphore ?? new ReaderWriterLockSlim();
 }
 public JournalShipper(WriteAheadJournal waj, ReaderWriterLockSlim shippingSemaphore = null)
 {
     _waj = waj;
     _shippingSemaphore = shippingSemaphore ?? new ReaderWriterLockSlim();
 }
Esempio n. 8
0
			public JournalApplicator(WriteAheadJournal waj, ReaderWriterLockSlim flushingSemaphore)
			{
				_waj = waj;
				_flushingSemaphore = flushingSemaphore;
			}