synchronized void close() throws IOException {
    if (closed) {
      return;
    }

    doForce();

    //ensure async loading is finished
    Exception freeRecordsLoadingError = ExceptionUtil.runAndCatch(() -> freeRecords.getValue());
    if (freeRecordsLoadingError != null) {
      //not an issue on close, but could provide some insights
      LOG.info("Free records loading is failed", freeRecordsLoadingError);
    }
    closeStorages(records,
                  namesEnumerator,
                  attributesStorage,
                  contentStorage,
                  vfsLog);
    closed = true;
  }
synchronized void close()