A method comprising: initiating a first round of one-to-many data transmissions from a source computing device to a plurality of sink computing devices to transmit a plurality of data blocks to the sink computing devices; generating, on each sink computing device, a list of lost data blocks of the plurality of data blocks for the respective sink computing device; transmitting the list of lost data blocks from sink computing devices to the source computing device after completion of the first round of one-to-many data transmissions; generating, on the source computing device, a master list of lost data blocks by aggregating the lists of lost data blocks received from the sink computing devices; and initiating a second round of one-to-many data transmissions from the source computing device to the plurality of sink computing devices to retransmit those data blocks identified by the master list aggregated from the lists of lost data blocks received from the sink computing devices; wherein transmitting the list of lost data blocks comprises transmitting the list of lost data blocks based on the number of data blocks identified in the list of data blocks of the respective sink computing device, and further comprises transmitting a threshold value from the source computing device to each sink computing device, the threshold value defining a predetermined minimum list size, and wherein transmitting the list of lost data blocks comprises transmitting the list of lost data blocks from each sink computing device only if the number of data blocks identified in the respective list is greater than the threshold value. initiating a first round of one-to-many data transmissions from a source computing device to a plurality of sink computing devices to transmit a plurality of data blocks to the sink computing devices; generating, on each sink computing device, a list of lost data blocks of the plurality of data blocks for the respective sink computing device; transmitting the list of lost data blocks from sink computing devices to the source computing device after completion of the first round of one-to-many data transmissions; generating, on the source computing device, a master list of lost data blocks by aggregating the lists of lost data blocks received from the sink computing devices; and initiating a second round of one-to-many data transmissions from the source computing device to the plurality of sink computing devices to retransmit those data blocks identified by the master list aggregated from the lists of lost data blocks received from the sink computing devices; wherein transmitting the list of lost data blocks comprises transmitting the list of lost data blocks based on the number of data blocks identified in the list of data blocks of the respective sink computing device, and further comprises transmitting a threshold value from the source computing device to each sink computing device, the threshold value defining a predetermined minimum list size, and wherein transmitting the list of lost data blocks comprises transmitting the list of lost data blocks from each sink computing device only if the number of data blocks identified in the respective list is greater than the threshold value.