LIBCAS / ARCLib

ARCLib – komplexní řešení pro dlouhodobou archivaci digitálních (knihovních) sbírek
GNU General Public License v3.0
4 stars 1 forks source link

Databáze rozpracovaných dat a dat připravených k vložení #73

Closed kerschfilip closed 3 years ago

kerschfilip commented 4 years ago

Při další kontrole a testování funkčních požadavků jsem narazil na určitou nesrovnalost, a to v rámci funkcí ingestu: V původním dokumentu k funkčním požadavkům se píše:

Databáze rozpracovaných dat a dat připravených k vložení -Ingest obsahuje prostředí dostupné administrátorovi, kde je možné procházet data, která v průběhu zpracování neprojdou validací -zde může administrátor kontrolovat obsah SIPu, prohlížet audit log zpracování a je upozorněný na chybu, na které workflow selhalo -administrátor má možnost vrátit data dodavateli (změna stavu) nebo data opravit sám – výměnou souboru například, editaci XML – a pak může SIP poslat znovu ke zpracování v Ingestu -administrátor má možnost SIP zcela odmítnout, tedy zrušit Ingest -administrátor může také v této fázi přiřadit jiný validační profil a znovu spustit zpracování Ingestu -Ingest obsahuje prostředí dostupné administrátorovi a vkladateli dat, kde je možné procházet data připravená k Ingestu (nebyl spuštěn Ingest)

V několika bodech ARCLib dané požadavky v tuto chvíli nesplňuje, jsou to:

administrátor má možnost vrátit data dodavateli (změna stavu) nebo data opravit sám – výměnou souboru například, editaci XML – a pak může SIP poslat znovu ke zpracování v Ingestu

administrátor může také v této fázi přiřadit jiný validační profil a znovu spustit zpracování Ingestu

Ingest obsahuje prostředí dostupné administrátorovi a vkladateli dat, kde je možné procházet data připravená k Ingestu (nebyl spuštěn Ingest)


Ne, že bych si chtěl stěžovat :-) , issue zakládám spíš pro upozornění na tuto nesrovnalost, a také pro případné otevření diskuze, zda některou z těchto funkcionalit přeci jen neimplementovat. Například možnost spustit znovu ingest, který selhal, s jiným SIP či validačním profilem nebo JSON konfigurací bez nutnosti znovu SIP vkládat (když je stejně nesmazaný a leží v Transfer Area) mi připadá jako docela dobrý nápad.

jbil7 commented 4 years ago

Dle mého názoru první dva body tohoto issue narážejí na pojetí rollbacku a incidentů, které se i podle mě rozchází se současným zadáním. Na základě mých zjištění dojde při neočekávané chybě (tj. chyba ve workflow definition, systémová chyba, chyba ve validaci, sip profilu atd.) k rollbacku spuštěnému automaticky systémem, pak už v ingestu není možno dále pokračovat. Řešení incidentu je poměrně úzce omezeno na nejasné definice v konfiguraci workflow.

V souvislosti se současným pojetím shledávám další problém, na který naráží výše i @kerschfilip v závěru issue: V transfer area pomalu dochází místo, neboť všechny balíky, které v průběhu našich testů spadly do chyby a automaticky skočily do rollbacku, zůstávají v transfer area přes veškerý potenciál jejich opravy a dodatečného ingestu již bez vazby na workflow dále nevyužité.

Rád bych proto navrhnul k diskusi takovéto řešení: dle mého názoru by bylo potřeba změnit pravidla spouštění rollbacků a incidentů. Namísto rollbacku by měl automaticky u všech chyb nastat incident, tedy jakýsi stav "Pozastaveno s chybami". Uživatel by měl mít možnost nastavit workflow, validační profil, opravit balíček ve workspace, nebo jinak libovolným způsobem ošetřit chybu. Následně by mu mělo být umožněno ingest znovu rozeběhnout, a to od začátku procesu, na němž ingest ohlásil chybu nebo od jiného procesu, který si sám uživatel zvolí. Pokud uživatel usoudí, že chybu nelze opravit, měl by mít možnost vyvolat rollback, tj. smazání z workspace, případně i z Archival storage.

Množství balíků v transfer area by se tím zároveň snížilo na uhlídatelnou a přehlednou mez, neboť by tam byly pouze balíky čekající na ingest a nebo balíky, které je nemožno opravit (u nichž by se třeba dal nastavit nějaký timeout pro smazání). Orientaci mezi nimi pro uživatele i pro systém by mohly umožnit prefixy v názvech souborů, o nichž byla řeč již na více předešlých schůzích (viz #39 ).

yantom commented 4 years ago

@kerschfilip

Váš výňatek rozděluji na menší části a čísluji za účelem snažšího odkazování. Přidávám vlastní komentář.

1) > Ingest obsahuje prostředí dostupné administrátorovi, kde je možné procházet data, která v průběhu zpracování neprojdou validací.

považuji za splněné

2) > zde může administrátor kontrolovat obsah SIPu, prohlížet audit log zpracování a je upozorněný na chybu, na které workflow selhalo

považuji za splněné

3) > administrátor má možnost vrátit data dodavateli (změna stavu)

nesplněné, pravděpodobně nebylo nikdy hlouběji analyzované

4) > nebo data opravit sám – výměnou souboru například, editaci XML

Zde narozdíl od předchozích nejde dle mě nutně o podporu v GUI, Má možnost je dle mého názoru splněné tím že má přístup do překladiště/workspace kde může vstupní balíček upravit. Dále myslím že editací XML zde určitě není myšlena editace AIP XML, neboť to vzniká až na konci celého procesu. Spíš se bude jednat o editaci vstupního XML - SIP XML.

5) > a pak může SIP poslat znovu ke zpracování v Ingestu

Toto vnímám jako hlavní problém na který poukazujete, vycházím z Vašeho závěru: "možnost spustit znovu ingest, který selhal, s jiným SIP či validačním profilem nebo JSON konfigurací bez nutnosti znovu SIP vkládat (když je stejně nesmazaný a leží v Transfer Area)"

Vámi uváděné možnosti doplňuji a komentuji níže. V každém případě jsou dva způsoby jak nestandartní situace řešit - incidenty (umožní opravu za běhu) nebo pád ingestu (neumožní opravu za běhu).

a) spustit s jinou JSON konfigurací - Pro kroky které mají vlastní JSON konfiguraci by toto mělo být plně funkční v agendě Incidentů. b) spustit s jiným validačním profilem - Zde jsme se již dohodli že se funkcionalitu budeme snažit implementovat formou incidentu, viz https://github.com/LIBCAS/ARCLib/issues/84 c) spustit s jiným SIP profilem - Zde bez hlubšího ponoru odhaduji že je situace o něco komplikovanější než v případě b) ale teoreticky stále řešitelná obdobným způsobem. Tedy je možné že bude implementováno formou incidentu. d) spustit znovu při jakékoliv chybě během jakéhokoliv kroku BPM workflow Zda bude vyvolán incident nebo zabit ingest je otázka implementace každého BPM kroku. I při nespecifikované chybě v kroku můžeme vyvolat incident a ingest nezabíjet. Nelze ale zaručit že výstup nespecifikované opravy nad nespecifikovanou chybou bude validní. Navíc je třeba dbát na to zda je daný krok opakovatelný bez vedelších efektů (v současnosti by takové měly být všechny až po Archival Storage). Konkrétně zmíněné úpravy souborů ve workspace mohou zapříčinit pád následujících kroků (např. prejmenování souboru) nebo znehodnotí výstup předcházejícího kroku (např. editace souboru po tom co byl zkontrolován checksum). V současnosti v těchto případech ingest necháme spadnout. Máme za to že oprava všech bugů by měla všechny nespecifikované chyby výrazně eliminovat, pokud to ale požadujete můžeme vše označit za incidenty. e) BPM kroky Archival Storage - Tyto nelze opakovat bez vedlejších efektů a proto mají zabudovaný vlastní mechanismus opětovných pokusů o uložení. f) Chyby v před a po spuštění BPM workflow - Zde nelze rešit formou incidentů, tyto vždy skončí pádem ingestu.

Cestu vidíme v opravě systémových chyb a podpoře změny Validačního profilu a případně SIP profilu za běhu. Toto by mělo dramaticky redukovat počet selhání ingestu.

Dále zůstávají do budoucna dveře otevřené optimalizaci znovuspuštění ingestu spadnutého na systémové chybě od počátku z transfer area, bez nutnosti SIP manuálně znovu vkládat. Tuto oblast však považujeme za optimalizační a navrhujeme ji provést v případném dalším rozvoji projektu.

6) > administrátor má možnost SIP zcela odmítnout, tedy zrušit Ingest

považuji za splněné

7) > administrátor může také v této fázi přiřadit jiný validační profil a znovu spustit zpracování Ingestu

bude řešeno, viz https://github.com/LIBCAS/ARCLib/issues/84

8) > Ingest obsahuje prostředí dostupné administrátorovi a vkladateli dat, kde je možné procházet data připravená k Ingestu (nebyl spuštěn Ingest)

nesplněné


@jbil7 Popis konfigurace workflow je dostupný zde: https://github.com/LIBCAS/ARCLib/wiki/Ingest-workflow#workflow-config . Prosím o informaci které části jsou nejasné, případně co Vám zde chybí, WIKI rádi doplníme.

Balíky z transfer area používáme při debugování a následně je na serveru opětovně ingestujeme jako důkaz opravy po vyřešení GH issue vázané na konkrétní dávky/balíky. Bez nich bychom měli značně omezené možnost nahlášené chyby reprodukovat. Nedostatek místa je samozřejmě potřeba vyřešit - informován jsem o tom až nyní. Pokud je to vyhovující můžeme překladiště jednorázově promazat tento víkend.

Váš návrh myslím částečně pokrývám v odstavci k FP č. 5. Ingest je možné spustit od počátku (v případě pádu) nebo od kroku na kterém selhal (v případě incidentu). Pokud admin incident úspěšně nevyřeší je tímto manuálně spuštěn rollback, to platí. Není možné dovolit uživateli zvolit krok od kterého se má workflow opět nastartovat a není také možné rozběhnutému ingestu změnit workflow definition (definici procesu za běhu procesu). Je možné zařídit aby vznikalo více incidentů a méně pádů.

jbil7 commented 4 years ago

@yantom Omlouvám se, v případě JSON konfigurace workflow jsem se nejspíše nepřesně vyjádřil. Nejasnou definicí v JSON konfiguraci jsem měl na mysli, když u nějakého pravidla není specifikováno ani true ani false, což za současné situace vede k incidentu. Popis ve Wiki je pro mě v tomto případě poměrně jasný a srozumitelný.

Ano, můj příspěvek se týkal především odstavce k FP č. 5. Šlo mi zejména o rozšíření správy chybových stavů ze strany uživatele, což by se do velké míry vyřešilo body b) až d).

kerschfilip commented 4 years ago

Děkuji za hlubší analýzu a návrhy

@yantom

Souhlasím, že body 1, 2, a 6 jsou splněny

Budeme-li možnosti v bodu 4 interpretovat mimo GUI, pak souhlasím, že i ty jsou splněné. Tato varianta mne nenapadla.

Bod 5: a pak může SIP poslat znovu ke zpracování v Ingestu

zde se bavíme o zastavení ingestu vznikem incidentu (tedy stavu, který lze nazvat "pozastaveno s chybami" viz návrh @jbil7 ) a je třeba vyřešit, v jakých situacích se tak má stát a kdy má ingest naopak prostě spadnout.

zmíněné podbody a) a b) jsou/budou implementovány

pokud by to bylo možné, bylo by skvělé, kdyby se analyzovala i možnost c) spuštění s jiným SIP profilem

podbody e) a f) řešit incidenty nejdou a je to tak i v zájmu fungování systému, tím bych je uzavřel.

hlavní otázkou tak zůstává d) spuštění znovu při jakékoliv chybě během jakéhokoliv kroku BPM workflow

osobně se domnívám, že řešit vzniklý incident novou volbou JSON konfig., validačního profilu nebo SIP profilu jsou dostatečné možnosti. Nevím jak by v praxi vypadala oprava nespecifické chyby administrátorem. Vzhledem k možnosti znehodnocení předchozích kroků nějakým zásahem se obávám, že by zavedení tohoto kroku nevedlo k mnoha výhodám. Zvláště pokud odstranění bugů část nespecifických chyb eliminuje, myslím, že zde by bylo vhodnější nechat ingest spadnout - ponechávám ale k další diskuzi

Jen konstatuji, že body 3 a 8 tedy nejsou splněny, nicméně nevím, co si pod bodem 3 přesně představit a realizace bodu 8 mi nepřijde nijak nutná - pokud chce uživatel "procházet data připravená k ingestu", může se kouknout do transfer area (tedy podobně jako bod 4, v podstatě na to není třeba GUI)

yantom commented 4 years ago

Dle dohody bude implementován i bod 5d s tím že osoba řešící vznikající incidenty je zodpovědná za případné chyby které může způsobit nevhodným zásahem.

U bodu 3 jsme se dohodli že není třeba implementovat.

U bodu 8 padlo rozhodnutí že pokud bude u ingestů v GUI viditelná transfer area, požadavek tím bude naplněn. Transfer area bude u ingestů zobrazena, viz https://github.com/LIBCAS/ARCLib/issues/62 . Doplním pouze že toto ne zcela pokrývá původní požadavek - transfer area bude viditelná pouze v záznamech o ingestu, data které teprve čekají v překladišti na ingest viditelné v GUI nebudou. - není třeba implementovat UI pohled - odsouhlaseno

yantom commented 3 years ago

Implementováno - SIP (5c) i validační (5b) profily nyní obsahují externí ID které lze použít pro překonfigurování použitého profilu v rámci řešení incidentu (viz https://github.com/LIBCAS/ARCLib/wiki/Ingest-workflow#workflow-config). Incident je také vyvolán při jakékoliv nestandartní chybě (5d).

kerschfilip commented 3 years ago

otestovány varianty 5c a 5b, fungují přesně podle doplněné dokumentace, díky!

jbil7 commented 3 years ago

Taktéž jsem otestoval varianty 5c a 5b. Zatímco incident s validačním profilem (5b) se mi podařilo vyřešit, u incidentu se SIP profilem (5c) už jsem neuspěl. Incident jsem simuloval v souvislosti s řešením issue #101 . Po vyvolání incidentu s chybou cvc-datatype-valid.1.2.1: '' is not a valid value for 'date' při procesu metadata_extraction jsem zadal novou workflow konfiguraci JSON s ID opraveného SIP profilu (33) a dle logů a chování ingestu se zdá, že je stále používán původní SIP profil. U incidentu 5b jsem postupoval stejným způsobem. V opraveném SIP profilu chyba nejspíše není - je-li definován na začátku ingestu, např. v profilu dodavatele, k chybě nedojde. Postupoval jsem špatně? Nebo je to tak, že ve fázi metadata_extraction již není změna SIP profilu možná?

Zároveň bych považoval za užitečné, kdyby se incidenty zaznamenávaly nejen do logů, ale i do událostí v ingest workflow na frontendu. Toho jsem si zatím všiml jen u nespecifikovaného continueOnInvalidChecksums, continueOnUnsupportedChecksumType a continueOnMissingFiles. U jiných, nově implementovaných incidentů k zápisu do událostí v tuto chvíli nedochází. Prosím, bylo by to možné (pakliže je s tím řešitelský tým ztotožněn) ještě realizovat?

Předem díky!

kerschfilip commented 3 years ago

Omlouvám se, toho jsem si při testování nevšiml, dnes jsem to vyzkoušel znovu:

Zdá se, že vše funguje správně, je-li incident vyvolán chybou související s validačním profilem. V tomto případě je možné změnit jak validační profil, tak SIP profil a všechno proběhne správně.

Pokud je ale incident vyvolán chybou v SIP profilu (já jsem to zkusil tak, že jsem v SIP profilu vymazal povinný node /mets/@LABEL), pak sice nastane incident, ale vypadá to, že jeho řešení nemá na nic vliv - Ingest workflow skončí znovu incidentem, jakoby nevzalo v potaz nově nastavený (správný) SIP profil a to přesto, že při vzniku druhého (a dalších) incidentů se v nastavení konfigurace na frontendu již zobrazuje ID změněného SIP profilu.

yantom commented 3 years ago

SIP profil je použit jako zdroj transformace v tasku ArclibXml Extractor. Obě odkazované chyby jsou však vyvolány až v kroku ArclibXml generator, kde je dogenerován zbytek AIP XML a provedena validace dle AIP XML schématu. Následná změna SIP profilu v konfiguraci je v tomto případě bezvýsledná, protože task který prováděl transformaci již skončil. Změna SIP profilu je v současnosti účelná v situaci kdy selže samotná transformace, pokud ale transformace proběhně a výsledek je nevalidní, účelná není. Pokusíme se přesunout část validace již do tasku ArclibXml Extractor.

yantom commented 3 years ago

Nasazena nová verze ve které je výsledek transformace ještě v tom stejném tasku a tedy pokud se vyskytne chyba je možné ji opravit změnou SIP profilu. Zároveň jsou všechny incidenty zaznamenány v historii událostí i v AIP XML.

kerschfilip commented 3 years ago

Potvrzuji, že chybu, kterou jsem zkoušel já, je nyní možné vyřešit změnou SIP profilu. Incidenty (zkoušena chyba u validace a SIP profilu) jsou zaznamenány v AIP XML