async def METHOD_NAME(self, access_mode, auth=None, **acquire_kwargs):
    acquisition_timeout = self._config.connection_acquisition_timeout
    auth = AcquireAuth(
        auth,
        force_auth=acquire_kwargs.pop("force_auth", False),
    )
    if self._connection:
        # TODO: Investigate this
        # log.warning("FIXME: should always disconnect before connect")
        await self._connection.send_all()
        await self._connection.fetch_all()
        await self._disconnect()
    if not self._cached_database:
        if (self._config.database is not None
                or not isinstance(self._pool, AsyncNeo4jPool)):
            self._set_cached_database(self._config.database)
        else:
            # This is the first time we open a connection to a server in a
            # cluster environment for this session without explicitly
            # configured database. Hence, we request a routing table update
            # to try to fetch the home database. If provided by the server,
            # we shall use this database explicitly for all subsequent
            # actions within this session.
            log.debug("[#0000]  _: <WORKSPACE> resolve home database")
            await self._pool.update_routing_table(
                database=self._config.database,
                imp_user=self._config.impersonated_user,
                bookmarks=await self._get_bookmarks(),
                auth=auth,
                acquisition_timeout=acquisition_timeout,
                database_callback=self._set_cached_database
            )
    acquire_kwargs_ = {
        "access_mode": access_mode,
        "timeout": acquisition_timeout,
        "database": self._config.database,
        "bookmarks": await self._get_bookmarks(),
        "auth": auth,
        "liveness_check_timeout": None,
    }
    acquire_kwargs_.update(acquire_kwargs)
    self._connection = await self._pool.acquire(**acquire_kwargs_)
    self._connection_access_mode = access_mode