1. Куча / Говнокод #27522

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    ...
    
           fun([N1, _N2], Trace) ->
                   ?assert(
                      ?strict_causality( #{?snk_kind := "Adding table to a shard", shard := _Shard, live_change := true}
                                       , #{?snk_kind := "Shard schema change"}
                                       , ?of_node(N1, Trace)
                                       )),
                   ?assert(
                      ?strict_causality( #{?snk_kind := "Shard schema change", shard := _Shard}
                                       , #{?snk_kind := "Restarting shard server", shard := _Shard}
                                       , ?of_node(N1, Trace)
                                       )),
                   %% Schema change must cause restart of the replica process and bootstrap:
                   {_, Rest} = ?split_trace_at(#{?snk_kind := "Shard schema change"}, Trace),
                   ?assert(
                      ?strict_causality( #{?snk_kind := "Restarting shard server", shard := _Shard}
                                       , #{?snk_kind := state_change, to := bootstrap}
                                       , Rest
                                       ))
           end).

    Немного galaxy-brain тестов

    Запостил: CHayT, 17 Июля 2021

    Комментарии (19) RSS

    • В `Erlang' можно тестировать последовательность событий в распределённой системе, именно поэтому я за `Erlang'.
      Ответить
      • И в какой аксиоматике это описывается? Темпоральная логика какая-то?
        Ответить
        • Судя по всему обыкновенный юнит-тест, без всяких там аксиоматик.
          Ответить
          • Только не юнит, а системный тест, где весь кластер вертится в сборе.
            Ответить
        • Темпоральная логика она про состояния. Это тупиковый путь, т.к. состояние целого кластера с fault-tolerance и фейловерами ты не опишешь никогда.
          Тут чекаются не анскильные состояния, а видимые сайд-эффекты. Хуй знает, как это по науке называют. Я это называю trace-based testing.
          Ответить
          • А ещё эта питушня умеет в chaos monkey (чтобы шатать деревья супервизоров) и влиять на порядок событий, чтобы race conditions провоцировать.
            Ответить
          • > Хуй знает, как это по науке называют.

            В Erlang'е вообще нет никакой `науки', именно поэтому я... Был забавный тред в его мейлинг-листах, где кто-то начал писать что, мол, у вас неправильный π-calculus, потому что вот в статьях... На что ему Robert Virding ответил в духе ``хорошо, что мы не знали про π-calculus, иначе у нас получилась бы какая-то непрактичная питушня для ма-те-матиков из рашки''.
            Ответить
            • У нас в веб-программировании тоже никакой \"науки\" нет
              Ответить
            • Какой язык )))

              Вообще, подобная проблема есть среди программистов (как минимум, на ГК). Народ слишком дофига знает, начинает верить в математику, а не в реальность, и знания начинают ограничивать мышление.
              Ответить
    • > strict_causality

      А как оно проверяет, что это строгая причинно-следственная связь? Просто что события в правильно порядке произошли? Или прям проверяет, что между ними есть какая-то цепочка из happens before, а не просто так вышло?
      Ответить
      • > Просто что события в правильно порядке произошли?

        Как-то так. "За каждым событием с паттерном A следует событие с паттерном B". Можно ещё эту питушню пускать под model-checker'ом, и тогда можно убедиться, что так происходит всегда.
        Ответить
    • #{?
      Ответить
      • ?xxx это вроде макросня. #{ .. } похоже на мапу, но почему там := я не знаю...
        Ответить
        • ?blah это макрос.
          #{key := Value} — заматчить мапу с key / Value.
          Ответить

    Добавить комментарий