Изначальная задача дедупликации в этом виде - это именно обеспечить что-то подобное exactly ones семантике. Т.е. чтобы если мы не получили ack, что блок записан его можно было перепослать и это не вызывало дублирования данных. Но из-за реализации, которая основывается, на понимании что это тот же блок данных на самих данных - сразу куча каких-то проблем. Если бы реализация основывалась не на данных, а на некотором id блока, который летел бы от клиента, то по моему мнению этого можно было бы избежать.