def METHOD_NAME(dsn: str, options: MutableMapping[str, Any],
           socket_timeout: int = 60) -> UpdateState:
    """ Update database from the next batch of data. Returns the state of
        updates according to `UpdateState`.
    """
    with connect(dsn) as conn:
        startdate, startseq, indexed = status.get_status(conn)
        conn.commit()
    if startseq is None:
        LOG.error("Replication not set up. "
                  "Please run 'nominatim replication --init' first.")
        raise UsageError("Replication not set up.")
    assert startdate is not None
    if not indexed and options['indexed_only']:
        LOG.info("Skipping update. There is data that needs indexing.")
        return UpdateState.MORE_PENDING
    last_since_update = dt.datetime.now(dt.timezone.utc) - startdate
    update_interval = dt.timedelta(seconds=options['update_interval'])
    if last_since_update < update_interval:
        duration = (update_interval - last_since_update).seconds
        LOG.warning("Sleeping for %s sec before next update.", duration)
        time.sleep(duration)
    if options['import_file'].exists():
        options['import_file'].unlink()
    # Read updates into file.
    with _make_replication_server(options['base_url'], socket_timeout) as repl:
        outhandler = WriteHandler(str(options['import_file']))
        endseq = repl.apply_diffs(outhandler, startseq + 1,
                                  max_size=options['max_diff_size'] * 1024)
        outhandler.close()
        if endseq is None:
            return UpdateState.NO_CHANGES
        with connect(dsn) as conn:
            run_osm2pgsql_updates(conn, options)
            # Write the current status to the file
            endstate = repl.get_state_info(endseq)
            status.set_status(conn, endstate.timestamp if endstate else None,
                              seq=endseq, indexed=False)
            conn.commit()
    return UpdateState.UP_TO_DATE