Hi Nirbyay, Serg, Kristian,
In this mail I am answering some questions raised by Kristian and blue print for
this task.
1. Questions of Kristian
<knielsen> sachin_setiya_7: so maybe the problem is - that a node broadcasts its write set before the commit order has been determined?
I do not think , this is the problem. Galera enforces the commit order. Yes, it broadcast write set in prepare phase. but it also
guarantees that t1->t2 order will be maintained in all participating N nodes.
<knielsen> sachin_setiya_7: how is the galera internal transaction id allocated and broadcast?
I am here assuming that we are talking about gtid-sequence no.
Suppose our initial seqno is S. So basically at this time all N have same sequence no.
Some transaction T is executed at node Ni .It broadcast the writeset with
its current sequence no S.
At all Node Nj (including Ni).It receives this message. It checks some conditions
Like it “totally ordered action”. If yes then Nj updates its sequence no to + 1.
Here is the relevant code.
if (gu_likely(GCS_ACT_TORDERED == rcvd->act.type &&
GCS_GROUP_PRIMARY == group->state &&
group->nodes[sender_idx].status >= GCS_NODE_STATE_DONOR &&
!(group->frag_reset && local) &&
commonly_supported_version)) {
/* Common situation -
* increment and assign act_id only for totally ordered actions
* and only in PRIM (skip messages while in state exchange) */
rcvd->id = ++group->act_id_;
}
In function
static inline ssize_t
gcs_group_handle_act_msg (gcs_group_t* const group,
const gcs_act_frag_t* const frg,
const gcs_recv_msg_t* const msg,
struct gcs_act_rcvd* const rcvd,
bool commonly_supported_version)
So basically It is like certification(generated at each node ) but done in quite early
phase.
Blueprint of task:- We can do something like galera GTID, we will take initial
sequence no from server. We will add one more variable in gcs_group_t
Named s_sequence_no and will increment it at each node. We also have to
Create a gtid event and append it to message received at Nj , so that on late stages wsrep_apply_cb() can take care of gtid.
Please let me know what you think.