XDSCleanup-servicen foretager sletning af dokumentmetadata og dokumenter fra NXRG og OpenXDS.
Formålet med dette dokument er at beskrive systemarkitekturen for XDSCleanup.
Nærværende dokument er tiltænkt udviklere og IT-arkitekter med interesse i anvendelsen af XDSCleanup.
Version | Dato | Ansvarlig | Beskrivelse |
0.1 | 25.02.2022 | KvalitetsIT | Initiel udgave |
0.2 | 10.10.2022 | KvalitetsIT | SDS-5785 |
XDSCleanup-servicen giver mulighed for at slette dokumentmetadata fra NXRG-registry'et, og efterfølgende slette de tilsvarende dokumenter i Opentext-repository'et. Servicens sammenhæng med andre relevante komponenter er vist i nedenstående diagram.
![]()
Diagrammet viser to databaser: Metadata, som er den database der vedligeholdes og ejes af NXRG, og Dokumenter, som er den database der vedligeholdes og ejes af OpenXDS. Som det fremgår af diagrammet, fungerer XDSCleanup ved at læse/skrive direkte i disse databaser, og altså ikke gennem ITI-snitfladerne.
XDSCleanup sletter også dokumenter baseret på afdøde personer. Derfor indgår SDM databasen også i løsningen. Der læses alene fra denne database.
XDSCleanup er implementeret på NSP-platformen, og udstiller et antal servlets som kaldes af driften. Detaljer om disse snitflader findes i driftsvejledningen. Meningen er at oprydningssnitfladen kaldes med jævne mellemrum, hvilket vil udvælge et antal dokumenter til sletning, og derefter slette dem.
Der skrives til applikationsloggen, hvad der bliver slettet. Det er dokumenteret i større detalje i driftsvejledningen hvad der logges.
Implementationen følger husreglerne for baggrundsjobs og understøtter derfor samtidige kørsler af alle oprydningsjobs.
Løsningen for alle oprydningsjobs er en in-memory stak, hvorpå der løbende bliver påfyldt elementer til at udføre oprydningen. Elementer bliver altid lagt på stakken i tilfældig rækkefølge.
Ved hver kørsel, bliver der enten fyldt nye elementer på stakken, eller der bliver taget et element fra stakken, som bliver udført.
Elementer på stakken kan enten være en operation til at udføre en oprydning eller en supplier, der levere flere elementer til stakken.
Følgende afsnit beskriver hvordan stakken af elementer opbygges i hver af de tre oprydningsjobs.
Der benyttes to typer af suppliers og en operation:
| Supplier | Beskrivelse |
|---|---|
| Default supplier | Benyttes til at fylde elementer på stakken, når stakken er tom. For hver konfigureret dokumenttype, oprettes en tidsbaseret supplier for denne type |
| Tidsbaseret supplier | Givet en dokumenttype og tilhørende konfiguration, hentes id'er på alle matchende dokumenter i NXRG databasen Opretter en mængde batch oprydningsjobs, hver med et konfigurerbart antal af disse dokument id'er. |
| Operation | Beskrivelse |
|---|---|
| Batch oprydningsjob | Givet en liste af dokument id'er, slet dokumenterne fra NXRG |
Der benyttes tre typer af suppliers og samme operation som for registry-timebased-cleanup.
| Supplier | Beskrivelse |
|---|---|
| Default supplier | Benyttes til at fylde elementer på stakken, når stakken er tom. For hvert af tallene 0-9, oprettes en suffix baseret supplier |
| Suffix baseret supplier | Givet et tal, hentes alle borger id'er fra NXRG, som slutter på dette tal Opretter en mængde batch suppliers, hver med et konfigurerbart antal af disse borger id'er |
| Batch supplier | Givet en liste af borger id'er, tages de id'er der tilhører afdøde (status 90) borgere. Henter id'er på dokumenter i NXRG databasen for disse borger id'er. Opretter et batch oprydningsjob for disse dokument id'er. |
Der benyttes en enkelt supplier og en operation.
| Supplier | Beskrivelse |
|---|---|
| Default supplier | Benyttes til at fylde elementer på stakken, når stakken er tom. Henter id'er på alle slettede dokumenter fra NXRG, som endnu ikke er slettet i OpenXDS Opretter en mængde batch oprydningsjobs, hver med et konfigurerbart antal af disse dokument id'er. |
| Operation | Beskrivelse |
|---|---|
| Batch oprydningsjob | Givet en liste af dokument id'er, slet dokumenterne fra OpenXDS |
Sletning i registry og repository foregår i seperate servlets, som kan køres uafhængigt af hinanden.
Sletning af dokumentmetadata i NXRG vil dog altid ske før sletning af dokumenterne i OpenXDS.
Når dokumentmetadata er slettet i NXRG, bliver dette skrevet til tabellen deleted_documententries, som udgør en log over slettede metadata. Sletningen fra OpenXDS foregår med udgangspunkt i tabellen deleted_documententries. Denne tabel vedligeholdes af NXRG, men tabellens indhold er for overblikkets skyld gengivet nedenfor.
Tabellen indeholder følgende attributter:
| Attributnavn | Datatype | Indhold |
|---|---|---|
| id | int(11) | Primary key. |
| entryuuid | varchar(64) | EntryUuid på slettet DocumentEntry. |
| uniqueid | varchar(64) | UniqueId på slettet DocumentEntry |
| deletion_status | varchar(64) | Status på sletningen. Kan være DELETED_FROM_REGISTRY eller DELETION_FROM_REPOSITORY_FAILED. |
| deletion_attempts | int(11) | Antal gange hvor sletning fra repository er gået galt. |
| creation_time | datetime(6) | Tidspunkt for indsættelse af rækken. |
Hver række i tabellen svarer til et slettet DocumentEntry. Ved indsættelse af en række bliver deletion_status sat til DELETED_FROM_REGISTRY, hvilket indikerer at dokumentet er slettet fra registry'et, men endnu ikke fra repository'et.
En kørsel af repository slettejobbet vil hente alle rækker ud af tabellen og forsøge at slette en delmængde af disse fra OpenXDS. Hvis sletningen går godt, slettes rækkerne fra tabellen, og sletningen af disse dokumenter er færdig. Hvis sletningen mislykkes, sættes deletion_status til DELETION_FROM_REPOSITORY_FAILED, og deletion_attempts tælles én op.
deletion_attempts kolonnen vedligeholdes for at skabe overblik, og benyttes udelukkende af health endpointet.
XDSCleanup-servicen konfigureres med et antal oprydningskriterier , som beskriver hvilke dokumenter der skal slettes hvornår. Et oprydningskriterium består af en dokumenttype og en dokumentalder i måneder. Ved kørsel bliver der for hver specifikation udvalgt et antal dokumenter, som har den angivne type, og er ældre end den maksimale alder. Herefter slettes disse dokumenter.
Det er muligt at konfigurere sletning af dokumenter hørende til personer med status 90 (=døde). I opsætningen kan man angive hvor lang tid dokumenterne for disse personer skal gemmes.
Herudover er det muligt at konfigurere antallet af sletninger der skal foretages ved hver kørsel.
Alderen for et dokument beregnes ved først at kigge på attributten deletetrigger_time som er et felt, der vedligeholdes i databasen og er en funktion: COALESCE(servicestarttime, creation_time). CreationTime er en påkrævet attribut, men det er serviceStartTime ikke. Hvis dokumentets alder er større end det konfigurerede antal måneder, så slettes dokumentet.
I NXRG slettes data i følgende tabeller:
Der slettes desuden data fra de såkaldte 'content'-tabeller, som indeholder en xml-repræsentation af ovenstående objekter, samt fra tabellerne documententry_author, documententry_confidentialtycode, documententry_eventcode og documententry_referenceid.
NB: Der slettes pt. ikke documententries, som er relateret til de slettede documententries gennem associations-tabellen. Med relateret objekt menes f.eks. et dokument, som er en tilføjelse til et andet dokument (gennem en APPEND-association), et dokument som er en erstatning for et andet dokument (gennem en REPLACE-association), osv. Disse dokumenter vil dog blive slettet på et andet tidspunkt, såfremt XDSCleanup-servicen konfigureres til det.
I OpenXDS slettes data i følgende tabeller:
Som tidligere beskrevet bliver slettede metadata vedligeholdt i en særlig tabel, deleted_documententries. Sletning af metadata fungerer ved først at udvælge et datasæt til sletning (dokumenter, associations og submissionsets), og derefter slette datasættet og markere sletningen som udført i deleted_documententries-tabellen. Sletningen og slettemarkeringen udføres i en transaktion, således at der er konsistens i hvad der er slettet, og hvad der er markeret som slettet.
Sletning fra OpenXDS foregår ved at hente et batch af slettede dokumentmetadata fra deleted_documententries-tabellen, slette dem fra openxds, og derefter slette rækkerne fra deleted_documententries-tabellen. Bemærk at der her indgår to databaser, så det er ikke tilstrækkeligt at udføre hele operationen i en transaktion. Hvis sletningen i repository'et mislykkes, så markeres sletningen som fejlet.