Skip to content

Commit 28e032f

Browse files
Sletter opplysnigner innenfor samme opplysninger_id. Satt en begrensing som kan styres over hvor mange opplysninger som hører til samme opplysninger liste som skal slettes.
Co-authored-by: Richard André Martinsen <[email protected]>
1 parent 4ee0f24 commit 28e032f

File tree

4 files changed

+75
-22
lines changed

4 files changed

+75
-22
lines changed

mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/ApplicationBuilder.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import no.nav.dagpenger.behandling.db.PostgresDataSourceBuilder.runMigration
1212
import no.nav.dagpenger.behandling.mediator.api.ApiMessageContext
1313
import no.nav.dagpenger.behandling.mediator.api.behandlingApi
1414
import no.nav.dagpenger.behandling.mediator.audit.ApiAuditlogg
15+
import no.nav.dagpenger.behandling.mediator.jobber.SlettFjernetOpplysninger
1516
import no.nav.dagpenger.behandling.mediator.melding.PostgresHendelseRepository
1617
import no.nav.dagpenger.behandling.mediator.mottak.ArenaOppgaveMottak
1718
import no.nav.dagpenger.behandling.mediator.mottak.SakRepositoryPostgres
@@ -20,6 +21,7 @@ import no.nav.dagpenger.behandling.mediator.repository.AvklaringRepositoryPostgr
2021
import no.nav.dagpenger.behandling.mediator.repository.BehandlingRepositoryPostgres
2122
import no.nav.dagpenger.behandling.mediator.repository.OpplysningerRepositoryPostgres
2223
import no.nav.dagpenger.behandling.mediator.repository.PersonRepositoryPostgres
24+
import no.nav.dagpenger.behandling.mediator.repository.VaktmesterPostgresRepo
2325
import no.nav.dagpenger.behandling.objectMapper
2426
import no.nav.dagpenger.opplysning.Opplysningstype
2527
import no.nav.dagpenger.regel.RegelverkDagpenger
@@ -80,7 +82,7 @@ internal class ApplicationBuilder(
8082
ArenaOppgaveMottak(rapidsConnection, SakRepositoryPostgres())
8183

8284
// Start jobb som sletter fjernet opplysninger
83-
// SlettFjernetOpplysninger.slettOpplysninger(VaktmesterPostgresRepo())
85+
SlettFjernetOpplysninger.slettOpplysninger(VaktmesterPostgresRepo())
8486

8587
avklaringRepository.registerObserver(
8688
AvklaringKafkaObservatør(

mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ internal object SlettFjernetOpplysninger {
1919
action = {
2020
try {
2121
if (System.getenv("NAIS_CLUSTER_NAME") == "dev-gcp") {
22-
vaktmesterRepository.slettOpplysninger().also {
22+
vaktmesterRepository.slettOpplysninger(antall = 1).also {
2323
logger.info { "Har slettet ${it.size} fjernede opplysninger" }
2424
}
2525
}

mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt

Lines changed: 65 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,48 +14,93 @@ private val logger = KotlinLogging.logger {}
1414
internal class VaktmesterPostgresRepo {
1515
companion object {
1616
val låsenøkkel = 121212
17+
private val logger = KotlinLogging.logger {}
1718
}
1819

19-
fun slettOpplysninger(): List<UUID> {
20-
val antall = mutableListOf<UUID>()
20+
fun slettOpplysninger(antall: Int = 10): List<UUID> {
21+
val slettet = mutableListOf<UUID>()
2122
using(sessionOf(dataSource)) { session ->
2223
session.transaction { tx ->
2324
tx.medLås(låsenøkkel) {
24-
hentAlleOpplysningerSomErFjernet(tx).forEach { opplysningId ->
25-
slettOpplysningVerdi(opplysningId).run(tx)
26-
slettOpplysningUtledet(opplysningId).run(tx)
27-
slettOpplysningLink(opplysningId).run(tx)
28-
slettOpplysningUtledning(opplysningId).run(tx)
29-
slettErstatteAv(opplysningId).run(tx)
30-
slettOpplysning(opplysningId).run(tx)
31-
antall.add(opplysningId)
25+
hentAlleOpplysningerSomErFjernet(tx, antall).forEach { opplysninger ->
26+
opplysninger.forEach { opplysningId ->
27+
val liste = mutableListOf<BatchStatement>()
28+
liste.add(slettOpplysningVerdi(opplysningId))
29+
liste.add(slettOpplysningUtledet(opplysningId))
30+
liste.add(slettOpplysningLink(opplysningId))
31+
liste.add(slettOpplysningUtledning(opplysningId))
32+
liste.add(slettErstatteAv(opplysningId))
33+
liste.add(slettOpplysning(opplysningId))
34+
liste.forEach { batch ->
35+
batch.run(tx)
36+
}
37+
slettet.add(opplysningId)
38+
}
3239
}
3340
}
3441
}
3542
}
36-
return antall
43+
return slettet
3744
}
3845

39-
private fun hentAlleOpplysningerSomErFjernet(tx: TransactionalSession): List<UUID> {
46+
private fun hentAlleOpplysningerSomErFjernet(
47+
tx: TransactionalSession,
48+
antall: Int,
49+
): List<List<UUID>> {
50+
val opplysningerIder = hentOpplysningerIder(tx, antall)
51+
4052
//language=PostgreSQL
4153
val query =
4254
"""
43-
SELECT *
55+
SELECT id
4456
FROM opplysning
45-
WHERE fjernet = true
46-
ORDER BY opprettet DESC;
57+
INNER JOIN opplysninger_opplysning op ON opplysning.id = op.opplysning_id
58+
WHERE fjernet = true AND op.opplysninger_id = :opplysninger_id
59+
ORDER BY op.opplysninger_id, opprettet DESC;
4760
""".trimIndent()
61+
4862
val opplysninger =
63+
opplysningerIder.map { id ->
64+
tx.run(
65+
queryOf(
66+
query,
67+
mapOf("opplysninger_id" to id),
68+
).map { row ->
69+
row.uuid("id")
70+
}.asList,
71+
)
72+
}
73+
74+
logger.info { "Fant ${opplysninger.size} opplysninger som er fjernet og som skal slettes" }
75+
return opplysninger
76+
}
77+
78+
private fun hentOpplysningerIder(
79+
tx: TransactionalSession,
80+
antall: Int,
81+
): List<UUID> {
82+
//language=PostgreSQL
83+
val test =
84+
"""
85+
SELECT DISTINCT (op.opplysninger_id) AS opplysinger_id
86+
FROM opplysning
87+
INNER JOIN opplysninger_opplysning op ON opplysning.id = op.opplysning_id
88+
WHERE fjernet = true
89+
LIMIT :antall;
90+
""".trimIndent()
91+
92+
val opplysningerIder =
4993
tx.run(
5094
queryOf(
51-
query,
52-
mapOf("fjernet" to true),
95+
test,
96+
mapOf("antall" to antall),
5397
).map { row ->
54-
row.uuid("id")
98+
row.uuid("opplysinger_id")
5599
}.asList,
56100
)
57-
logger.info { "Fant ${opplysninger.size} opplysninger som er fjernet og som skal slettes" }
58-
return opplysninger
101+
102+
logger.info { "Skal slette opplysninger tilhørende opplysinger_id: ${opplysningerIder.joinToString("\n") { it.toString() }}" }
103+
return opplysningerIder
59104
}
60105

61106
private fun slettErstatteAv(opplysningId: UUID) =

mediator/src/test/kotlin/no/nav/dagpenger/behandling/PersonMediatorTest.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import no.nav.dagpenger.behandling.mediator.repository.BehandlingRepositoryPostg
3333
import no.nav.dagpenger.behandling.mediator.repository.OpplysningerRepositoryPostgres
3434
import no.nav.dagpenger.behandling.mediator.repository.PersonRepository
3535
import no.nav.dagpenger.behandling.mediator.repository.PersonRepositoryPostgres
36+
import no.nav.dagpenger.behandling.mediator.repository.VaktmesterPostgresRepo
3637
import no.nav.dagpenger.behandling.mediator.toMap
3738
import no.nav.dagpenger.behandling.modell.Behandling
3839
import no.nav.dagpenger.behandling.modell.Behandling.TilstandType.UnderOpprettelse
@@ -521,6 +522,7 @@ internal class PersonMediatorTest {
521522
@Test
522523
fun `endring av prøvingsdato`() {
523524
withMigratedDb {
525+
val vaktmester = VaktmesterPostgresRepo()
524526
val testPerson =
525527
TestPerson(
526528
ident,
@@ -614,6 +616,10 @@ internal class PersonMediatorTest {
614616
withClue("Skal kun ha opplysninger nødvendig for avslag") {
615617
godkjennOpplysninger("avslag")
616618
}
619+
620+
// Sletter opplysninger som ikke lenger er relevante
621+
val slettedeOpplysninger = vaktmester.slettOpplysninger()
622+
slettedeOpplysninger.shouldNotBeEmpty()
617623
}
618624
}
619625

0 commit comments

Comments
 (0)