Files
scylladb/test
Kamil Braun 81b7ed23bb test: raft: randomized_nemesis_test: introduce append register
The AppendReg state machine stores a sequence of integers. It supports
`append` inputs which append a single integer to the sequence and return
the previous state (before appending).

The implementation uses the `append_seq` data structure
representing an immutable sequence that uses a vector underneath
which may be shared by multiple instances of `append_seq`.
Appending to the sequence appends to the underlying vector,
but there is no observable effect on the other instances since
they use only the prefix of the sequence that wasn't changed.
If two instances sharing the same vector try to append,
the later one must perform a copy.

This allows efficient appends if only one instance is appending, which
is useful in the following context:
- a Raft server stores a copy in the underlying state machine replica
  and appends to it,
- clients send append operations to the server; the server returns the
  state of the sequence before it was appended to,
- thanks to the sharing, we don't need to copy all elements when
  returning the sequence to the client, and only one instance (the
  server) is appending to the shared vector,
- summarizing, all operations have amortized O(1) complexity.
2021-09-22 17:54:07 +02:00
..
2021-09-12 11:32:13 +03:00