public IndexPersistenceMgr(
      int pageSize,
      int entriesPerPage,
      ServerConfiguration conf,
      SnapshotMap<Long, Boolean> activeLedgers,
      LedgerDirsManager ledgerDirsManager,
      StatsLogger statsLogger)
      throws IOException {
    this.openFileLimit = conf.getOpenFileLimit();
    this.activeLedgers = activeLedgers;
    this.ledgerDirsManager = ledgerDirsManager;
    this.pageSize = pageSize;
    this.entriesPerPage = entriesPerPage;
    LOG.info("openFileLimit = {}", openFileLimit);
    // Retrieve all of the active ledgers.
    getActiveLedgers();
    ledgerDirsManager.addLedgerDirsListener(getLedgerDirsListener());

    // Expose Stats
    evictedLedgersCounter = statsLogger.getCounter(LEDGER_CACHE_NUM_EVICTED_LEDGERS);
    statsLogger.registerGauge(
        NUM_OPEN_LEDGERS,
        new Gauge<Integer>() {
          @Override
          public Integer getDefaultValue() {
            return 0;
          }

          @Override
          public Integer getSample() {
            return getNumOpenLedgers();
          }
        });
  }