lumnik. / scénarios Tous les scénarios · English

L'API du partenaire perd une page et le run ne ment pas

Objectif Qu'un run ne se dise jamais complet quand la source a servi moins de lignes qu'elle n'en annonce.

Un partenaire publie 2 400 lignes et leur nombre. Une nuit, une page de 100 disparaît, le nombre reste juste.

manifests/10-partner.yaml
apiVersion: connectors.lumnik.io/v1kind: Connectormetadata:  name: scenario-partner-a  connector_type: rest-generic  scopes: [partners]spec:  base_url: http://host.docker.internal:9220  endpoints:    - id: partners      path: /partners      method: GET      pagination:        kind: offset        offset_param: offset        limit_param: limit        limit: 500        response_path: "$.data"        total_path: "$.total"      target:        kind: hybrid        table: ext.scenario_partner_a        unique_key: "$.id"        promote:          - { name: name, path: "$.name", type: text }          - { name: city, path: "$.city", type: text }
$ lm connector run scenario-partner-a
run scheduled: c286c444-9b4d-4ec4-b544-d0734e0c9ab1

$ lm run get c286c444-9b4d-4ec4-b544-d0734e0c9ab1
ID        CONNECTOR           ENDPOINT  STATUS     IN    OUT   SKIPPED  DEAD-LETTERS  STARTED           ENDED
c286c444  scenario-partner-a  partners  Completed  2400  2400  0        0             2026-11-03 17:11  2026-11-03 17:11
$ lm connector run scenario-partner-a
run scheduled: 8b414680-f5ed-47a9-ba29-bf19a2c91c7e

$ lm run get 8b414680-f5ed-47a9-ba29-bf19a2c91c7e
ID        CONNECTOR           ENDPOINT  STATUS  IN    OUT   SKIPPED  DEAD-LETTERS  STARTED           ENDED
8b414680  scenario-partner-a  partners  Failed  2000  2000  0        0             2026-11-03 17:11  2026-11-03 17:11
✖ run failed: Endpoint 'partners': the source declared 2400 rows but this run returned 2300 — refusing to report a partial extract as a complete one
$ lm connector run scenario-partner-a
run scheduled: d7079df1-b8b4-4738-9934-8ed65dfa629d

$ lm run get d7079df1-b8b4-4738-9934-8ed65dfa629d
ID        CONNECTOR           ENDPOINT  STATUS     IN    OUT   SKIPPED  DEAD-LETTERS  STARTED           ENDED
d7079df1  scenario-partner-a  partners  Completed  2400  2400  0        0             2026-11-03 17:11  2026-11-03 17:11

$ lm run list --connector scenario-partner-a
ID        CONNECTOR           ENDPOINT  STATUS     IN    OUT   SKIPPED  DEAD-LETTERS  STARTED           ENDED
d7079df1  scenario-partner-a  partners  Completed  2400  2400  0        0             2026-11-03 17:11  2026-11-03 17:11
8b414680  scenario-partner-a  partners  Failed     2000  2000  0        0             2026-11-03 17:11  2026-11-03 17:11
c286c444  scenario-partner-a  partners  Completed  2400  2400  0        0             2026-11-03 17:11  2026-11-03 17:11

Limites

  • Le témoin ne vaut que si la source publie un vrai nombre de lignes.
  • Le contrôle tire en fin de pagination: les lignes déjà écrites restent.
  • Une source qui ne publie aucun total n'a pas de témoin.
  • API du partenaire simulée ; données synthétiques.

Partenaire · API

Le partenaire publie ses lignes et leur nombre.

2 400, page par page.

API simulée, trois nuits

Le problème

Une page disparaît.

  • 100 lignes en moins.
  • Le nombre annoncé ne bouge pas.

Ce qui n'est pas modifié

L'API reste telle quelle.

  • Son total, publié avec chaque page.
  • Aucun contrôle à ajouter chez elle.

Le piège

Un run vert sur une liste partielle.

  • La pagination finit normalement.
  • Il manque 100 lignes.

Ce qu'il a fallu écrire

total_path: "$.total"

Une ligne.

  • Le total de la source sert de témoin.
  • Lu ≠ déclaré: le run échoue.
  • Un manifeste, 28 lignes.

La nuit en défaut

Failed, avec les deux chiffres.

  • 2 300 servis, 2 400 déclarés.
  • L'endpoint nommé.

La limite

Il faut un vrai total.

  • Une source sans total n'a pas de témoin.

Essayer

Le scénario se rejoue en local.

Chaque étape est publiée avec sa sortie.

Ce scénario tourne sur lumnik Open, gratuit et open source.

Essayer lumnik Open →