Came up in a meeting with @expede: There does exist an edge case where CAR mirror will send blocks that the recipient already has, even outside the cold call.
Specifically, if the receiver has a disjoint graph root that it doesn't know is connected to the DAG they're requesting, then the batch from the sender may contain blocks from that previously disjoint graph root.
E.g. a simple (and admittedly weird) case where the receiver has every second block in a blockchain and is asking for the root.
The sender will respond with a certain depth of the blockchain. Every second of these blocks will be redundant.
So in some cases bitswap will actually be 'more precise'. But the same can be said of CAR mirror in the mode without a bloomfilter.
Mostly I filed this for @expede to go through the spec in case there's any mention of never sending a block the receiver already has.
Came up in a meeting with @expede: There does exist an edge case where CAR mirror will send blocks that the recipient already has, even outside the cold call.
Specifically, if the receiver has a disjoint graph root that it doesn't know is connected to the DAG they're requesting, then the batch from the sender may contain blocks from that previously disjoint graph root.
E.g. a simple (and admittedly weird) case where the receiver has every second block in a blockchain and is asking for the root.
The sender will respond with a certain depth of the blockchain. Every second of these blocks will be redundant.
So in some cases bitswap will actually be 'more precise'. But the same can be said of CAR mirror in the mode without a bloomfilter.
Mostly I filed this for @expede to go through the spec in case there's any mention of never sending a block the receiver already has.