/// <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); }
public virtual PageCache GetPageCache(FileSystemAbstraction fs, PageCacheConfig pageCacheConfig, Config config) { CloseExistingPageCache(); PageCache = CreatePageCache(fs, pageCacheConfig, config); PageCachePostConstruct(pageCacheConfig); return(PageCache); }
protected internal virtual void PageCachePostConstruct(PageCacheConfig overriddenConfig) { if (SelectConfig(BaseConfig.inconsistentReads, overriddenConfig.InconsistentReads, true)) { AtomicBoolean controller = SelectConfig(BaseConfig.nextReadIsInconsistent, overriddenConfig.NextReadIsInconsistent, null); Adversary adversary = controller != null ? new AtomicBooleanInconsistentReadAdversary(controller) : new RandomInconsistentReadAdversary(); PageCache = new AdversarialPageCache(PageCache, adversary); } if (SelectConfig(BaseConfig.accessChecks, overriddenConfig.AccessChecks, false)) { PageCache = new AccessCheckingPageCache(PageCache); } }
private PageCache CreatePageCache(FileSystemAbstraction fs, PageCacheConfig pageCacheConfig, Config config) { PageCacheTracer tracer = SelectConfig(BaseConfig.tracer, pageCacheConfig.Tracer, PageCacheTracer.NULL); PageCursorTracerSupplier cursorTracerSupplier = SelectConfig(BaseConfig.pageCursorTracerSupplier, pageCacheConfig.PageCursorTracerSupplier, Org.Neo4j.Io.pagecache.tracing.cursor.PageCursorTracerSupplier_Fields.Null); config.AugmentDefaults(GraphDatabaseSettings.pagecache_memory, "8M"); FormattedLogProvider logProvider = FormattedLogProvider.toOutputStream(System.err); InitializeJobScheduler(); ConfiguringPageCacheFactory pageCacheFactory = new ConfiguringPageCacheFactory(fs, config, tracer, cursorTracerSupplier, logProvider.GetLog(typeof(PageCache)), EmptyVersionContextSupplier.EMPTY, JobScheduler); return(pageCacheFactory.OrCreatePageCache); }
public PageCacheRule(PageCacheConfig config) { this.BaseConfig = config; }