Skip to content

Implement Gradual Rollout for Modularized Transaction Execution #10366

@kselveliev

Description

@kselveliev

Problem

We need to introduce a gradual rollout mechanism for routing transactions between mirrorEvmTxProcessor.execute(params, estimatedGas) and transactionExecutionService.execute(params, estimatedGas, gasUsedCounter). Currently, the routing is determined by the mirrorNodeEvmProperties.isModularizedServices() flag, which acts as a switch.

To enable a progressive deployment strategy, we will introduce a percentage-based configuration that allows for gradual adoption of the new execution flow.

Solution

Current Flow

HederaEvmTransactionProcessingResult result;
if (!mirrorNodeEvmProperties.isModularizedServices()) {
    result = mirrorEvmTxProcessor.execute(params, estimatedGas);
} else {
    result = transactionExecutionService.execute(params, estimatedGas, gasUsedCounter);
}

Introduce a new configuration flag:
(Example) mirrorNodeEvmProperties.transactionExecutionSplitPercentage (double, range 0.0 - 1.0)
This percentage will define the probability of using the new flow (transactionExecutionService.execute).
Example Configuration

  • transactionExecutionSplitPercentage = 0.2 → 80% of requests go to the old flow, 20% to the new.
  • transactionExecutionSplitPercentage = 0.5 → 50% of requests go to each.
  • transactionExecutionSplitPercentage = 1.0 → 100% of requests use the new flow.

Alternatives

No response

Metadata

Metadata

Assignees

Projects

Status

✅ Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions