Skip to content

Add Konsist rule to ensure TransactionManager rollback on Either.Left #182

@kamiazya

Description

@kamiazya

Context

Currently, TransactionManagerAdapter delegates blindly to the platform TransactionManager. When a transactional block returns Either.Left (indicating an error), the transaction is not automatically rolled back.

Problem

This can lead to partial commits when operations fail, violating transactional consistency.

Suggested Solution

  1. Update TransactionManagerAdapter to mark transactions for rollback when the block returns Either.Left:
override suspend fun <E, T> inTransaction(block: suspend () -> Either<E, T>): Either<E, T> =
    platformTransactionManager.inTransaction {
        val result = block()
        if (result.isLeft()) markForRollback()
        result
    }
  1. Add a Konsist test to ensure all TransactionManager implementations follow this pattern

  2. Add integration tests to verify rollback behavior

Benefits

  • Ensures transactional consistency
  • Prevents partial commits on errors
  • Makes error handling more predictable

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions