Ejemplo n.º 1
0
        public MuninnPageCache(PageSwapperFactory swapperFactory, MemoryAllocator memoryAllocator, int cachePageSize, PageCacheTracer pageCacheTracer, PageCursorTracerSupplier pageCursorTracerSupplier, VersionContextSupplier versionContextSupplier, JobScheduler jobScheduler)
        {
            VerifyHacks();
            VerifyCachePageSizeIsPowerOfTwo(cachePageSize);
            int maxPages = CalculatePageCount(memoryAllocator, cachePageSize);

            // Expose the total number of pages
            pageCacheTracer.MaxPages(maxPages);
            MemoryAllocationTracker memoryTracker = GlobalMemoryTracker.INSTANCE;

            this._pageCacheId              = _pageCacheIdCounter.incrementAndGet();
            this._swapperFactory           = swapperFactory;
            this._cachePageSize            = cachePageSize;
            this._keepFree                 = Math.Min(_pagesToKeepFree, maxPages / 2);
            this._pageCacheTracer          = pageCacheTracer;
            this._pageCursorTracerSupplier = pageCursorTracerSupplier;
            this._versionContextSupplier   = versionContextSupplier;
            this._printExceptionsOnClose   = true;
            long alignment = swapperFactory.RequiredBufferAlignment;

            this.VictimPage = VictimPageReference.GetVictimPage(cachePageSize, memoryTracker);
            this.Pages      = new PageList(maxPages, cachePageSize, memoryAllocator, new SwapperSet(), VictimPage, alignment);
            this._scheduler = jobScheduler;

            FreelistHead = new AtomicInteger();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Opens a new <seealso cref="PageCache"/> with the provided file system and config.
        /// </summary>
        /// <param name="fs"> <seealso cref="FileSystemAbstraction"/> to use for the <seealso cref="PageCache"/>. </param>
        /// <param name="overriddenConfig"> specific <seealso cref="PageCacheConfig"/> overriding config provided in <seealso cref="PageCacheRule"/>
        /// constructor, if any. </param>
        /// <returns> the opened <seealso cref="PageCache"/>. </returns>
        public virtual PageCache GetPageCache(FileSystemAbstraction fs, PageCacheConfig overriddenConfig)
        {
            CloseExistingPageCache();
            int?                     pageSize             = SelectConfig(BaseConfig.pageSize, overriddenConfig.PageSize, null);
            PageCacheTracer          cacheTracer          = SelectConfig(BaseConfig.tracer, overriddenConfig.Tracer, PageCacheTracer.NULL);
            PageCursorTracerSupplier cursorTracerSupplier = SelectConfig(BaseConfig.pageCursorTracerSupplier, overriddenConfig.PageCursorTracerSupplier, Org.Neo4j.Io.pagecache.tracing.cursor.PageCursorTracerSupplier_Fields.Null);

            SingleFilePageSwapperFactory factory = new SingleFilePageSwapperFactory();

            factory.Open(fs, Configuration.EMPTY);
            VersionContextSupplier contextSupplier = EmptyVersionContextSupplier.EMPTY;
            MemoryAllocator        mman            = MemoryAllocator.createAllocator(SelectConfig(BaseConfig.memory, overriddenConfig.Memory, "8 MiB"), new LocalMemoryTracker());

            InitializeJobScheduler();
            if (pageSize != null)
            {
                PageCache = new MuninnPageCache(factory, mman, pageSize.Value, cacheTracer, cursorTracerSupplier, contextSupplier, JobScheduler);
            }
            else
            {
                PageCache = new MuninnPageCache(factory, mman, cacheTracer, cursorTracerSupplier, contextSupplier, JobScheduler);
            }
            PageCachePostConstruct(overriddenConfig);
            return(PageCache);
        }
Ejemplo n.º 3
0
 public ReplicatedTransactionStateMachine(CommandIndexTracker commandIndexTracker, ReplicatedLockTokenStateMachine lockStateMachine, int maxBatchSize, LogProvider logProvider, PageCursorTracerSupplier pageCursorTracerSupplier, VersionContextSupplier versionContextSupplier)
 {
     this._commandIndexTracker   = commandIndexTracker;
     this._lockTokenStateMachine = lockStateMachine;
     this._maxBatchSize          = maxBatchSize;
     this._log = logProvider.getLog(this.GetType());
     this._pageCursorTracerSupplier = pageCursorTracerSupplier;
     this._versionContextSupplier   = versionContextSupplier;
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Construct configuring page cache factory </summary>
 /// <param name="fs"> fileSystem file system that page cache will be based on </param>
 /// <param name="config"> page swapper configuration </param>
 /// <param name="pageCacheTracer"> global page cache tracer </param>
 /// <param name="pageCursorTracerSupplier"> supplier of thread local (transaction local) page cursor tracer that will provide
 /// thread local page cache statistics </param>
 /// <param name="log"> page cache factory log </param>
 /// <param name="versionContextSupplier"> cursor context factory </param>
 /// <param name="scheduler"> job scheduler to execute page cache jobs </param>
 public ConfiguringPageCacheFactory(FileSystemAbstraction fs, Config config, PageCacheTracer pageCacheTracer, PageCursorTracerSupplier pageCursorTracerSupplier, Log log, VersionContextSupplier versionContextSupplier, JobScheduler scheduler)
 {
     this._fs = fs;
     this._versionContextSupplier = versionContextSupplier;
     this._config                   = config;
     this._pageCacheTracer          = pageCacheTracer;
     this._log                      = log;
     this._pageCursorTracerSupplier = pageCursorTracerSupplier;
     this._scheduler                = scheduler;
 }
Ejemplo n.º 5
0
        internal static PageCache PageCache(JobScheduler jobScheduler)
        {
            SingleFilePageSwapperFactory swapper = new SingleFilePageSwapperFactory();
            DefaultFileSystemAbstraction fs      = new DefaultFileSystemAbstraction();

            swapper.Open(fs, EMPTY);
            PageCursorTracerSupplier cursorTracerSupplier = Org.Neo4j.Io.pagecache.tracing.cursor.PageCursorTracerSupplier_Fields.Null;

            return(new MuninnPageCache(swapper, 100, NULL, cursorTracerSupplier, EmptyVersionContextSupplier.EMPTY, jobScheduler));
        }
Ejemplo n.º 6
0
 public BatchingTxApplier(int maxBatchSize, System.Func <TransactionIdStore> txIdStoreSupplier, System.Func <TransactionCommitProcess> commitProcessSupplier, Monitors monitors, PageCursorTracerSupplier pageCursorTracerSupplier, VersionContextSupplier versionContextSupplier, CommandIndexTracker commandIndexTracker, LogProvider logProvider)
 {
     this._maxBatchSize             = maxBatchSize;
     this._txIdStoreSupplier        = txIdStoreSupplier;
     this._commitProcessSupplier    = commitProcessSupplier;
     this._pageCursorTracerSupplier = pageCursorTracerSupplier;
     this._log     = logProvider.getLog(this.GetType());
     this._monitor = monitors.NewMonitor(typeof(PullRequestMonitor));
     this._versionContextSupplier = versionContextSupplier;
     this._commandIndexTracker    = commandIndexTracker;
 }
Ejemplo n.º 7
0
        /// <summary>
        /// Create a Tracers subsystem with the desired implementation, if it can be found and created.
        ///
        /// Otherwise the default implementation is used, and a warning is logged to the given StringLogger. </summary>
        /// <param name="desiredImplementationName"> The name of the desired {@link org.neo4j.kernel.monitoring.tracing
        /// .TracerFactory} implementation, as given by its <seealso cref="TracerFactory.getImplementationName()"/> method. </param>
        /// <param name="msgLog"> A <seealso cref="Log"/> for logging when the desired implementation cannot be created. </param>
        /// <param name="monitors"> the monitoring manager </param>
        /// <param name="jobScheduler"> a scheduler for async jobs </param>
        public Tracers(string desiredImplementationName, Log msgLog, Monitors monitors, JobScheduler jobScheduler, SystemNanoClock clock)
        {
            if ("null".Equals(desiredImplementationName, StringComparison.OrdinalIgnoreCase))
            {
                PageCursorTracerSupplier = DefaultPageCursorTracerSupplier.NULL;
                PageCacheTracer          = PageCacheTracer.NULL;
                TransactionTracer        = Org.Neo4j.Kernel.impl.transaction.tracing.TransactionTracer_Fields.Null;
                CheckPointTracer         = Org.Neo4j.Kernel.impl.transaction.tracing.CheckPointTracer_Fields.Null;
                LockTracer = LockTracer.NONE;
            }
            else
            {
                TracerFactory foundFactory = new DefaultTracerFactory();
                bool          found        = string.ReferenceEquals(desiredImplementationName, null);
                foreach (TracerFactory factory in Service.load(typeof(TracerFactory)))
                {
                    try
                    {
                        if (factory.ImplementationName.Equals(desiredImplementationName, StringComparison.OrdinalIgnoreCase))
                        {
                            foundFactory = factory;
                            found        = true;
                            break;
                        }
                    }
                    catch (Exception e)
                    {
                        msgLog.Warn("Failed to instantiate desired tracer implementations '" + desiredImplementationName + "'", e);
                    }
                }

                if (!found)
                {
                    msgLog.Warn("Using default tracer implementations instead of '%s'", desiredImplementationName);
                }

                PageCursorTracerSupplier = foundFactory.CreatePageCursorTracerSupplier(monitors, jobScheduler);
                PageCacheTracer          = foundFactory.CreatePageCacheTracer(monitors, jobScheduler, clock, msgLog);
                TransactionTracer        = foundFactory.CreateTransactionTracer(monitors, jobScheduler);
                CheckPointTracer         = foundFactory.CreateCheckPointTracer(monitors, jobScheduler);
                LockTracer = foundFactory.CreateLockTracer(monitors, jobScheduler);
            }
        }
Ejemplo n.º 8
0
        public CoreStateMachinesModule(MemberId myself, PlatformModule platformModule, File clusterStateDirectory, Config config, RaftReplicator replicator, RaftMachine raftMachine, Dependencies dependencies, LocalDatabase localDatabase)
        {
            StateStorage <IdAllocationState>        idAllocationState;
            StateStorage <ReplicatedLockTokenState> lockTokenState;
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.kernel.lifecycle.LifeSupport life = platformModule.life;
            LifeSupport life = platformModule.Life;
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.io.fs.FileSystemAbstraction fileSystem = platformModule.fileSystem;
            FileSystemAbstraction fileSystem  = platformModule.FileSystem;
            LogService            logging     = platformModule.Logging;
            LogProvider           logProvider = logging.InternalLogProvider;

            lockTokenState = life.Add(new DurableStateStorage <>(fileSystem, clusterStateDirectory, LOCK_TOKEN_NAME, new ReplicatedLockTokenState.Marshal(new MemberId.Marshal()), config.Get(replicated_lock_token_state_size), logProvider));

            idAllocationState = life.Add(new DurableStateStorage <>(fileSystem, clusterStateDirectory, ID_ALLOCATION_NAME, new IdAllocationState.Marshal(), config.Get(id_alloc_state_size), logProvider));

            ReplicatedIdAllocationStateMachine idAllocationStateMachine = new ReplicatedIdAllocationStateMachine(idAllocationState);

            IDictionary <IdType, int> allocationSizes = GetIdTypeAllocationSizeFromConfig(config);

            ReplicatedIdRangeAcquirer idRangeAcquirer = new ReplicatedIdRangeAcquirer(replicator, idAllocationStateMachine, allocationSizes, myself, logProvider);

            IdTypeConfigurationProvider = new EnterpriseIdTypeConfigurationProvider(config);
            CommandIndexTracker commandIndexTracker = dependencies.SatisfyDependency(new CommandIndexTracker());

            FreeIdCondition         = new IdReusabilityCondition(commandIndexTracker, raftMachine, myself);
            this.IdGeneratorFactory = CreateIdGeneratorFactory(fileSystem, idRangeAcquirer, logProvider, IdTypeConfigurationProvider);

            TokenRegistry relationshipTypeTokenRegistry = new TokenRegistry(Org.Neo4j.Kernel.impl.core.TokenHolder_Fields.TYPE_RELATIONSHIP_TYPE);

            System.Func <StorageEngine>           storageEngineSupplier       = () => localDatabase.DataSource().DependencyResolver.resolveDependency(typeof(StorageEngine));
            ReplicatedRelationshipTypeTokenHolder relationshipTypeTokenHolder = new ReplicatedRelationshipTypeTokenHolder(relationshipTypeTokenRegistry, replicator, this.IdGeneratorFactory, storageEngineSupplier);

            TokenRegistry propertyKeyTokenRegistry = new TokenRegistry(Org.Neo4j.Kernel.impl.core.TokenHolder_Fields.TYPE_PROPERTY_KEY);
            ReplicatedPropertyKeyTokenHolder propertyKeyTokenHolder = new ReplicatedPropertyKeyTokenHolder(propertyKeyTokenRegistry, replicator, this.IdGeneratorFactory, storageEngineSupplier);

            TokenRegistry labelTokenRegistry            = new TokenRegistry(Org.Neo4j.Kernel.impl.core.TokenHolder_Fields.TYPE_LABEL);
            ReplicatedLabelTokenHolder labelTokenHolder = new ReplicatedLabelTokenHolder(labelTokenRegistry, replicator, this.IdGeneratorFactory, storageEngineSupplier);

            ReplicatedLockTokenStateMachine replicatedLockTokenStateMachine = new ReplicatedLockTokenStateMachine(lockTokenState);

            VersionContextSupplier      versionContextSupplier = platformModule.VersionContextSupplier;
            ReplicatedTokenStateMachine labelTokenStateMachine = new ReplicatedTokenStateMachine(labelTokenRegistry, logProvider, versionContextSupplier);

            ReplicatedTokenStateMachine propertyKeyTokenStateMachine = new ReplicatedTokenStateMachine(propertyKeyTokenRegistry, logProvider, versionContextSupplier);

            ReplicatedTokenStateMachine relationshipTypeTokenStateMachine = new ReplicatedTokenStateMachine(relationshipTypeTokenRegistry, logProvider, versionContextSupplier);

            PageCursorTracerSupplier          cursorTracerSupplier     = platformModule.Tracers.pageCursorTracerSupplier;
            ReplicatedTransactionStateMachine replicatedTxStateMachine = new ReplicatedTransactionStateMachine(commandIndexTracker, replicatedLockTokenStateMachine, config.Get(state_machine_apply_max_batch_size), logProvider, cursorTracerSupplier, versionContextSupplier);

            dependencies.SatisfyDependencies(replicatedTxStateMachine);

            LocksFactory lockFactory = createLockFactory(config, logging);

            LocksSupplier = () => CreateLockManager(lockFactory, config, platformModule.Clock, replicator, myself, raftMachine, replicatedLockTokenStateMachine);

            RecoverConsensusLogIndex consensusLogIndexRecovery = new RecoverConsensusLogIndex(localDatabase, logProvider);

            CoreStateMachines = new CoreStateMachines(replicatedTxStateMachine, labelTokenStateMachine, relationshipTypeTokenStateMachine, propertyKeyTokenStateMachine, replicatedLockTokenStateMachine, idAllocationStateMachine, new DummyMachine(), localDatabase, consensusLogIndexRecovery);

            CommitProcessFactory = (appender, applier, ignored) =>
            {
                localDatabase.RegisterCommitProcessDependencies(appender, applier);
                return(new ReplicatedTransactionCommitProcess(replicator));
            };

            this.TokenHolders = new TokenHolders(propertyKeyTokenHolder, labelTokenHolder, relationshipTypeTokenHolder);
            dependencies.SatisfyDependencies(TokenHolders);
        }
Ejemplo n.º 9
0
 public abstract T CreatePageCache(PageSwapperFactory swapperFactory, int maxPages, PageCacheTracer tracer, PageCursorTracerSupplier cursorTracerSupplier, VersionContextSupplier contextSupplier, JobScheduler jobScheduler);
Ejemplo n.º 10
0
 protected internal T GetPageCache(FileSystemAbstraction fs, int maxPages, PageCacheTracer tracer, PageCursorTracerSupplier cursorTracerSupplier)
 {
     if (PageCache != null)
     {
         TearDownPageCache(PageCache);
     }
     PageCache = CreatePageCache(fs, maxPages, tracer, cursorTracerSupplier, EmptyVersionContextSupplier.EMPTY);
     return(PageCache);
 }
Ejemplo n.º 11
0
 protected internal virtual T CreatePageCache(FileSystemAbstraction fs, int maxPages, PageCacheTracer tracer, PageCursorTracerSupplier cursorTracerSupplier)
 {
     return(CreatePageCache(fs, maxPages, tracer, cursorTracerSupplier, EmptyVersionContextSupplier.EMPTY));
 }
Ejemplo n.º 12
0
        protected internal virtual T CreatePageCache(FileSystemAbstraction fs, int maxPages, PageCacheTracer tracer, PageCursorTracerSupplier cursorTracerSupplier, VersionContextSupplier versionContextSupplier)
        {
            PageSwapperFactory swapperFactory = new SingleFilePageSwapperFactory();

            swapperFactory.Open(fs, Configuration.EMPTY);
            return(CreatePageCache(swapperFactory, maxPages, tracer, cursorTracerSupplier, versionContextSupplier));
        }
Ejemplo n.º 13
0
        protected internal T CreatePageCache(PageSwapperFactory swapperFactory, int maxPages, PageCacheTracer tracer, PageCursorTracerSupplier cursorTracerSupplier, VersionContextSupplier versionContextSupplier)
        {
            T pageCache = _fixture.createPageCache(swapperFactory, maxPages, tracer, cursorTracerSupplier, versionContextSupplier, JobScheduler);

            PageCachePageSize  = pageCache.PageSize();
            RecordsPerFilePage = PageCachePageSize / RecordSize;
            RecordCount        = 5 * maxPages * RecordsPerFilePage;
            FilePageSize       = RecordsPerFilePage * RecordSize;
            BufA = ByteBuffer.allocate(RecordSize);
            return(pageCache);
        }
Ejemplo n.º 14
0
 /// <summary>
 /// <seealso cref="PageCursorTracerSupplier"/> to use for this page cache. </summary>
 /// <param name="tracerSupplier"> supplier of page cursors tracers </param>
 /// <returns> this instance </returns>
 public PageCacheConfig WithCursorTracerSupplier(PageCursorTracerSupplier tracerSupplier)
 {
     this.PageCursorTracerSupplier = tracerSupplier;
     return(this);
 }
Ejemplo n.º 15
0
 /// <summary>
 /// Create page cache. </summary>
 /// <param name="swapperFactory"> page cache swapper factory </param>
 /// <param name="memoryAllocator"> the source of native memory the page cache should use </param>
 /// <param name="pageCacheTracer"> global page cache tracer </param>
 /// <param name="pageCursorTracerSupplier"> supplier of thread local (transaction local) page cursor tracer that will provide
 /// thread local page cache statistics </param>
 /// <param name="versionContextSupplier"> supplier of thread local (transaction local) version context that will provide
 ///        access to thread local version context </param>
 public MuninnPageCache(PageSwapperFactory swapperFactory, MemoryAllocator memoryAllocator, PageCacheTracer pageCacheTracer, PageCursorTracerSupplier pageCursorTracerSupplier, VersionContextSupplier versionContextSupplier, JobScheduler jobScheduler) : this(swapperFactory, memoryAllocator, org.neo4j.io.pagecache.PageCache_Fields.PAGE_SIZE, pageCacheTracer, pageCursorTracerSupplier, versionContextSupplier, jobScheduler)
 {
 }
Ejemplo n.º 16
0
 /// <summary>
 /// Create page cache. </summary>
 /// <param name="swapperFactory"> page cache swapper factory </param>
 /// <param name="maxPages"> maximum number of pages </param>
 /// <param name="pageCacheTracer"> global page cache tracer </param>
 /// <param name="pageCursorTracerSupplier"> supplier of thread local (transaction local) page cursor tracer that will provide
 /// thread local page cache statistics </param>
 /// <param name="versionContextSupplier"> supplier of thread local (transaction local) version context that will provide
 /// access to thread local version context </param>
 public MuninnPageCache(PageSwapperFactory swapperFactory, int maxPages, PageCacheTracer pageCacheTracer, PageCursorTracerSupplier pageCursorTracerSupplier, VersionContextSupplier versionContextSupplier, JobScheduler jobScheduler) : this(swapperFactory, MemoryAllocator.createAllocator("" + MemoryRequiredForPages(maxPages), GlobalMemoryTracker.INSTANCE), org.neo4j.io.pagecache.PageCache_Fields.PAGE_SIZE, pageCacheTracer, pageCursorTracerSupplier, versionContextSupplier, jobScheduler)
 {
 }