12.2. Popis funkcionalit
Archival Storage pracuje na nižších úrovních s veškerými nahranými soubory jako s objekty. Do složky daného logického úložiště jsou uloženy:
objekt datové části AIP (ZIP)
1-n AIP XML objektů
pro každý objekt je uložen metadatový soubor s názvem {nazevobjektu}.meta
Metadatový soubor obsahuje údaje nezbytné k rekonstrukci databáze v případě její ztráty:
časovou značku vytvoření
typ kontrolního součtu
původní hodnotu kontrolního součtu
stav
Časová značka vytvoření je shodná pro datový objekt a jeho první AIP XML. V případě že je v systému nad objektem proveden ROLLBACK a následovný opětovný pokus o uložení, objekt stále nese původní časovou značku.
12.2.1. Volitelné funkcionality
Tyto funkcionality jsou v Archival Storage defaultně vypnuty. Lze je povolit v application.yml v sekci arcstorage.optionalFeatures
Forget
Funkcionalita umožňuje úplné smazání balíčku, t.j. i AIP XML a to jak z úložiště tak z DB. Více informací o této funkcionalitě níže v této dokumentaci.
Inkrementální zálohování
Funkcionalita umožňuje inkrementální zálohování, přesněji využití parametru since při volání endpointu pro zálohování.
12.2.2. Stavy objektů
Chybovost úložišť a zapojení více logických úložišť mohou zapříčinit nekonzistentní stav objektu v databázi a na jednotlivých úložištích. Stav DB reflektuje výsledek operace v primárním úložišti, stav na sekundárním úložišti může být jiný, pokud se operace nezdařila.
Například v případě že jsou zapojena dvě logická úložiště (A-primární,B) a požadavek DELETE na úložišti A selže, zatímco na úložišti B projde:
úložiště A bude pravděpodobně obsahovat metadata v původním stavu, např. ARCHIVED
úložiště B bude obsahovat metadata v žádoucím stavu, tedy DELETED
DB bude obsahovat stav DELETION_FAILURE
Stav v DB |
Popis |
Možné stavy na primárním logickém úložišti |
---|---|---|
PRE_PROCESSING |
Úvodní fáze. Během této fáze je kontrolován kontrolní součet po přenosu apod. |
<metadata nepřítomna> |
PROCESSING |
Objekt je ukládán na primární úložiště. |
<metadata nepřítomna> PROCESSING ARCHIVED ROLLED_BACK |
ARCHIVED |
Objekt byl úspěšně uložen na primární úložiště. Započala distribuce na sekundární úložiště. |
ARCHIVED |
ROLLED_BACK |
Objekt byl systémově smazán. |
ROLLED_BACK |
DELETED |
Objekt je smazán, jeho metadata zůstávají na úložišti. Tento stav může nabývat pouze datový objekt. V AIS se tento stav využívá při tvorbě nové datové verze - je smazán původní datový objekt. |
DELETED |
REMOVED |
V AIS nepoužito. |
V AIS nepoužito. |
ARCHIVAL_FAILURE |
Uložení objektu se nezdařilo a následovný (automaticky volaný) pokus o ROLLBACK se také nezdařil. |
<metadata nepřítomna> PROCESSING ARCHIVED ROLLED_BACK |
DELETION_FAILURE |
Smazání objektu se nezdařilo. |
ARCHIVED DELETED |
ROLLBACK_FAILURE |
Systémové mazání objektu se nezdařilo. |
<všechny možnosti> |
FORGOT |
Objekt je smazán z úložiště i z DB. V DB zůstává pouze audit operace a na úložišti pouze jeho metadata. |
FORGOT, ARCHIVED, DELETED, REMOVED, ROLLED_BACK |
Veškeré operace probíhající nad AIP jako celkem jsou prováděny současně nad datovým objektem i první verzí AIP XML. Výjimkou je mazání (DELETED) a jeho případné chybové řízení.
Stavy lze rozdělit do čtyř skupin:
Nedokončené (PRE_PROCESSING, PROCESSING) Při úspěšném uložení na primárním úložišti se objekt přepne do stavu ARCHIVED. V případě chyby na primárním úložišťi je na všechna úložiště zaslán požadavek na ROLLBACK.
Objekt ve stavu PROCESSING může čekat na přidělení vlákna.
Po pádu aplikace již nelze objekt z nedokončeného stavu přepnout do jiného dokončeného stavu než ROLLED_BACK. V případě nastavení arcstorage.cleanUpAtApplicationStart=true je při novém startu aplikace proveden pokus o ROLLBACK takovýchto objektů. V případě neúspěchu zůstává v DB původní stav. Obdobně lze pokus provést voláním POST /api/administration/cleanup?all=true
Dokončené (ARCHIVED, DELETED, ROLLED_BACK, REMOVED) Pouze při těchto stavech je očekáváno že primární logické úložiště obsahuje metadata konzistentní s metadaty v DB. Do těchto stavů lze objekt standardně přepnout skrze API.
Chybové (ARCHIVAL_FAILURE, DELETION_FAILURE, ROLLBACK_FAILURE) Stejně jako v případě nedokončených stavů lze pomoci funkcionality cleanup přepnout objekt do dokončeného stavu. V případě stavu DELETION_FAILURE je příslušným dokončeným stavem stav DELETED, v ostatních případech stav ROLLED_BACK.
Forget (FORGET) Po zavolání forget API je objekt (pokud se jedná o datový objekt pak i všechna jeho AIP XML) smazán v úložišti/úložištích. V úložišti zůstává uchovaný pouze metadatový soubor v němž je garantována pouze přítomnost stavu FORGET (může chybět checksum, časová značka, …). Následně je objekt (objekty) smazán i z DB a průběh operace je zapsán do auditní tabulky.
12.2.3. Periodické kontroly
Archival Storage periodicky kontroluje dostupnost logických úložišť, stav logických úložišť a konzistenci uložených objektů.
Dostupnost logických úložišť
Kontrola dostupnosti všech připojených logických úložišť probíhá v periodě definované v entitě arcstorage_system_state. Hodnotu lze změnit bez nutnosti restartovat aplikaci skrze API. V případě nedostupnosti některého z úložišť je zaslán email všem administrátorům.
Stav logických úložišť
Report stavu všech připojených logických úložišť probíhá v periodě definované v souboru application.yml. Všem administrátorům je v každé periodě zaslán email.
Konzistence uložených objektů
Úloha kontroly konzistence je spouštěna v periodě definované v application.yml. Běh úlohy je vykonán pouze pokud jsou fronty všech úložišť prázdné, v opačném případě je běh přeskočen. Běh kontroluje stav na všech logických úložištích. Kontrolovány jsou pouze objekty datové části AIP (ZIP). Kromě periody je zde konfigurován počet AIPů zkontrolovaných v rámci jedné periody (s možností hodnotu vynechat a kontrolovat tak v rámci každé periody všechny AIPy).
AIPy jsou kontrolovány od nejstaršího po nejnovější. V každém běhu je zkontrolováno n AIPů a po kontrole je v DB zaznačena časová značka posledního zkontrolovaného. Následující perioda pokračuje s balíky od poznačené časové značky. Po zkontrolování všech AIP začíná cyklus odznova. V případě neočekávané chyby během kontroly (např. nedostupného úložiště) je chyba zaznamenána do logu, a příští perioda provádí kontrolu nad stejnou množinou AIP.
Informace o úspěšné kontrole validních AIP není reportována.
V případě nevalidních AIP které jsou v DB vedené jako dokončené je automaticky proveden pokus o opravu invalidní kopie na problémovém úložišti validní kopií na jiném úložišti. O výsledcích opravných pokusů je na konci procesu oprav zaslán email všem administrátorům.
AIPy jež jsou v DB v chybovém stavu nebo jsou v nedokončeném stavu déle než den nejsou automaticky opravovány. O těchto je zaslán samostatný notifikační email všem administrátorům. Email doporučuje úložiště od balíků “očistit” skrze API (cleanup).
12.2.4. Připojení nového úložiště
ADMIN může skrze API připojit nové logické úložiště za běhu systému. Iniciace zapojení je možná pouze pokud jsou fronty všech úložišť prázdné. Po úspěšné odpovědi na volání API startuje na pozadí proces synchronizace dat z primárního na nové sekundární úložiště.
Proces synchronizace nového úložiště
jsou ověřeny vstupní podmínky (systém není v read-only režimu, nové úložiště je dostupné, …)
nové úložiště je zapsáno do DB
systém je přepnut do read-only režimu
čeká se na dokončení všech právě probíhajících transakcí a procesů balíků
v novém úložišti jsou vytvořeny dataspaces a je vytvořena JMS fronta + consumer
do fronty jsou vloženy zprávy COPY pro všechny objekty v Archival Storage
systém je přepnut do read-write režimu
Nastane-li při synchronizaci chyba, úložiště je odpojeno a je zaslán email administátorovi, který může synchronizaci opět spustit zapojením úložiště příslušným endpointem.