예제 #1
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);
        }
예제 #2
0
 public virtual PageCache GetPageCache(FileSystemAbstraction fs, PageCacheConfig pageCacheConfig, Config config)
 {
     CloseExistingPageCache();
     PageCache = CreatePageCache(fs, pageCacheConfig, config);
     PageCachePostConstruct(pageCacheConfig);
     return(PageCache);
 }
예제 #3
0
 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);
     }
 }
예제 #4
0
        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);
        }
예제 #5
0
 public PageCacheRule(PageCacheConfig config)
 {
     this.BaseConfig = config;
 }