Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Dodávejte úkoly ve vlnách, které spočítá graf, a berte další

Zvalidujte plán, přečtěte vlny provádění, které graf závislostí dává, podívejte se, které úkoly jsou připravené a které na čem blokované, a vezměte jeden úkol, který má worker udělat teď.

zaručeno Paralelní workerypokročilýmaintaineragentzapisuje stav

Situace

Plán s dvaceti úkoly a hrstkou závislostí má v sobě pořadí, které nikdo nezapsal. Pracovníci berou, co vypadá zajímavě, dva z nich vezmou úkoly dotýkající se stejných souborů a závislost, na kterou někdo zapomněl, se vynoří jako rebase.

Co spouštíte

  • plan validate: konzistence modelu, odkazů, DAG a stavu
  • plan waves, plan ready, plan blocked: pořadí, které graf implikuje, a co na čem čeká
  • plan next: jediný úkol k převzetí
  • start <task> --scope <paths>: úloha v rozsahu úkolu, s překryvem hlášeným při startu

Scénář

setup: plan-model
given:
  - 'installed, with a canonical project model carrying one milestone and two issues'
steps:
  - id: validate
    run: ['plan', 'validate']
    note: 'schemas, references, the DAG and status consistency; a cycle or a dependency on a missing issue is refused by name'
    expect:
      exit: 0
      stdout_contains: ['0 failure']
  - id: waves
    run: ['plan', 'waves']
    note: 'topological execution waves; issues in one wave that touch the same paths are reported as serialised'
    expect:
      exit: 0
      stdout_contains: ['^Wave 0', 'I0001 +READY', '^Wave 1', 'I0002 +BLOCKED']
  - id: ready
    run: ['plan', 'ready']
    note: 'issues whose dependencies are all satisfied'
    expect:
      exit: 0
      stdout_contains: ['I0001']
      stdout_not_contains: ['I0002']
  - id: blocked
    run: ['plan', 'blocked']
    note: 'issues waiting on a dependency, and on which one'
    expect:
      exit: 0
      stdout_contains: ['I0002']
  - id: next
    run: ['plan', 'next']
    note: 'the one issue a worker should take now'
    expect:
      exit: 0
      stdout_contains: ['^I0001 ', 'scope:', 'next: majordomus plan start I0001']
  - id: take-it
    run: ['start', 'I0001', '--scope', 'src/I0001']
    note: 'the task under the scope the issue names; overlap with other worktrees is computed on claimed paths'
    expect:
      exit: 0
      stdout_contains: ['t-']
then:
  - 'status is derived from recorded facts and stored nowhere'
  - 'two issues in one wave with overlapping paths are named as serialised'
  - 'the task started carries the scope the issue claims'

Výsledek

Pořadí se počítá, nepamatuje se. Paralelní úkoly, které by se srazily, jsou pojmenovány dřív, než je někdo začne, a úkol, který si worker vezme, je ten, který graf označuje jako další.

Scénář

Provedeno proti skutečnému nástroji v repozitáři připraveném pomocí plan-model, při každém generování tohoto webu. To, co následuje, není popis toho, co by se mělo stát; je to to, co se stalo.

dáno

  • nainstalováno, s kanonickým modelem projektu nesoucím jeden milník a dva úkoly

kdy

  1. 1majordomus plan validate
  2. 2majordomus plan waves
  3. 3majordomus plan ready
  4. 4majordomus plan blocked
  5. 5majordomus plan next
  6. 6majordomus start I0001 --scope src/I0001

pak

  • status se odvozuje ze zaznamenaných faktů a neukládá se nikde
  • dva úkoly v jedné vlně s překrývajícími se cestami jsou pojmenovány jako serializované
  • zahájená úloha nese rozsah, který si úkol nárokuje

Co nástroj udělal

Důkaz o běhu, ze kterého byla tato stránka vygenerována: pass, 6 kroků. Výstup je normalizován: cesta repozitáře, časová razítka, id a doby trvání jsou zástupné hodnoty; nic dalšího se neupravuje.

Testováno v test/cases/94_use_cases.sh, který spouští každý scénář a odmítne krok, jehož zaznamenaný výstup není tím, co vyprodukoval.

  1. schémata, reference, DAG a konzistence stavů; cyklus nebo závislost na chybějícím úkolu se odmítne jménem

    plan validate: 1 milestone(s), 2 issue(s), 0 failure(s), 0 warning(s)
    • exit 0
    • stdout_contains /0 failure/
  2. topologické vlny provádění; úkoly v jedné vlně, které se dotýkají týchž cest, se hlásí jako serializované

    Wave 0
      I0001   READY     Issue I0001
    Wave 1
      I0002   BLOCKED   Issue I0002
    • exit 0
    • stdout_contains /^Wave 0/
    • stdout_contains /I0001 +READY/
    • stdout_contains /^Wave 1/
    • stdout_contains /I0002 +BLOCKED/
  3. úkoly, jejichž závislosti jsou všechny splněny

    I0001   w0   Issue I0001
        scope: src/I0001
    • exit 0
    • stdout_contains /I0001/
    • stdout_not_contains /I0002/
  4. úkoly čekající na závislost a na kterou

    I0002   w1   Issue I0002
        waiting on: I0001
    • exit 0
    • stdout_contains /I0002/
  5. jeden úkol, který by měl worker vzít nyní

    I0001 — Issue I0001
    objective: Do the bounded piece of work called I0001.
    scope:     src/I0001
    profile:   implementation
    
    next: majordomus plan start I0001
    • exit 0
    • stdout_contains /^I0001 /
    • stdout_contains /scope:/
    • stdout_contains /next: majordomus plan start I0001/
  6. úloha pod rozsahem, který úkol jmenuje; překryv s jinými worktrees se počítá na nárokovaných cestách

    started t-<id>  profile=implementation  scope=src/I0001
    next: majordomus context; checkpoint every 15m; majordomus check before claiming anything
    • exit 0
    • stdout_contains /t-/

Proč to nástroj ví

Řetězec od této stránky ke kódu: případ užití jmenuje příkazy, pravidla a tvrzení; každé pravidlo se dispatchuje z registru a každé tvrzení jmenuje test, který ho dokazuje; scénář výše provedl příkazy. Nic v tomto řetězci není text o záměru.

Pravidla, díky nimž platí

Uplatněné záruky

Související případy užití

Vypočteno z toho, co sdílejí: tvrzení, pravidla, příkazy, kategorie, aplikace. Tento seznam nikdo neudržuje.

Okamžiky, na které to odpovídá

Prohledává názvy a popisy všech stránek, které tento web publikuje.