Гарантии доставки

ДЗ 1 · распределённые системы

Гарантии доставки

00без протокола

Просто переслать

потери 30%дубли 30%задержка 1–3

01at most once

Не более одного раза

повторпотеря

02at least once

Не менее одного раза

потеряповтор

03exactly once

Ровно один раз

потеряповтор

04exactly once + ordered

Ровно один раз по порядку

потеряповторперестановка

05память и сеть

Ресурсы

Где помнить доставленное память Receiver AMO, сеть с отказами

RESEND_DELAY прогоны тестов с разными значениями

Запас до лимитов худший прогон, сеть с отказами

Все замеры

06tests/src/common.rs

Баг в проверке порядка

check_message_delivery_ordered · фикс
let mut next_idx = 0;for i in 0..delivered.len() {    let msg = &delivered[i];    let mut matched = false;    while !matched && next_idx < sent.len() {        if msg.data == sent[next_idx].data {            matched = true;+           next_idx += 1;        } else {            next_idx += 1;        }    }    assume!(matched, "Order violation: …")?;}
тест, который ловит
let sent = [m("X"), m("Y"), m("X")];let delivered = [m("X"), m("X"), m("Y")]; assert!(check_message_delivery_ordered(    &delivered, &sent,).is_err());

07-m 100 -c -o

Официальный прогон

лог прогона ·

08видят все, кто открыл ссылку

Доска