[raft/scd] Implement constraints repo methods - #1670
Conversation
3b09d1d to
6180246
Compare
6180246 to
a081509
Compare
mickmis
left a comment
There was a problem hiding this comment.
This prompted me to check something with the implementation of HandleClientRequest , and I notice that we do this:
type Proposal struct {
ID string `json:"id"`
Locality string `json:"locality"`
NodeID uint64 `json:"node_id"`
Timestamp time.Time `json:"timestamp"`
RequestType RequestType `json:"request_type"`
Value []byte `json:"value"`
// ReadOnly proposals do not modify the state machine and,
// therefore, do not need to be applied by nodes who did not initiate them.
// TODO: This is a temporary solution. In the future, we will use ReadIndex
// for read-only operations without needing to propose them to Raft.
ReadOnly bool `json:"read_only"`
}
func (c *Consensus) HandleClientRequest(ctx context.Context, requestType RequestType, value []byte, readOnly bool) (any, error) {
proposal := c.newProposal(ctx, requestType, value, readOnly)
buf, err := json.Marshal(proposal)
...I.e. we call json.Marshal on the payload of the proposal once, and then a second time when marshalling the proposal.
Thing is, Value will be base64-encoded in that case:
Array and slice values encode as JSON arrays, except that []byte encodes as a base64-encoded string, and a nil slice encodes as the null JSON value.
Which will waste some space I believe and will be less readable.
To avoid that Value may be set to use the type json.RawMessage, see the doc: https://pkg.go.dev/encoding/json#RawMessage
If I am correct, could you address that in a separate PR? Thanks!
|
@mickmis Thanks for bringing this up. I will add it as a TODO on the PR train document and see how to deal with this depending on how exactly we will be optimizing the proposal encoding. |
Chained PR: #1627 -> #1642 -> #1643 -> #1644 -> #1645 -> #1646 -> #1649 -> #1650 -> #1651 -> #1653 -> #1654 -> #1656 -> #1657 -> #1655 -> #1666 -> #1667 -> #1668 -> #1669 -> #1670 -> #1671 -> #1672 -> #1673 -> #1674 -> #1675
Implements the scd constraints repo methods.