Obce zapisy
product.stock jest wynikiem. Stockly wyprowadza go z półek po każdej operacji i nadpisuje to, co tam
zastanie. Integracja, która to pole zapisuje, nie rozmawia z magazynem; ściga się z następnym
przeliczeniem i przegrywa.
Ta strona opisuje mechanizm. Ustawienie, ekran rejestru i dzienne podsumowanie opisują obce zapisy stanu dla ludzi, którzy to obsługują.
Jak dowodzi się obcego zapisu
Dział zatytułowany „Jak dowodzi się obcego zapisu”Każdy legalny zapis aktualizuje product.stock i cień dostępności w tej samej transakcji.
Ponieważ ta para rusza się atomowo, niezgodność zaobserwowana pod blokadą wiersza wołającego nie może być
stanem pośrednim, bo nic nie może być w połowie. Ktoś zapisał pole, nie mówiąc o tym modułowi.
Cień prowadzony jest niezależnie od tego, czy wykrywanie jest włączone, więc włączenie go później startuje z aktualnej podstawy, a nie z lawiny fałszywych alarmów.
Dwa punkty wykrycia, o różnym momencie:
Wartość source | Zapisane przez | Złapane |
|---|---|---|
dal | Admin API, panel, dowolny zapis przez DAL | natychmiast, przy zapisie produktu |
sql | surowy SQL wprost w bazie | z opóźnieniem, przy najbliższym zdarzeniu stanu tego produktu — dokładnie wtedy, gdy moduł i tak by to po cichu nadpisał |
Model zagrożenia to źle skonfigurowana integracja, a nie sabotaż od strony bazy. System, który podrabia także tabelę cienia, jest poza zasięgiem jakiegokolwiek mechanizmu na poziomie aplikacji.
Trzy reakcje
Dział zatytułowany „Trzy reakcje”Polityka jest ustawieniem, a jej wartości docierają do integracji dosłownie, w policyApplied:
| Wartość | Co dzieje się z liczbą |
|---|---|
off | brak wykrywania i brak zapisu: edycja przez DAL jest wchłaniana jak zwykła korekta stanu, a zapis surowym SQL-em zostaje nadpisany przy najbliższym przeliczeniu |
correct | wygrywa liczba z zewnątrz — różnica jest księgowana w magazynie, a incydent zapisany |
restore | wygrywają półki — nic nie jest księgowane, pole zostaje odtworzone z półek, a odrzucony zapis zapisany |
Przy correct różnica zapisuje się jako prawdziwy ruch, więc korekta jest w historii produktu jak każda
inna. Przy restore ruchu nie ma, bo fizycznie nic się nie zmieniło.
Jak być powiadamianym
Dział zatytułowany „Jak być powiadamianym”p2lab_stockly.external_stock_write_detected wysyłane jest raz na produkt na całość pracy, po
zatwierdzeniu transakcji:
| Klucz | |
|---|---|
productId | |
expectedValue | co trzymało Stockly |
foundValue | co zostawił piszący |
delta | różnica |
source | dal albo sql |
policyApplied | off, correct albo restore |
W odróżnieniu od każdego innego zdarzenia z katalogu to niesie wartości proste zamiast wspólnej koperty, ponieważ jest pisane pod Flow Builder i webhooki App System, dlatego sklep może powiesić na nim mail bez pisania kodu.
Rejestr
Dział zatytułowany „Rejestr”p2lab_stockly_external_stock_incident, jeden wiersz na wykrycie:
| Pole | |
|---|---|
productId | |
expectedAtp | liczba, którą dają półki |
foundValue | liczba, którą ktoś zapisał |
delta | |
source | dal albo sql |
policyApplied | correct albo restore |
userId, integrationId | kto zapisał, gdy zapis przyszedł przez API |
integrationId jest tu najcenniejsze dla autora integracji: wskazuje konkretną integrację API, która
zapisu dokonała, co zamienia ogólne zgłoszenie o nadpisywaniu stanów w konkretne poświadczenie.
Czytaj to jak każdą encję (/api/search/p2lab-stockly-external-stock-incident); rosnąca liczba
wierszy dla jednego integrationId jest warta osobnego alarmu.
Wiersze przeżywają usunięcie produktu i tak ma być: ślad audytowy znikający razem ze swoim tematem nie jest śladem audytowym. Są usuwane po roku.
Co robić zamiast tego
Dział zatytułowany „Co robić zamiast tego”| Chcesz | Wywołaj |
|---|---|
| zaksięgować przyjęcie towaru | warehouse/stock/add |
| zaksięgować wydanie | warehouse/stock/remove |
| skorygować liczbę do policzonej | warehouse/stock/count |
naprawić product.stock, który ktoś już nadpisał | warehouse/stock/sync-product/{productId} |
Każde z nich zostawia wiersz w rejestrze, przelicza publikowaną liczbę i aktualizuje cień, a to jest cała różnica między zmianą stanu a zmianą stanu, której nikt później nie umie wytłumaczyć.
Jeśli system zewnętrzny naprawdę jest właścicielem liczb, to jest architektura do obrony: ustaw
politykę na correct i pozwól mu wygrywać jawnie, z każdym nadpisaniem zapisanym. Nigdy nie jest w
porządku zapis pola przy wyłączonym wykrywaniu i założenie, że się utrzymał.
- Jak położyć zapas w binie — droga wspierana
- Model zapasu — dlaczego to pole w ogóle jest wyprowadzane
- Kontrola spójności — sprzątanie niezgodności, która już istnieje