Exemplo n.º 1
0
        public override Task OnPageAddedAsync(IPageStore store, Page page,
                                              CancellationToken cancellationToken = default)
        {
            var pending = AsyncExtensions.TaskPool.Get();

            try
            {
                var notify = _notify.Clients.All.SendAsync(Constants.Notifications.ReceiveMessage, "info",
                                                           $"Added new page with Title '{page.Title}' and ID '{page.Uuid}'", cancellationToken);
                if (notify.IsCompleted || notify.IsCanceled || notify.IsFaulted)
                {
                    return(AsyncExtensions.NoTask);
                }

                if (notify.Status != TaskStatus.Running)
                {
                    notify.Start();
                }

                pending.Add(notify);
                return(Task.WhenAll(pending));
            }
            finally
            {
                AsyncExtensions.TaskPool.Return(pending);
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// Opens an existing tree in the page store
 /// </summary>
 /// <param name="pageStore"></param>
 /// <param name="rootPageId">The page ID of the BTree root node</param>
 /// <param name="keySize"></param>
 /// <param name="dataSize"></param>
 /// <param name="profiler"></param>
 public BPlusTree(IPageStore pageStore, ulong rootPageId, int keySize = 8, int dataSize = 64, BrightstarProfiler profiler = null)
 {
     _config = new BPlusTreeConfiguration(pageStore, keySize, dataSize, pageStore.PageSize);
     _pageStore = pageStore;
     var root = GetNode(rootPageId, profiler);
     _rootId = root.PageId;
 }
Exemplo n.º 3
0
        public PrefixManager(IPageStore pageStore, ulong startPageId, BrightstarProfiler profiler)
        {
            _pageStore = pageStore;
            var startPage = _pageStore.Retrieve(startPageId, profiler);

            Load(startPage, profiler);
        }
        public IStore OpenStore(string storeLocation, bool readOnly)
        {
            Logging.LogInfo("Open Store {0}", storeLocation);
            var masterFile        = GetMasterFile(storeLocation);
            var latestCommitPoint = masterFile.GetLatestCommitPoint();
            var dataFilePath      = Path.Combine(storeLocation, DataFileName);
            var resourceFilePath  = Path.Combine(storeLocation, ResourceFileName);

            if (_persistenceManager.FileExists(dataFilePath))
            {
                IPageStore dataPageStore = null;
                switch (masterFile.PersistenceType)
                {
                case PersistenceType.AppendOnly:
                    dataPageStore = new AppendOnlyFilePageStore(_persistenceManager, dataFilePath, PageSize, readOnly, _storeConfiguration.DisableBackgroundWrites);
                    break;

                case PersistenceType.Rewrite:
                    dataPageStore = new BinaryFilePageStore(_persistenceManager, dataFilePath, PageSize, readOnly,
                                                            latestCommitPoint.CommitNumber, latestCommitPoint.NextCommitNumber, _storeConfiguration.DisableBackgroundWrites);
                    break;
                }
                var resourcePageStore = new AppendOnlyFilePageStore(_persistenceManager, resourceFilePath, PageSize, readOnly, _storeConfiguration.DisableBackgroundWrites);
                var resourceTable     = new ResourceTable(resourcePageStore);
                var store             = new Store(storeLocation, dataPageStore, resourceTable, latestCommitPoint.LocationOffset, null);
                Logging.LogInfo("Store {0} opened successfully", storeLocation);
                return(store);
            }
            throw new StoreManagerException(storeLocation, "Data file not found");
        }
Exemplo n.º 5
0
        public void Setup()
        {
            _startupLog      = SetupMock <IStartupLog>();
            _errorLog        = SetupMock <IErrorLog>();
            _pagePoolFactory = SetupMock <IPagePoolFactory>();
            _pagePool        = _pagePoolFactory.Create(_pageSize);

            _logFileInfo1 = new FileInfo("C:\\temp\\test1.ldf");
            _logFileInfo2 = new FileInfo("C:\\temp\\test2.ldf");

            _dataFileInfo1 = new FileInfo("C:\\temp\\test1.mdf");
            _dataFileInfo2 = new FileInfo("C:\\temp\\test2.mdf");

            _fileSet = new FileSet(
                new IDataFile[] { new DataFile(_dataFileInfo1, _pageSize, _startupLog), new DataFile(_dataFileInfo2, _pageSize, _startupLog) },
                new ILogFile[] { new LogFile(_logFileInfo1, true, _startupLog), new LogFile(_logFileInfo2, true, _startupLog) },
                _pagePoolFactory,
                _startupLog);

            var databaseFactory = SetupMock <IDatabaseFactory>();

            _database = databaseFactory.Open(null);

            var pageCache = new PageCache(_fileSet, _database, _pagePoolFactory, _startupLog, _errorLog);

            _pageStore = new PageStore(pageCache, _startupLog);
        }
Exemplo n.º 6
0
        public void Setup()
        {
            _startUpLog      = SetupMock <IStartupLog>();
            _errorLog        = SetupMock <IErrorLog>();
            _pagePoolFactory = SetupMock <IPagePoolFactory>();
            _pagePool        = _pagePoolFactory.Create(_pageSize);

            _dataFileInfo = new FileInfo("C:\\temp\\test.mdf");
            _dataFile     = new DataFile(_dataFileInfo, _pageSize, _startUpLog);
            _logFileInfo  = new FileInfo("C:\\temp\\test.ldf");
            _logFile      = new LogFile(_logFileInfo, true, _startUpLog);
            _fileSet      = new FileSet(
                new[] { _dataFile },
                new[] { _logFile },
                _pagePoolFactory,
                _startUpLog);

            var databaseFactory = SetupMock <IDatabaseFactory>();

            _database = databaseFactory.Open(null);

            var pageCache = new PageCache(_fileSet, _database, _pagePoolFactory, _startUpLog, _errorLog);

            _pageStore = new PageStore(pageCache, _startUpLog);

            _accessorFactory = new AccessorFactory();
            _accessor        = _accessorFactory.SmallSequentialAccessor(_pageStore);
        }
Exemplo n.º 7
0
 /// <summary>
 /// Creates a new tree in the page store
 /// </summary>
 /// <param name="txnId">The transaction id for the update</param>
 /// <param name="pageStore"></param>
 /// <param name="keySize">The size of the B+ tree's key (in bytes)</param>
 /// <param name="dataSize">The size of the values stored in leaf nodes (in bytes)</param>
 public BPlusTree(ulong txnId, IPageStore pageStore, int keySize = 8, int dataSize = 64) 
 {
     _config = new BPlusTreeConfiguration(pageStore, keySize, dataSize, pageStore.PageSize);
     _pageStore = pageStore;
     var root = MakeLeafNode(txnId);
     _rootId = root.PageId;
 }
Exemplo n.º 8
0
 public BPlusTreeBuilder(IPageStore targetPageStore, BPlusTreeConfiguration targetTreeConfiguration)
 {
     _pageStore = targetPageStore;
     _config    = targetTreeConfiguration;
     // These values are copied locally to allow us to later change the default loading from 100% to something lower if we want
     _leafLoadFactor       = _config.LeafLoadFactor;
     _internalBranchFactor = _config.InternalBranchFactor;
 }
Exemplo n.º 9
0
 public BPlusTreeBuilder(IPageStore targetPageStore, BPlusTreeConfiguration targetTreeConfiguration)
 {
     _pageStore = targetPageStore;
     _config = targetTreeConfiguration;
     // These values are copied locally to allow us to later change the default loading from 100% to something lower if we want
     _leafLoadFactor = _config.LeafLoadFactor;
     _internalBranchFactor = _config.InternalBranchFactor;
 }
Exemplo n.º 10
0
        /// <summary>
        /// Opens an existing tree in the page store
        /// </summary>
        /// <param name="pageStore"></param>
        /// <param name="rootPageId">The page ID of the BTree root node</param>
        /// <param name="keySize"></param>
        /// <param name="dataSize"></param>
        /// <param name="profiler"></param>
        public BPlusTree(IPageStore pageStore, ulong rootPageId, int keySize = 8, int dataSize = 64, BrightstarProfiler profiler = null)
        {
            _config    = new BPlusTreeConfiguration(pageStore, keySize, dataSize, pageStore.PageSize);
            _pageStore = pageStore;
            var root = GetNode(rootPageId, profiler);

            _rootId = root.PageId;
        }
Exemplo n.º 11
0
        /// <summary>
        /// Creates a new tree in the page store
        /// </summary>
        /// <param name="txnId">The transaction id for the update</param>
        /// <param name="pageStore"></param>
        /// <param name="keySize">The size of the B+ tree's key (in bytes)</param>
        /// <param name="dataSize">The size of the values stored in leaf nodes (in bytes)</param>
        public BPlusTree(ulong txnId, IPageStore pageStore, int keySize = 8, int dataSize = 64)
        {
            _config    = new BPlusTreeConfiguration(pageStore, keySize, dataSize, pageStore.PageSize);
            _pageStore = pageStore;
            var root = MakeLeafNode(txnId);

            _rootId = root.PageId;
        }
Exemplo n.º 12
0
        public ulong Write(IPageStore pageStore, ulong transactionId, BrightstarProfiler profiler)
        {
            var targetConfiguration = new BPlusTreeConfiguration(pageStore, Configuration.KeySize,
                                                                 Configuration.ValueSize, Configuration.PageSize);
            var builder = new BPlusTreeBuilder(pageStore, targetConfiguration);

            return(builder.Build(transactionId, Scan(profiler), profiler));
        }
Exemplo n.º 13
0
        public void CreateSnapshot(string srcStoreLocation, string destStoreLocation,
                                   PersistenceType storePersistenceType, ulong commitPointId = StoreConstants.NullUlong)
        {
            Logging.LogInfo("Snapshot store {0} to new store {1} with persistence type {2}", srcStoreLocation,
                            destStoreLocation, storePersistenceType);
            if (_persistenceManager.DirectoryExists(destStoreLocation))
            {
                throw new StoreManagerException(destStoreLocation, "Store already exists");
            }

            // Open the source store for reading
            using (IStore srcStore = commitPointId == StoreConstants.NullUlong
                                         ? OpenStore(srcStoreLocation, true)
                                         : OpenStore(srcStoreLocation, commitPointId))
            {
                // Create the directory for the destination store
                _persistenceManager.CreateDirectory(destStoreLocation);

                // Create empty data file
                var dataFilePath = Path.Combine(destStoreLocation, DataFileName);
                _persistenceManager.CreateFile(dataFilePath);

                // Create initial master file
                var destStoreConfiguration = _storeConfiguration.Clone() as StoreConfiguration;
                destStoreConfiguration.PersistenceType = storePersistenceType;
                var destMasterFile = MasterFile.Create(_persistenceManager, destStoreLocation, destStoreConfiguration,
                                                       Guid.NewGuid());

                // Copy resource files from source store
                var resourceFilePath = Path.Combine(destStoreLocation, ResourceFileName);
                _persistenceManager.CopyFile(Path.Combine(srcStoreLocation, ResourceFileName), resourceFilePath, true);

                // Initialize data page store
                IPageStore destPageStore = null;
                switch (storePersistenceType)
                {
                case PersistenceType.AppendOnly:
                    destPageStore = new AppendOnlyFilePageStore(_persistenceManager, dataFilePath, PageSize, false,
                                                                _storeConfiguration.DisableBackgroundWrites);
                    break;

                case PersistenceType.Rewrite:
                    destPageStore = new BinaryFilePageStore(_persistenceManager, dataFilePath, PageSize, false, 0, 1, _storeConfiguration.DisableBackgroundWrites);
                    break;

                default:
                    throw new BrightstarInternalException("Unrecognized target store type: " + storePersistenceType);
                }

                // Copy Data
                ulong destStorePageId = srcStore.CopyTo(destPageStore, 1ul);

                destPageStore.Close();

                destMasterFile.AppendCommitPoint(
                    new CommitPoint(destStorePageId, 1ul, DateTime.UtcNow, Guid.Empty), true);
            }
        }
Exemplo n.º 14
0
 /// <summary>
 /// Creates a new tree in the page store
 /// </summary>
 /// <param name="txnId">The transaction id for the update</param>
 /// <param name="pageStore"></param>
 /// <param name="keySize">The size of the B+ tree's key (in bytes)</param>
 /// <param name="dataSize">The size of the values stored in leaf nodes (in bytes)</param>
 public BPlusTree(ulong txnId, IPageStore pageStore, int keySize = 8, int dataSize = 64) 
 {
     _config = new BPlusTreeConfiguration(pageStore, keySize, dataSize, pageStore.PageSize);
     _pageStore = pageStore;
     var root = MakeLeafNode(txnId);
     _rootId = root.PageId;
     _nodeCache = new WeakReferenceNodeCache();
     _nodeCache.Add(root);
 }
Exemplo n.º 15
0
 public ulong Write(IPageStore pageStore, ulong transactionId, BrightstarProfiler profiler)
 {
     using (profiler.Step("RelatedResourceIndex.Write"))
     {
         var indexBuilder = new BPlusTreeBuilder(pageStore, Configuration);
         return(indexBuilder.Build(transactionId, WritePredicateIndexes(pageStore, transactionId, profiler),
                                   profiler));
     }
 }
Exemplo n.º 16
0
 public ResourceTable(IPageStore pageStore)
 {
     _pageStore      = pageStore;
     _segmentSize    = CalculateSegmentSize(_pageStore.PageSize);
     _pointerSegment = (byte)((_pageStore.PageSize - 8) / _segmentSize);
     _writeLock      = new object();
     _nextSegment    = _pointerSegment;
     _currentPage    = 0;
 }
Exemplo n.º 17
0
 /// <summary>
 /// Opens an existing tree in the page store
 /// </summary>
 /// <param name="pageStore"></param>
 /// <param name="rootPageId">The page ID of the BTree root node</param>
 /// <param name="keySize"></param>
 /// <param name="dataSize"></param>
 /// <param name="profiler"></param>
 public BPlusTree(IPageStore pageStore, ulong rootPageId, int keySize = 8, int dataSize = 64, BrightstarProfiler profiler = null)
 {
     _config = new BPlusTreeConfiguration(keySize, dataSize, pageStore.PageSize);
     _pageStore = pageStore;
     _modifiedNodes = new Dictionary<ulong, INode>();
     _nodeCache = new WeakReferenceNodeCache();
     _root = GetNode(rootPageId, profiler);
     _nodeCache.Add(_root);
 }
Exemplo n.º 18
0
 public PageService(
     IPageStore pageStore,
     ICultureStore cultureStore,
     IMapper mapper)
 {
     _pageStore    = pageStore;
     _cultureStore = cultureStore;
     _mapper       = mapper;
 }
Exemplo n.º 19
0
 public ResourceTable(IPageStore pageStore)
 {
     _pageStore = pageStore;
     _segmentSize = CalculateSegmentSize(_pageStore.PageSize);
     _pointerSegment = (byte) ((_pageStore.PageSize - 8)/_segmentSize);
     _writeLock = new object();
     _nextSegment = _pointerSegment;
     _currentPage = 0;
 }
Exemplo n.º 20
0
 /// <summary>
 /// Opens an existing tree in the page store
 /// </summary>
 /// <param name="pageStore"></param>
 /// <param name="rootPageId">The page ID of the BTree root node</param>
 /// <param name="keySize"></param>
 /// <param name="dataSize"></param>
 /// <param name="profiler"></param>
 public BPlusTree(IPageStore pageStore, ulong rootPageId, int keySize = 8, int dataSize = 64, BrightstarProfiler profiler = null)
 {
     _config        = new BPlusTreeConfiguration(keySize, dataSize, pageStore.PageSize);
     _pageStore     = pageStore;
     _modifiedNodes = new Dictionary <ulong, INode>();
     _nodeCache     = new WeakReferenceNodeCache();
     _root          = GetNode(rootPageId, profiler);
     _nodeCache.Add(_root);
 }
 public ConcurrentGraphIndex(IPageStore pageStore, ulong rootPage, BrightstarProfiler profiler)
 {
     using (profiler.Step("Load ConcurrentGraphIndex"))
     {
         _pageStore     = pageStore;
         _graphUriIndex = new Dictionary <string, int>();
         _allEntries    = new List <GraphIndexEntry>();
         Read(rootPage, profiler);
     }
 }
Exemplo n.º 22
0
        /// <summary>
        /// Creates a new tree in the page store
        /// </summary>
        /// <param name="txnId">The transaction id for the update</param>
        /// <param name="pageStore"></param>
        /// <param name="keySize">The size of the B+ tree's key (in bytes)</param>
        /// <param name="dataSize">The size of the values stored in leaf nodes (in bytes)</param>
        public BPlusTree(ulong txnId, IPageStore pageStore, int keySize = 8, int dataSize = 64)
        {
            _config    = new BPlusTreeConfiguration(pageStore, keySize, dataSize, pageStore.PageSize);
            _pageStore = pageStore;
            var root = MakeLeafNode(txnId);

            _rootId    = root.PageId;
            _nodeCache = new WeakReferenceNodeCache();
            _nodeCache.Add(root);
        }
Exemplo n.º 23
0
 public ConcurrentGraphIndex(IPageStore pageStore, ulong rootPage, BrightstarProfiler profiler)
 {
     using (profiler.Step("Load ConcurrentGraphIndex"))
     {
         _pageStore = pageStore;
         _graphUriIndex = new Dictionary<string, int>();
         _allEntries = new List<GraphIndexEntry>();
         Read(rootPage, profiler);
     }
 }
Exemplo n.º 24
0
 /// <summary>
 /// Creates a new tree in the page store
 /// </summary>
 /// <param name="pageStore"></param>
 /// <param name="keySize">The size of the B+ tree's key (in bytes)</param>
 /// <param name="dataSize">The size of the values stored in leaf nodes (in bytes)</param>
 public BPlusTree(IPageStore pageStore, int keySize = 8, int dataSize = 64)
 {
     _config        = new BPlusTreeConfiguration(keySize, dataSize, pageStore.PageSize);
     _pageStore     = pageStore;
     _modifiedNodes = new Dictionary <ulong, INode>();
     _root          = new LeafNode(pageStore.Create(), 0, 0, _config);
     _nodeCache     = new WeakReferenceNodeCache();
     _modifiedNodes[_root.PageId] = _root;
     _nodeCache.Add(_root);
 }
Exemplo n.º 25
0
 /// <summary>
 /// Creates a new tree in the page store
 /// </summary>
 /// <param name="pageStore"></param>
 /// <param name="keySize">The size of the B+ tree's key (in bytes)</param>
 /// <param name="dataSize">The size of the values stored in leaf nodes (in bytes)</param>
 public BPlusTree(IPageStore pageStore, int keySize = 8, int dataSize = 64) 
 {
     _config = new BPlusTreeConfiguration(keySize, dataSize, pageStore.PageSize);
     _pageStore = pageStore;
     _modifiedNodes = new Dictionary<ulong, INode>();
     _root = new LeafNode(pageStore.Create(), 0, 0, _config);
     _nodeCache = new WeakReferenceNodeCache();
     _modifiedNodes[_root.PageId] = _root;
     _nodeCache.Add(_root);
 }
        public void Setup()
        {
            var databaseFactory = SetupMock <IDatabaseFactory>();

            _database = databaseFactory.Open(null);

            _pageStore = SetupMock <IPageStore>();

            _accessorFactory = new AccessorFactory();
        }
Exemplo n.º 27
0
 private IEnumerable <KeyValuePair <byte[], byte []> > WritePredicateIndexes(IPageStore pageStore, ulong transactionId, BrightstarProfiler profiler)
 {
     foreach (var entry in EnumeratePredicateIndexes(profiler))
     {
         var   predicateId         = entry.Key;
         var   builder             = new BPlusTreeBuilder(pageStore, entry.Value.Configuration);
         ulong newPredicateIndexId = builder.Build(transactionId, entry.Value.Scan(profiler), profiler);
         yield return(new KeyValuePair <byte[], byte[]>(BitConverter.GetBytes(predicateId), BitConverter.GetBytes(newPredicateIndexId)));
     }
 }
Exemplo n.º 28
0
 public Store(string storeLocation, IPageStore dataPageStore, IResourceTable resourceTable)
 {
     DirectoryPath = storeLocation;
     _pageStore = dataPageStore;
     _graphIndex = new ConcurrentGraphIndex(_pageStore);
     _subjectRelatedResourceIndex = new RelatedResourceIndex.RelatedResourceIndex(_currentTxnId + 1, _pageStore);
     _objectRelatedResourceIndex = new RelatedResourceIndex.RelatedResourceIndex(_currentTxnId + 1, _pageStore);
     _prefixManager = new PrefixManager(_pageStore);
     _resourceTable = resourceTable;
     _resourceIndex = new ResourceIndex.ResourceIndex(1, _pageStore, _resourceTable);
 }
Exemplo n.º 29
0
 public Store(string storeLocation, IPageStore dataPageStore, IResourceTable resourceTable)
 {
     DirectoryPath = storeLocation;
     _pageStore    = dataPageStore;
     _graphIndex   = new ConcurrentGraphIndex(_pageStore);
     _subjectRelatedResourceIndex = new RelatedResourceIndex.RelatedResourceIndex(_currentTxnId + 1, _pageStore);
     _objectRelatedResourceIndex  = new RelatedResourceIndex.RelatedResourceIndex(_currentTxnId + 1, _pageStore);
     _prefixManager = new PrefixManager(_pageStore);
     _resourceTable = resourceTable;
     _resourceIndex = new ResourceIndex.ResourceIndex(1, _pageStore, _resourceTable);
 }
Exemplo n.º 30
0
 public Store(string storeLocation, IPageStore dataPageStore, IResourceTable resourceTable, ulong storePageId, BrightstarProfiler profiler)
 {
     using (profiler.Step("Load Store"))
     {
         DirectoryPath  = storeLocation;
         _pageStore     = dataPageStore;
         _resourceTable = resourceTable;
         var storePage = _pageStore.Retrieve(storePageId, profiler);
         Load(storePage, profiler);
     }
 }
Exemplo n.º 31
0
 public Store(string storeLocation, IPageStore dataPageStore, IResourceTable resourceTable, ulong storePageId, BrightstarProfiler profiler)
 {
     using (profiler.Step("Load Store"))
     {
         DirectoryPath = storeLocation;
         _pageStore = dataPageStore;
         _resourceTable = resourceTable;
         var storePage = _pageStore.Retrieve(storePageId, profiler);
         Load(storePage, profiler);
     }
 }
Exemplo n.º 32
0
        /// <summary>
        /// Opens an existing resource index from the specified page store
        /// </summary>
        /// <param name="pageStore"></param>
        /// <param name="resourceTable">The table used to store long resource strings</param>
        /// <param name="rootNodeId">The ID of the page that contains the root node of the resource index</param>
        public ResourceIndex(IPageStore pageStore, IResourceTable resourceTable, ulong rootNodeId) : base(pageStore, rootNodeId)
        {
            //_resourceCache = new ConcurrentResourceCache();
            //_resourceIdCache = new ConcurrentResourceIdCache();
            _resourceCache= new LruResourceCache();
            _resourceIdCache = new LruResourceIdCache();
            _resourceStore = new ResourceStore(resourceTable);
#if DEBUG_BTREE
            Configuration.DebugId = "ResIx";
            Logging.LogDebug("Opened new {0} BTree with root page {1}", Configuration.DebugId, rootNodeId);
#endif
        }
Exemplo n.º 33
0
        /// <summary>
        /// Creates a new empty resource index in the specified page store
        /// </summary>
        /// <param name="txnId"></param>
        /// <param name="pageStore"></param>
        /// <param name="resourceTable"></param>
        public ResourceIndex(ulong txnId, IPageStore pageStore, IResourceTable resourceTable)  : base(txnId, pageStore)
        {
            //_resourceCache = new ConcurrentResourceCache();
            //_resourceIdCache = new ConcurrentResourceIdCache();
            _resourceCache = new LruResourceCache();
            _resourceIdCache = new LruResourceIdCache();
            _resourceStore = new ResourceStore(resourceTable);
#if DEBUG_BTREE
            Configuration.DebugId = "ResIx";
            Logging.LogDebug("Created new {0} BTree with root page {1}", Configuration.DebugId, RootId);
#endif
        }
        public IStore CreateStore(string storeLocation, PersistenceType storePersistenceType, bool readOnly, bool withTransactionLogging)
        {
            Logging.LogInfo("Create Store {0} with persistence type {1}", storeLocation, storePersistenceType);
            if (_persistenceManager.DirectoryExists(storeLocation))
            {
                throw new StoreManagerException(storeLocation, "Store already exists");
            }

            _persistenceManager.CreateDirectory(storeLocation);

            var dataFilePath = Path.Combine(storeLocation, DataFileName);

            _persistenceManager.CreateFile(dataFilePath);

            var resourceFilePath = Path.Combine(storeLocation, ResourceFileName);

            _persistenceManager.CreateFile(resourceFilePath);

            var targetStoreConfiguration = _storeConfiguration.Clone() as StoreConfiguration;

            targetStoreConfiguration.PersistenceType = storePersistenceType;
            MasterFile.Create(_persistenceManager, storeLocation, targetStoreConfiguration, Guid.NewGuid());
            IPageStore dataPageStore = null;

            switch (storePersistenceType)
            {
            case PersistenceType.AppendOnly:
                dataPageStore = new AppendOnlyFilePageStore(_persistenceManager, dataFilePath, PageSize, false, _storeConfiguration.DisableBackgroundWrites);
                break;

            case PersistenceType.Rewrite:
                dataPageStore = new BinaryFilePageStore(_persistenceManager, dataFilePath, PageSize, false, 0, 1, _storeConfiguration.DisableBackgroundWrites);
                break;
            }

            IPageStore resourcePageStore = new AppendOnlyFilePageStore(_persistenceManager, resourceFilePath, PageSize, false, _storeConfiguration.DisableBackgroundWrites);
            var        resourceTable     = new ResourceTable(resourcePageStore);

            using (var store = new Store(storeLocation, dataPageStore, resourceTable))
            {
                store.Commit(Guid.Empty);
                store.Close();
            }

            if (withTransactionLogging)
            {
                _persistenceManager.CreateFile(Path.Combine(storeLocation, "transactionheaders.bs"));
                _persistenceManager.CreateFile(Path.Combine(storeLocation, "transactions.bs"));
            }

            Logging.LogInfo("Store created at {0}", storeLocation);
            return(OpenStore(storeLocation, readOnly));
        }
Exemplo n.º 35
0
        /// <summary>
        /// Creates a new empty resource index in the specified page store
        /// </summary>
        /// <param name="txnId"></param>
        /// <param name="pageStore"></param>
        /// <param name="resourceTable"></param>
        public ResourceIndex(ulong txnId, IPageStore pageStore, IResourceTable resourceTable)  : base(txnId, pageStore)
        {
            //_resourceCache = new ConcurrentResourceCache();
            //_resourceIdCache = new ConcurrentResourceIdCache();
            _resourceCache   = new LruResourceCache();
            _resourceIdCache = new LruResourceIdCache();
            _resourceStore   = new ResourceStore(resourceTable);
#if DEBUG_BTREE
            Configuration.DebugId = "ResIx";
            Logging.LogDebug("Created new {0} BTree with root page {1}", Configuration.DebugId, RootId);
#endif
        }
Exemplo n.º 36
0
        /// <summary>
        /// Opens an existing resource index from the specified page store
        /// </summary>
        /// <param name="pageStore"></param>
        /// <param name="resourceTable">The table used to store long resource strings</param>
        /// <param name="rootNodeId">The ID of the page that contains the root node of the resource index</param>
        public ResourceIndex(IPageStore pageStore, IResourceTable resourceTable, ulong rootNodeId) : base(pageStore, rootNodeId)
        {
            //_resourceCache = new ConcurrentResourceCache();
            //_resourceIdCache = new ConcurrentResourceIdCache();
            _resourceCache   = new LruResourceCache();
            _resourceIdCache = new LruResourceIdCache();
            _resourceStore   = new ResourceStore(resourceTable);
#if DEBUG_BTREE
            Configuration.DebugId = "ResIx";
            Logging.LogDebug("Opened new {0} BTree with root page {1}", Configuration.DebugId, rootNodeId);
#endif
        }
 public BPlusTreeConfiguration(IPageStore pageStore, int keySize, int valueSize, int pageSize)
 {
     PageStore                    = pageStore;
     KeySize                      = keySize;
     ValueSize                    = valueSize;
     PageSize                     = pageSize;
     InternalBranchFactor         = (PageSize - InternalNodeHeaderSize - NodePointerSize) / (KeySize + NodePointerSize);
     InternalSplitIndex           = InternalBranchFactor / 2;
     InternalNodeChildStartOffset = InternalNodeHeaderSize + (InternalBranchFactor * KeySize);
     LeafLoadFactor               = (PageSize - LeafNodeHeaderSize) / (KeySize + ValueSize + 1); // Each value requires ValueSize+1 bytes, extra byte is for the value length
     LeafSplitIndex               = LeafLoadFactor / 2;
     LeafDataStartOffset          = LeafNodeHeaderSize + (KeySize * LeafLoadFactor);
 }
        public ulong Write(IPageStore pageStore, ulong transactionId, BrightstarProfiler profiler)
        {
            IPage rootPage    = pageStore.Create(transactionId);
            IPage currentPage = rootPage;
            var   buff        = new byte[pageStore.PageSize];
            int   offset      = 0;

            foreach (var graphIndexEntry in _allEntries)
            {
                int entrySize = String.IsNullOrEmpty(graphIndexEntry.Uri)
                                   ? 1
                                   : 3 + Encoding.UTF8.GetByteCount(graphIndexEntry.Uri);
                if (offset + entrySize > pageStore.PageSize - 9)
                {
                    IPage nextPage = pageStore.Create(transactionId);
                    buff[offset] = 0xff;
                    BitConverter.GetBytes(nextPage.Id).CopyTo(buff, pageStore.PageSize - 8);
                    currentPage.SetData(buff);
                    currentPage = nextPage;
                    offset      = 0;
                }
                else
                {
                    if (String.IsNullOrEmpty(graphIndexEntry.Uri))
                    {
                        // Record an empty entry
                        buff[offset++] = 2;
                    }
                    else
                    {
                        if (graphIndexEntry.IsDeleted)
                        {
                            buff[offset++] = 1;
                        }
                        else
                        {
                            buff[offset++] = 0;
                        }
                        var uriBytes = Encoding.UTF8.GetBytes(graphIndexEntry.Uri);
                        BitConverter.GetBytes(uriBytes.Length).CopyTo(buff, offset);
                        offset += 4;
                        uriBytes.CopyTo(buff, offset);
                        offset += uriBytes.Length;
                    }
                }
            }
            buff[offset] = 0xff;
            BitConverter.GetBytes(0ul).CopyTo(buff, pageStore.PageSize - 8);
            currentPage.SetData(buff);
            return(rootPage.Id);
        }
Exemplo n.º 39
0
        /// <summary>
        /// Copies all the indexes from this store to the specified target page store
        /// </summary>
        /// <param name="pageStore">The page store to copy to</param>
        /// <param name="txnId">The transaction Id to use in the target page store for the write</param>
        /// <returns>The ID of the root store page in the target page store</returns>
        public ulong CopyTo(IPageStore pageStore, ulong txnId)
        {
            var graphIndexId    = _graphIndex.Write(pageStore, txnId, null);
            var prefixManagerId = _prefixManager.Write(pageStore, txnId, null);
            var resourceIndexId = _resourceIndex.Write(pageStore, txnId, null);
            var subjectRelatedResourceIndexId = _subjectRelatedResourceIndex.Write(pageStore, txnId, null);
            var objectRelatedResourceIndexId  = _objectRelatedResourceIndex.Write(pageStore, txnId, null);
            var buff = CreateStoreHeader(graphIndexId, prefixManagerId, resourceIndexId, subjectRelatedResourceIndexId,
                                         objectRelatedResourceIndexId);
            var storePage = pageStore.Create(txnId);

            storePage.SetData(buff);
            storePage.SetData(buff, 0, 128);
            pageStore.Commit(txnId, null);
            return(storePage.Id);
        }
Exemplo n.º 40
0
        public ulong Write(IPageStore pageStore, ulong transactionId, BrightstarProfiler profiler)
        {
            IPage startPage   = pageStore.Create(transactionId);
            IPage currentPage = startPage;

            byte[] buff   = new byte[pageStore.PageSize];
            int    offset = 0;

            foreach (var entry in _shortValueMappings)
            {
                byte[] encodedPrefix = Encoding.UTF8.GetBytes(entry.Key);
                byte[] encodedUri    = Encoding.UTF8.GetBytes(entry.Value);
                int    totalLength   = encodedUri.Length + encodedPrefix.Length + 4;
                if (offset + totalLength > (pageStore.PageSize - 10))
                {
                    // Not enough room for the entry and the next page pointer
                    // So create a new page for this entry and write a pointer to it
                    // onto the current page
                    IPage nextPage = pageStore.Create(transactionId);
                    BitConverter.GetBytes(ushort.MaxValue).CopyTo(buff, offset);
                    offset += 2;
                    BitConverter.GetBytes(nextPage.Id).CopyTo(buff, offset);
                    currentPage.SetData(buff);
                    currentPage = nextPage;
                    buff        = new byte[pageStore.PageSize];
                    offset      = 0;
                }
                BitConverter.GetBytes((ushort)encodedPrefix.Length).CopyTo(buff, offset);
                offset += 2;
                encodedPrefix.CopyTo(buff, offset);
                offset += encodedPrefix.Length;
                BitConverter.GetBytes((ushort)encodedUri.Length).CopyTo(buff, offset);
                offset += 2;
                encodedUri.CopyTo(buff, offset);
                offset += encodedUri.Length;
            }
            // Write the end marker
            BitConverter.GetBytes(ushort.MaxValue).CopyTo(buff, offset);
            offset += 2;
            BitConverter.GetBytes(0ul).CopyTo(buff, offset);
            currentPage.SetData(buff);
            return(startPage.Id);
        }
Exemplo n.º 41
0
 private void BuildAndScan(IPageStore pageStore, string pageStoreName, PersistenceType persistenceType, int keyCount)
 {
     var config = new BPlusTreeConfiguration(8, 64, pageStore.PageSize);
     var builder = new BPlusTreeBuilder(pageStore, config);
     var treeRoot = builder.Build(1, _testOrderedValues.Take(keyCount));
     var treeBeforeSave = new BPlusTree(pageStore, treeRoot);
     treeBeforeSave.Save(1, null);
     //ValidateScan(treeBeforeSave.Scan(null), keyCount, pageStoreName + " before save");
     pageStore.Commit(1, null);
     pageStore.Close();
     
    
     using(var ps = TestUtils.OpenPageStore(pageStoreName, true, persistenceType, 1))
     {
         var tree = new BPlusTree(ps, treeRoot);
         tree.DumpStructure();
         ValidateScan(tree.Scan(null), keyCount, pageStoreName + " after save");
         ValidateSearch(tree, keyCount, pageStoreName + "after save");
     }
 }
Exemplo n.º 42
0
        private void BuildAndScan(IPageStore pageStore, string pageStoreName, PersistenceType persistenceType, int keyCount)
        {
            var config         = new BPlusTreeConfiguration(8, 64, pageStore.PageSize);
            var builder        = new BPlusTreeBuilder(pageStore, config);
            var treeRoot       = builder.Build(1, _testOrderedValues.Take(keyCount));
            var treeBeforeSave = new BPlusTree(pageStore, treeRoot);

            treeBeforeSave.Save(1, null);
            //ValidateScan(treeBeforeSave.Scan(null), keyCount, pageStoreName + " before save");
            pageStore.Commit(1, null);
            pageStore.Close();


            using (var ps = TestUtils.OpenPageStore(pageStoreName, true, persistenceType, 1))
            {
                var tree = new BPlusTree(ps, treeRoot);
                tree.DumpStructure();
                ValidateScan(tree.Scan(null), keyCount, pageStoreName + " after save");
                ValidateSearch(tree, keyCount, pageStoreName + "after save");
            }
        }
Exemplo n.º 43
0
        public static void Main(string[] args)
        {
            Application.Initialize(ConfigurationHelper.ConfigureDependencies);
            try
            {
                Store = Application.Current.Container.GetInstance <IPageStore>();

                var injectedEngine = Application.Current.Container.GetInstance <IEngine>();
                var basketPage     = Store.Pages.OfType <BasketPage>().FirstOrDefault();
                var registerPage   = Store.Pages.OfType <RegisterPage>().FirstOrDefault();

                var basketController   = new BasketController(basketPage, injectedEngine);
                var registerController = new RegisterController(registerPage, injectedEngine);

                basketController.Index();
                registerController.Index();

                Console.ReadKey();
            }
            catch (Exception ex)
            {
                Console.WriteLine("There was an exception of {0} type", ex.GetType());
            }
        }
Exemplo n.º 44
0
 public ulong Write(IPageStore pageStore, ulong transactionId, BrightstarProfiler profiler)
 {
     using (profiler.Step("RelatedResourceIndex.Write"))
     {
         var targetConfiguration = new BPlusTreeConfiguration(pageStore, Configuration.KeySize,
                                                              Configuration.ValueSize, Configuration.PageSize);
         var indexBuilder = new BPlusTreeBuilder(pageStore, targetConfiguration);
         return indexBuilder.Build(transactionId, WritePredicateIndexes(pageStore, transactionId, profiler),
                                   profiler);
     }
 }
Exemplo n.º 45
0
 private IEnumerable<KeyValuePair<byte[], byte []>> WritePredicateIndexes(IPageStore pageStore, ulong transactionId, BrightstarProfiler profiler)
 {
     foreach (var entry in EnumeratePredicateIndexes(profiler))
     {
         var predicateId = entry.Key;
         var targetConfiguration = new BPlusTreeConfiguration(pageStore, entry.Value.Configuration.KeySize,
                                                              entry.Value.Configuration.ValueSize,
                                                              entry.Value.Configuration.PageSize);
         var builder = new BPlusTreeBuilder(pageStore, targetConfiguration);
         ulong newPredicateIndexId = builder.Build(transactionId, entry.Value.Scan(profiler), profiler);
         yield return new KeyValuePair<byte[], byte[]>(BitConverter.GetBytes(predicateId), BitConverter.GetBytes(newPredicateIndexId));
     }
 }
 public PredicateRelatedResourceIndex(IPageStore pageStore, ulong rootPageId) : base(pageStore, rootPageId, RelatedResourceIndex.KeySize, 0){}
 public PredicateRelatedResourceIndex(IPageStore pageStore) : base(pageStore, RelatedResourceIndex.KeySize, 0){}
Exemplo n.º 48
0
 public ulong Write(IPageStore pageStore, ulong  transactionId, BrightstarProfiler profiler)
 {
     var builder = new BPlusTreeBuilder(pageStore, Configuration);
     return builder.Build(transactionId, Scan(profiler), profiler);
 }
Exemplo n.º 49
0
 public RelatedResourceIndex(ulong txnId, IPageStore pageStore): base(txnId, pageStore, 8, 8)
 {
     _predicateIndexes = new Dictionary<ulong, PredicateRelatedResourceIndex>();
 }
Exemplo n.º 50
0
 /// <summary>
 /// Copies all the indexes from this store to the specified target page store
 /// </summary>
 /// <param name="pageStore">The page store to copy to</param>
 /// <param name="txnId">The transaction Id to use in the target page store for the write</param>
 /// <returns>The ID of the root store page in the target page store</returns>
 public ulong CopyTo(IPageStore pageStore, ulong txnId)
 {
     var graphIndexId = _graphIndex.Write(pageStore, txnId, null);
     var prefixManagerId = _prefixManager.Write(pageStore, txnId, null);
     var resourceIndexId = _resourceIndex.Write(pageStore, txnId, null);
     var subjectRelatedResourceIndexId = _subjectRelatedResourceIndex.Write(pageStore, txnId, null);
     var objectRelatedResourceIndexId = _objectRelatedResourceIndex.Write(pageStore, txnId, null);
     var buff = CreateStoreHeader(graphIndexId, prefixManagerId, resourceIndexId, subjectRelatedResourceIndexId,
                                  objectRelatedResourceIndexId);
     var storePage = pageStore.Create(txnId);
     storePage.SetData(buff);
     storePage.SetData(buff, 0, 128);
     pageStore.Commit(txnId, null);
     return storePage.Id;
 }
Exemplo n.º 51
0
 public ulong Write(IPageStore pageStore, ulong  transactionId, BrightstarProfiler profiler)
 {
     var targetConfiguration = new BPlusTreeConfiguration(pageStore, Configuration.KeySize,
                                                          Configuration.ValueSize, Configuration.PageSize);
     var builder = new BPlusTreeBuilder(pageStore, targetConfiguration);
     return builder.Build(transactionId, Scan(profiler), profiler);
 }
Exemplo n.º 52
0
 private void TestBuildSingleLeafNode(IPageStore pageStore, string pageStoreName, PersistenceType persistenceType)
 {
     BuildAndScan(pageStore, pageStoreName, persistenceType, 20);
 }
Exemplo n.º 53
0
 public ulong Write(IPageStore pageStore, ulong transactionId, BrightstarProfiler profiler)
 {
     ulong startPageId = pageStore.Create();
     ulong currentPageId = startPageId;
     byte[] currentPage = new byte[pageStore.PageSize];
     int offset = 0;
     foreach (var entry in _shortValueMappings)
     {
         byte[] encodedPrefix = Encoding.UTF8.GetBytes(entry.Key);
         byte[] encodedUri = Encoding.UTF8.GetBytes(entry.Value);
         int totalLength = encodedUri.Length + encodedPrefix.Length + 4;
         if (offset + totalLength > (pageStore.PageSize - 10))
         {
             // Not enough room for the entry and the next page pointer
             // So create a new page for this entry and write a pointer to it
             // onto the current page
             ulong nextPage = pageStore.Create();
             BitConverter.GetBytes(ushort.MaxValue).CopyTo(currentPage, offset);
             offset += 2;
             BitConverter.GetBytes(nextPage).CopyTo(currentPage, offset);
             pageStore.Write(transactionId, currentPageId, currentPage, profiler: profiler);
             currentPageId = nextPage;
             currentPage = new byte[pageStore.PageSize];
             offset = 0;
         }
         BitConverter.GetBytes((ushort)encodedPrefix.Length).CopyTo(currentPage, offset);
         offset += 2;
         encodedPrefix.CopyTo(currentPage, offset);
         offset += encodedPrefix.Length;
         BitConverter.GetBytes((ushort)encodedUri.Length).CopyTo(currentPage, offset);
         offset += 2;
         encodedUri.CopyTo(currentPage, offset);
         offset += encodedUri.Length;
     }
     // Write the end marker
     BitConverter.GetBytes(ushort.MaxValue).CopyTo(currentPage, offset);
     offset += 2;
     BitConverter.GetBytes(0ul).CopyTo(currentPage, offset);
     pageStore.Write(transactionId, currentPageId, currentPage, profiler: profiler);
     return startPageId;
 }
Exemplo n.º 54
0
 /// <summary>
 /// Creates a new prefix manager that will write its content to the specified page store
 /// </summary>
 /// <param name="pageStore"></param>
 public PrefixManager(IPageStore pageStore)
 {
     _pageStore = pageStore;
 }
Exemplo n.º 55
0
 public PrefixManager(IPageStore pageStore, ulong startPageId, BrightstarProfiler profiler)
 {
     _pageStore = pageStore;
     var startPage = _pageStore.Retrieve(startPageId, profiler);
     Load(startPage, profiler);
 }
Exemplo n.º 56
0
 public PagesController(IPageStore pageStore)
 {
     this.pageStore = pageStore;
 }
Exemplo n.º 57
0
 public RelatedResourceIndex(IPageStore pageStore, ulong rootPageId, BrightstarProfiler profiler) : base(pageStore, rootPageId, 8, 8, profiler)
 {
     _predicateIndexes = new Dictionary<ulong, PredicateRelatedResourceIndex>();
 }
 public PredicateRelatedResourceIndex(ulong txnId, IPageStore pageStore) : base(txnId, pageStore, RelatedResourceIndex.KeySize, 0){}
Exemplo n.º 59
0
 public ConcurrentGraphIndex(IPageStore pageStore)
 {
     _pageStore = pageStore;
     _graphUriIndex = new Dictionary<string, int>();
     _allEntries= new List<GraphIndexEntry>();
 }
Exemplo n.º 60
0
 public ulong Write(IPageStore pageStore, ulong transactionId, BrightstarProfiler profiler)
 {
     ulong rootPage = pageStore.Create();
     ulong currentPage = rootPage;
     var buff = new byte[pageStore.PageSize];
     int offset = 0;
     foreach (var graphIndexEntry in _allEntries)
     {
         int entrySize = String.IsNullOrEmpty(graphIndexEntry.Uri)
                             ? 1
                             : 3 + Encoding.UTF8.GetByteCount(graphIndexEntry.Uri);
         if (offset + entrySize > pageStore.PageSize - 9)
         {
             ulong nextPage = pageStore.Create();
             buff[offset] = 0xff;
             BitConverter.GetBytes(nextPage).CopyTo(buff, pageStore.PageSize - 8);
             pageStore.Write(transactionId, currentPage, buff, profiler: profiler);
             currentPage = nextPage;
             offset = 0;
         }
         else
         {
             if (String.IsNullOrEmpty(graphIndexEntry.Uri))
             {
                 // Record an empty entry
                 buff[offset++] = 2;
             }
             else
             {
                 if (graphIndexEntry.IsDeleted)
                 {
                     buff[offset++] = 1;
                 }
                 else
                 {
                     buff[offset++] = 0;
                 }
                 var uriBytes = Encoding.UTF8.GetBytes(graphIndexEntry.Uri);
                 BitConverter.GetBytes(uriBytes.Length).CopyTo(buff, offset);
                 offset += 4;
                 uriBytes.CopyTo(buff, offset);
                 offset += uriBytes.Length;
             }
         }
     }
     buff[offset] = 0xff;
     BitConverter.GetBytes(0ul).CopyTo(buff, pageStore.PageSize - 8);
     pageStore.Write(transactionId, currentPage, buff, profiler: profiler);
     return rootPage;
 }