Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Nærværende dokument er tiltænkt udviklere og IT-arkitekter med interesse i anvendelsen af XDSCleanup. 

Dokumenthistorik

Version

Dato

Ansvarlig

Beskrivelse

0.1

25.02.2022

KvalitetsIT

Initiel udgave

0.2

10.10.2022

KvalitetsIT

SDS-5785

Introduktion til XDSCleanup

...

Gliffy Diagram
macroId9e6be21f-b8ed-4c47-9b52-b442d3f61d88
displayNameoverblik
nameoverblik
pagePin23


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.

Løsningsdesign

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.

Afkobling af sletning i registry og repository

.

Asynkronitet

Implementationen følger husreglerne for baggrundsjobs og er sikker overfor samtidige kald.

Løsningen for alle oprydningsjobs er en in-memory stak, hvorpå der løbende bliver påfyldt operationer. Operationer bliver altid lagt på stakken i tilfældig rækkefølge.

Følgende afsnit beskriver hvordan stakken af operationer opbygges i hver af de tre oprydningsjobs.

registry-timebased-cleanup

Der benyttes tre typer af operationer.

OperationBeskrivelse
Default operation

Benyttes til at fylde nye operationer på stakken, når stakken er tom.

For hver konfigureret dokumenttype, oprettes en typebasered operation for denne type

Typebaseret operation

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.

Batch oprydningsjobGivet en liste af dokument id'er, slet dokumenterne fra NXRG

registry-status90-cleanup

Der benyttes fire typer af operationer.

OperationBeskrivelse
Default operation

Benyttes til at fylde operationer på stakken, når stakken er tom.

For hvert af tallene 00-99, oprettes en prefix baseret operation 

Prefix baseret operation

Givet et tal mellem 00 og 99, hentes alle borger id'er fra NXRG, som starter med disse cifre.

Opretter en mængde borger id baseret operationer, hver med et konfigurerbart antal af disse borger id'er

Borger id baseret operation

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 en mængde batch oprydningsjobs, hver med et konfigurerbart antal af disse dokument id'er.

Batch oprydningsjobGivet en liste af dokument id'er, slet dokumenterne fra NXRG

repository-cleanup

Der benyttes to typer af operationer.

OperationBeskrivelse
Default operation

Benyttes til at fylde operationer 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.

Batch oprydningsjobGivet en liste af dokument id'er, slet dokumenterne fra OpenXDS

deprecated-document-entries

Der benyttes to typer af operationer.

OperationBeskrivelse
Default operation

Benyttes til at fylde operationer på stakken, når stakken er tom.

For hver konfigureret type kode, oprettes for alle dage i et år oprettes en prefix baseret operation.

Der oprettes (med 2 konfigurerede typekoder)  2*12x31 prefix baserede operationer og prefixet har formen "DDMM". Dvs. for 7. november har den værdien "0711". 

Prefix baseret operation

Henter deprecated document entries ud der er mere end x dage gamle og opretter en mængde batch oprydningsjobs, med et konfigurerbart antal af disse.

Hver prefix baseret operation indeholder kun patientId'er hvor de første 4 tal er identisk med det prefix operationen er oprettet med.

Operationen respekterer den medsendte typekode.

De x antal dage er en konfigurerbar parameter.

Opretter en mængde borger id baseret operationer, hver med et konfigurerbart antal af disse borger id'er.

Batch oprydningsjobGivet en liste af dokument id'er, slet dokumenterne fra NXRG

dangling-submissionsets

Der benyttes to typer af operationer.

OperationBeskrivelse
Default operation

Benyttes til at fylde nye operationer på stakken, når stakken er tom.

For alle kombinationer af 3 karakters string med tegnene 0-9 og a-f oprettes en prefix baseret operation. Dette giver totalt 4096 kombinationer.

Prefix baseret operation

Henter submissionsets ud, der ikke er knyttet til en association, og der oprettes en mængde batch oprydningsjobs, med et konfigurerbart antal af disse.

Hver prefix baseret operation indholder kun entryuuid'er hvor de prefix er "urn:uuid" + de 3 karakterer prefix operationen er oprettet med.

Batch oprydningsjobGivet en liste af submissionsets id'er, slet submissionsets fra NXRG

Afkobling af sletning i registry og repository

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.

Sletningen foregår i to trin: Først slettes dokumentmetadata i NXRG, og derefter slettes selve dokumenterne i OpenXDS. De to skridt er uafhængige af hinanden, og kan i princippet foregå på forskellige tidspunkter. 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.

...

AttributnavnDatatypeIndhold
idint(11)Primary key.
entryuuidvarchar(64)EntryUuid på slettet DocumentEntry.
uniqueidvarchar(64)UniqueId på slettet DocumentEntry
deletion_statusvarchar(64)Status på sletningen. Kan være DELETED_FROM_REGISTRY , DELETED_FROM_REPOSITORY, eller DELETION_FROM_REPOSITORY_FAILED.
deletion_attemptsint(11)Antal gange hvor sletning fra repository er gået galt.
creation_timedatetime(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.

Sletning fra repository'et foregår ved at udvælge et antal rækker fra tabellen, hvor status enten er DELETED_FROM_REGISTRY, eller er DELETION_FROM_REPOSITORY_FAILED samtidig med at deletion_attempts er lavere end en vis grænse. Disse dokumenter slettes i repository'et, og rækkerne i deleted_documententries opdateres. Hvis sletningen går godt, så sættes deletion_status til DELETED_FROM_REPOSITORY, og sletningen af dette dokument 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.Værdien af den førnævnte grænse for antal sletningsforsøg er konfigurerbar. Se driftsvejledningen for flere detaljer om dette.

deletion_attempts kolonnen vedligeholdes for at skabe overblik, og benyttes udelukkende af health endpointet.

Konfiguration af sletninger

...

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.

Beregning af dokumentalder

...

  • documententries - her slettes de indgange, der er udvalgt ud fra dokumenttype og alder samt for afdøde personer. 
  • associations - her slettes de indgange, der refererer til et DocumentEntry der skal slettes.
  • submissionsets - her slettes de submissionsets, der ville have været tomme efter sletning fra documententries.

...

Sletning fra OpenXDS foregår ved at hente et batch af slettede dokumentmetadata fra deleted_documententries-tabellen, slette dem fra openxds, og derefter markere i slette rækkerne fra deleted_documententries-tabellen at sletningen er fuldført. 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, og antallet af forsøgte sletninger forøges med én. Hvis antallet af forsøgte sletninger kommer over en vis grænse, så forsøges sletning ikke længere, og situationen kræver formentlig manuel indgriben.