mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-02 06:05:53 +00:00
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.