[Drbd-dev] Protocol C

raulhp raulhp at ugr.es
Wed May 28 14:32:05 CEST 2014


Hi Lars,

Thanks so much, I focus only the replication link, the first develop is 
implement the replication to n servers with reliable multicast, ensuring 
the write in the remote disk.

Can you explain me this ? Where? ---> You would need to find the 
"relevant" requests on the resource->transfer_log()

Regards,
Ra

El 2014-05-28 13:56, Lars Ellenberg escribió:
> On Wed, May 28, 2014 at 12:14:30PM +0200, raulhp wrote:
>> Hi Lars,
>>
>> I´m trying to understand how ACK´s works en Protocol C to try to use
>> it in Reliable Multicast in each receiver, I´m using a Reliable
>> Multicast with NACK (Negative-ACKnowledgment) only in each loss
>> packet.
>
> Ok.
>
> The entry point for requests from "upper layers" is
> drbd_make_request
>   __drbd_make_request
>     drbd_request_prepare()
>     drbd_send_and_submit(),
>     which is in drbd_req.c
>
> Everything "interesting" that happens to such a struct drbd_request
> object is handled with req_mod(req, event, peer_device)
> (or _req_mod ...) which are both a wrapper around
> __req_mod(),
> which calls into mod_rq_state();
>
> "events" are drbd_req_events,
> drbd requests state flags are from drbd_req_state_bits (__RQ_*)
> (or the corresponding RQ_* defines).
>
> grep for req_mod should be useful.
>
> If you consider only the replication link(s),
> the interesting functions are likely
> drbd_sender.c,
>   drbd_sender()
>     wait_for_sender_todo()
>     process_sender_todo()
>       process_one_request()
>
> drbd_receiver.c
>   drbd_asender()
>      ... lots of other stuff ...
>      cmd = &asender_tbl[pi.cmd];
>      ...
>      cmd->fn(connection, &pi);
> with fn (see asender_tbl) being
>   got_BlockAck()
>   got_NegAck()
>
> Where you would probabaly need a "got_mcast_neg_ack()",
> which could maybe better be re-labeled as 
> "got_mcast_retransmit_request()".
>
> You would need to find the "relevant" requests on the
>   resource->transfer_log(), and queue them for resend.
> (Or abstract out your own primitives from the existing stuff,
>  and implement both the existing TCP links and the new mcast
>  with some additional auxiliary functions as needed).
>
> Does that help?



More information about the drbd-dev mailing list