1. Komponenter

Dette dokument dækker følgende komponenter på NSP:

  • NSP XDS Registry Felt migrerings service

  • Type: Webservice

  • Filnavn: nxrgfieldmigration.war

  • Url: <serverurl>/nxrgfieldmigration

  • Servicecheckurl: <serverurl>/nxrgfieldmigration/status

  • Versionurl: <serverurl>/nxrgfieldmigration/health

Formålet med servicen er beskrevet i design og arkitektur dokumentets afsnit  felt migrering".

2. Klargøring før felt migrering

Inden man kan køre en feltmigrering, skal følgende ting være på plads. Disse klargøres i forbindelse med udvikling af komponenten og oprettes på systemet når NXRG installeres/opgraderes.

  • Database script til at indsætte ny række/felt migrering i fieldmigrationstatus. Dette findes som liquidbase script  for NXRG servicen.
  • Database script der tilføjer det søgbare felt til f.eks. documententries eller anden relevant tabel. Dette findes som liquidbase script  for NXRG servicen. Det er her NXRG og felt migreringen gemmer den søgbare værdi.
  • En kørende version af NXRG, der sørger for at nye dokumentregistreringer gemmer data i det (nye) søgbare felt (migreringen håndterer kun registreringer eksisterende på det tidspunk ny version af NXRG installeres)

Ovenstående 3 punkter skal være inkluderet i samme NXRG release, og når den er installeret, er migreringen klar til at blive kørt (se afsnit nedenfor) på samme version.

3. Konfiguration

3.1.1. Servicekonfiguration

Grundlæggende konfiguration foregår ved redigering i filen nxrgfieldmigration.properties,  der placeres i følgende WildFly modul:

/pack/wildfly/modules/sds/nxrgfieldmigration/configuration/main/

Moduldefinitionen er at finde i sourcekoden til nxrg under:

/compose/configuration/fieldmigration/module.xml

I filen skal følgende properties være definerede:

Property

Beskrivelse

datasource.jndi.name

JNDI navnet på den datasource der giver adgang til NXRG databasen.

nxrg.data.max.no.of.documentsAngiver, hvor mange dokument registreringer (antal database records) der skal håndteres i een kørsel. Større antal tager længere tid.

3.1.2. log4j konfiguration

Log4j konfiguration findes i samme wildfly modul som servicekonfigurationen

Se yderligere opsætning i installationsvejledningen.

4. Overvågning

NXRG felt migrering udstiller en overvågningsside på endpoint <serverurl>/nxrgfieldmigration/status

Overvågningssiden returnerer enten:

  • HTTP 200, hvis servicen i øjeblikket kører fint og der er forbindelse til databasen.
  • HTTP 500, hvis der er opstået en fejl der kræver indgriben.

5. Status

NXRG udstiller to status sider

5.1.  Version

Udstilles på endpoint <serverurl>/nxrgfieldmigration/health

Eksempel på status:

{
   "version":"1.0.14-SNAPSHOT"
}

Den fortæller, hvilken version af felt migrering servicen, som kører.

5.2. Migrerings status

Udstilles på endpoint <serverurl>/nxrgfieldmigration/fieldmigrationstatus

Eksempel på status:

[
   {
      "id":1,
      "migrationid":"documententry-repositoryid-add",
      "progressid":121,
      "targetid":121,
      "migrationStartTime":"2022-05-18T12:09:13Z",
      "migrationEndTime":"2022-05-18T12:11:35Z",
      "lastUpdateTime":"2022-05-18T12:11:35.886375Z"
   }
]

For hver felt migrering, som findes til NXRG, findes der en sådan record på status siden. Har felt migrering aldrig været kørt vil ovenstående have 0 i progressid samt null i migrationStartTime og migrationEndTime.

Felt

Beskrivelse

id

En intern nøgle

migrationid

Navnet på migrering af feltet. Siger noget om, hvad der migreres

progressid

peger på en dokument registrering (id i documentEntries tabellen).

Er 0 sålænge migreringen ikke er startet. Når en migrering er kørt, vil progressid pege på den sidste documentEntries, der er migreret i kørslen.

Man kan ikke forvente at progressid bliver større ved hver migrering. Rækkefølge afhænger af creation_time på documentEntries.

Fejler valideringen af kørslen (batch) vil progressId ikke blive justeret op.

Når migrationid rammer targetid, er der ikke mere at migrere. 

targetid

peger på den sidste dokument registrering (id i documentEntries tabellen), der skal migreres.

Når migrationid rammer denne værdi, er der ikke mere at migrere.

Targetid er ikke nødvendigvis det største id på tidspunktet for indsættelse. Det afhænger af creation_time på documentEntries.

migrationStartTimetidspunkt for, hvornår den første kørsel af migreringen er startet. Er værdien null har migrering af feltet aldrig været startet
migrationEndTimetidspunkt for, hvornår migreringen er afsluttet (da progressid ramte targetid og den afsluttende validering gik godt)
lastUpdagtedTimetidspunkt for, hvornår data for feltmigreringen senest er opdateret


6. Kørsel af felt migrering

Se afsnit "klargøring af felt migrering" først. Herefter kontroller at property nxrg.data.max.no.of.documents er sat til ønsket værdi.

For at aktivere en migrering anvendes servicens endpoint: <serverurl>/nxrgfieldmigration/fieldmigrationrun

Nu startes der en migrering for de "migrationid'er" som findes i listen man ser, når man tjekker migrerings status (se ovenfor). Er migrationEndTime udfyldt er der ikke noget at migrere. Men ellers køres der migering på det antal registreringer, der er angivet i property nxrg.data.max.no.of.documents.

Rækkefølgende migreringen tager fra i records på, er bestemt at documentEntries felterne creation_time og id. Sådan at ældste records migreres først og yngest sidst. Falder flere records på samme tidspunkt, tages det mindste id først.

For den enkelte migrering kan der være validering implementeret. Er der fejl i denne migrering skal fejl skrives til applikationsloggen.  Fejler validering på batch niveau, justeres progressId ikke op. Er der fejl på slut validering, sættes migrationEndTime ikke.

Når migeringen afslutter får man følgende besked

{
   "MigrationCompletion":"Migrering udført. Tjek log fil for detaljer"
}


7. Kontrol af felt migrering

Når migreringen er kørt færdig kan felt migerings status kontrolleres med <serverurl>/nxrgfieldmigration/fieldmigrationstatus og felt migrerings applikationsloggen undersøges.

Eksempel på indhold af applikations loggen:


2022-05-23 15:36:38,293 [INFO] dk.nsp.nxrg.field.migration.service.impl.FieldMigrationServiceImpl - Migrerer felt data for NXRG ...
2022-05-23 15:36:38,294 [INFO] dk.nsp.nxrg.field.migration.service.model.ComplexFieldMigration - Tjekker migrering for: documententry-repositoryid-add
2022-05-23 15:36:38,322 [INFO] dk.nsp.nxrg.field.migration.service.model.ComplexDocumentEntryFieldMigration - Henter et batch dokumententries. Batch størrelse er: 20, progressId er 180 og targetid er: 186
2022-05-23 15:36:38,432 [INFO] dk.nsp.nxrg.field.migration.service.model.AddRepositoryUniqueId - Alle RepositoryUniqueIds i batch er migreret
2022-05-23 15:36:38,432 [INFO] dk.nsp.nxrg.field.migration.service.model.ComplexDocumentEntryFieldMigration - Batch validering gik godt. Opdaterer progressId med: 186
2022-05-23 15:36:38,447 [INFO] dk.nsp.nxrg.field.migration.service.model.ComplexDocumentEntryFieldMigration - TargetId er lig med progressId. Slut validering kan udføres
2022-05-23 15:36:38,447 [INFO] dk.nsp.nxrg.field.migration.service.model.ComplexDocumentEntryFieldMigration - Slut validering gik godt. Migreringen afsluttes
2022-05-23 15:36:38,459 [INFO] dk.nsp.nxrg.field.migration.service.impl.FieldMigrationServiceImpl - Migrering af felt data for NXRG er færdig. Anvendt tid er: 0 sekunder

Linie 2 fortæller, hvilken migrering, der starter op.

Linie  3 siger noget om batch størrelse, progressId og  targitId på start tidspunktet

Eksemplets specfikke migrering logger her i linie 4, at valideringen (RepositoryUniqueId er udfyldt) gik godt. Var det en registring, hvor feltet ikke kunne udfyldes, ville man se en linie med: "RepositoryUniqueId er blank for entryuuid: 123"

Linie 5 fortæller, hvilet progresId der nu er migreret.

Linie 6 at man er nået til enden på migreringen og slut validering udføres. Herefter linie 7 med resultat af slut validering.

Til sidst kan man se, hvor længe kørslen tog.

8. Faktiske migreringer implementeret

8.1.  Migrering af repositoryUniqueId

MigrationidDatabase feltBeskrivelse
documententry-repositoryid-adddocumententries.repository_uniqueid

RIM format for eksisterende documententries migreres til det nye database felt.

Efter et batch er migreret valideres at feltet er udfyldt for alle documententries. Er det ikke det, afsluttet batches ikke (processid justeres ikke op)









  • No labels