Skip to content

[suggestion] Persistent Executor #3716

@appetrosyan

Description

@appetrosyan

Feature request

The executor should persist between execution of different transactions. Ideally it should be brought up either after an upgrade or after a quick recovery (from a power outage). It should not have significant persistent storage (caching is fine, storing information that can affect the next verdict is not).

@mversic suspects that wasmtime could have an out-of-memory condition if WASM is not periodically blanked, so the suggestion is to start with a block scope and then extend it further to longer periods of time. I Suggest making it a configuration parameter.

In detail we need the following:

  • Persistence configuration parameter, in configs/peer/config.json that can be Every n transactions, every n blocks, until peer crashes, defaulting to every 1 transaction.
  • Infrastructure to periodically purge the Validator/executor every n of x entity.
  • Tests that produce an out-of-memory condition. Install guard rails to prevent Iroha from crashing in that situation.
  • Tests that verify that the current executor does not cause an out-of-memory condition under load.
  • A test that verifies that the current executor does not leak memory (by unloading itself, and comparing resident memory with the last executor).

Motivation

The operation of loading and unloading an executor affects the performance of regular transaction processing, so it makes sense to optimise the process and avoid unnecessary loading and blanking of memory if the old memory does a good-enough job.

Who can help?

@mversic @appetrosyan

Metadata

Metadata

Assignees

Labels

EnhancementNew feature or requestiroha2-devThe re-implementation of a BFT hyperledger in RUSTquestionFurther information is requested

Type

No type

Projects

Status

In review

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions