Percona 8.0 innodb early lock release problem

    trx_release_impl_and_expl_locks(trx, serialised);

    ... 

    lsn_t lsn = mtr->commit_lsn();

    if (lsn == 0) {
      /* Nothing to be done. */
    } else if (trx->flush_log_later) {
      /* Do nothing yet */
      trx->must_flush_log_later = true;

      /* Remember current ddl_operation, because trx_init()
      later will set ddl_operation to false. And the final
      flush is even later. */
      trx->ddl_must_flush = trx->ddl_operation;
    } else if ((srv_flush_log_at_trx_commit == 0 ||
                thd_requested_durability(trx->mysql_thd) ==
                    HA_IGNORE_DURABILITY) &&
               (!trx->ddl_operation)) {
      /* Do nothing */
    } else {
      trx_flush_log_if_needed(lsn, trx);
    }

    trx->commit_lsn = lsn;

In innodb, trx will release lock before flush redo log into disk. If T1 release lock before log flushing, T2 can read the modification of T1. There is a crash before T1 flushing log. T2 may return incorrect result to client before crash. Because the redo log of T1 can’t found on disk and T1 can’t be recoverd.

you’re likely looking at the ‘else if’ condition:

srv_flush_log_at_trx_commit == 0

This is kind of the expected behavior with reduced durability. There are other known side effects of reduced durability like replica being ahead of their source.