Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Now we can analyze each parameter with several criterias:

ParameterPossible ValuesShould it be synchronized between PeersShould it pass consensusCan it be applied without restartWill it affect clients
Key PairValid Key HashNoNoYesYes
Kura Modestrict/fastNoNoYesNo
Block Store PathValid Unix pathNoNoWith additional developmentNo
Peer IdValid URL + Key HashYes (Other Peers should update old Id to the new one)NoWith additional developmentYes
List of Trusted PeersValid URL + Key HashYesYesYesNo
Block Timeunsigned 128 bit integerYesYesYesNo
Maximum amount of Faulty Peersunsigned 32 bit integerYesYesYesNo
Commit Timeunsigned 128 bit integerYesYesYesNo
Transaction Receipt Timeunsigned 128 bit integerYesYesYesNo
Client-side URLValid URLNoNoYesYes
Peer-side URLValid URLYesNoYesNo
Maintenance URLValid URLNoNoYesYes
Gossip Periodunsigned 128 bit integerYesYesYesNo
Batch Sizeunsigned 32 bit integerYes?YesYesNo
Maximum Transactions Blockunsigned 32 bit integerYes?YesYesNo
Transaction Time to Liveunsigned 128 bit integerYes?YesYesNo
Maximum Logging LevelTRACE/INFO/DEBUG/WARN/ERRORNoNoYesNo
Terminal Color Enabledtrue/falseNoNoYesNo
Date Time FormatStringNoNoYesNo

Solution

So solution may be to use Iroha Special Instructions for management consensus dependent parameters like "Gossip Period", storing set of parameters under a Peer entity in World State View and propagating these parameters and their updates into subsystems via Iroha channels.

Parameters that can be managed without consensus can avoid usage of Iroha Special Instructions and implemented separately as API for system administrators.

Decisions

  • Split parameters into consensus dependent and maintenance related
    • Use Iroha Special Instructions for consensus related
    • Put management of other parameters under Maintenance Endpoint
  • Implement "hot reload" mechanisms in Iroha subsystems

Alternatives

  • Use Iroha Special Instructions for all parameters - brings additional set of instructions to maintain, increases load on blocks store and blocks synchronization, won't guarantee non-functional requirements from system administrators perspective (each update will take time needed to finalize block)
  • Use Maintenance Endpoint for all parameters - brings additional complexity in terms of parameters synchronization and open security related issues (who can change "Batch Size" on all Peers?)
  • Do not synchronize any parameters between Peers - may be a good option

Concerns

Lack of real use cases and strong opinions on topic from potential users gave no ability to make a really welcoming decision.

Assumptions

Maintenance Endpoint will be "unstable" during 2.0 release.

Risks

  • Solution will not cover all needs `[4;6]`
  • Requirements will be simpler than expected `[3;3]`
  • "Hot reload" mechanisms will require a lot of work `[6;7]`

Additional Information

Image Added