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;
            }
		}
Exemple #2
0
		public PersistentState(string name, StorageEnvironmentOptions options, CancellationToken cancellationToken)
		{
			_name = name;
			_log = LogManager.GetLogger(GetType().Name + "." + name);
			_cancellationToken = cancellationToken;
			_env = new StorageEnvironment(options);
			InitializeDatabase();
		}
	    public StorageEnvironment(StorageEnvironmentOptions options,string debugJournalName)
			: this(options)
	    {
			DebugJournal = new DebugJournal(debugJournalName,this);
			
			if(Writer != null)
				Writer.Dispose();
            Writer = new TransactionMergingWriter(this, _cancellationTokenSource.Token, DebugJournal);
	    }
Exemple #4
0
        public TableStorage(StorageEnvironmentOptions options, IBufferPool bufferPool)
        {
            if (options == null)
                throw new ArgumentNullException("options");

            _options = options;
            this.bufferPool = bufferPool;

            env = new StorageEnvironment(_options);

            Initialize();
        }
		public KeyValueStateMachine(StorageEnvironmentOptions options)
		{
			options.IncrementalBackupEnabled = true;
			_storageEnvironment = new StorageEnvironment(options);
			using (var tx = _storageEnvironment.NewTransaction(TransactionFlags.ReadWrite))
			{
				_storageEnvironment.CreateTree(tx, "items");
				var metadata = _storageEnvironment.CreateTree(tx, "$metadata");
				var readResult = metadata.Read("last-index");
				if (readResult != null)
					LastAppliedIndex = readResult.Reader.ReadLittleEndianInt64();
				tx.Commit();
			}
		}
Exemple #6
0
        public FullTextIndex(StorageEnvironmentOptions options, IAnalyzer analyzer)
        {
            Analyzer = analyzer;
            Conventions = new IndexingConventions();
            BufferPool = new BufferPool();
            StorageEnvironment = new StorageEnvironment(options);

            using (var tx = StorageEnvironment.NewTransaction(TransactionFlags.ReadWrite))
            {
                ReadMetadata(tx);
                ReadLastDocumentId(tx);
                ReadFields(tx);

                tx.Commit();
            }
        }
        public TimeSeriesStorage(StorageEnvironmentOptions options)
        {
            _storageEnvironment = new StorageEnvironment(options);

            using (var tx = _storageEnvironment.NewTransaction(TransactionFlags.ReadWrite))
            {
                var metadata = _storageEnvironment.CreateTree(tx, "$metadata");
                var result = metadata.Read(tx, "id");
                if (result == null) // new db{
                {
                    Id = Guid.NewGuid();
                    metadata.Add(tx, "id", new MemoryStream(Id.ToByteArray()));
                }
                else
                {
                    Id = new Guid(result.Reader.ReadBytes(16));
                }
            }
        }
		public RaftEngineOptions(NodeConnectionInfo connection, StorageEnvironmentOptions storageOptions, ITransport transport, IRaftStateMachine stateMachine)
		{
			if (connection == null) throw new ArgumentNullException("connection");
			if (String.IsNullOrWhiteSpace(connection.Name)) throw new ArgumentNullException("connection.Name");
			if (storageOptions == null) throw new ArgumentNullException("storageOptions");
			if (transport == null) throw new ArgumentNullException("transport");
			if (stateMachine == null) throw new ArgumentNullException("stateMachine");

			SelfConnection = connection;
			StorageOptions = storageOptions;
			Transport = transport;
			StateMachine = stateMachine;
			ElectionTimeout = 1200;
			HeartbeatTimeout = 300;
			Stopwatch = new Stopwatch();
			MaxLogLengthBeforeCompaction = 32 * 1024;
			MaxStepDownDrainTime = TimeSpan.FromSeconds(15);
			MaxEntriesPerRequest = 256;
		}
Exemple #9
0
		private RaftEngineOptions CreateNodeOptions(string nodeName, int messageTimeout, StorageEnvironmentOptions storageOptions, params string[] peers)
		{
			var nodeOptions = new RaftEngineOptions(new NodeConnectionInfo { Name = nodeName },
				storageOptions,
				_inMemoryTransportHub.CreateTransportFor(nodeName),
				new DictionaryStateMachine())
			{
				ElectionTimeout = messageTimeout,
				HeartbeatTimeout = messageTimeout / 6,
				Stopwatch = Stopwatch.StartNew()
			};
			return nodeOptions;
		}