@Override
  public void close() throws IOException {
    //.close() methods are better to be idempotent, i.e. not throw exceptions on repeating calls,
    // but just silently ignore attempts to 'close already closed'. And storage conforms with
    // that. But in .force() we write file status and other header fields, and without .closed
    // flag we'll do that even on already closed storage, which leads to exception.
    if (!closed.get()) {
      //Class in general doesn't provide thread-safety guarantees, and need external synchronization if used in
      // multithreading. But since it uses mmapped files, concurrency errors in closing/reclaiming may lead to
      // JVM crash, not just program bugs -- hence, a bit of protection do no harm:
      synchronized (this) {//also ensures updateNextRecordId() is finished
        if (!closed.get()) {
          putHeaderInt(HeaderLayout.FILE_STATUS_OFFSET, FILE_STATUS_PROPERLY_CLOSED);

          force();

          closed.set(true);

          openTelemetryCallback.close();

          headerPage = null;

          storage.close();
        }
      }
    }
  }
@Override
  public void close()