Skip to content

Commit

Permalink
Merge pull request #174 from navikt/sletteBug
Browse files Browse the repository at this point in the history
Slette bug
  • Loading branch information
geiralund authored Jan 14, 2025
2 parents b2912c0 + 659df6f commit 8a53510
Show file tree
Hide file tree
Showing 5 changed files with 132 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import no.nav.dagpenger.behandling.db.PostgresDataSourceBuilder.runMigration
import no.nav.dagpenger.behandling.mediator.api.ApiMessageContext
import no.nav.dagpenger.behandling.mediator.api.behandlingApi
import no.nav.dagpenger.behandling.mediator.audit.ApiAuditlogg
import no.nav.dagpenger.behandling.mediator.jobber.SlettFjernetOpplysninger
import no.nav.dagpenger.behandling.mediator.melding.PostgresHendelseRepository
import no.nav.dagpenger.behandling.mediator.mottak.ArenaOppgaveMottak
import no.nav.dagpenger.behandling.mediator.mottak.SakRepositoryPostgres
Expand All @@ -20,6 +21,7 @@ import no.nav.dagpenger.behandling.mediator.repository.AvklaringRepositoryPostgr
import no.nav.dagpenger.behandling.mediator.repository.BehandlingRepositoryPostgres
import no.nav.dagpenger.behandling.mediator.repository.OpplysningerRepositoryPostgres
import no.nav.dagpenger.behandling.mediator.repository.PersonRepositoryPostgres
import no.nav.dagpenger.behandling.mediator.repository.VaktmesterPostgresRepo
import no.nav.dagpenger.behandling.objectMapper
import no.nav.dagpenger.opplysning.Opplysningstype
import no.nav.dagpenger.regel.RegelverkDagpenger
Expand Down Expand Up @@ -80,7 +82,7 @@ internal class ApplicationBuilder(
ArenaOppgaveMottak(rapidsConnection, SakRepositoryPostgres())

// Start jobb som sletter fjernet opplysninger
// SlettFjernetOpplysninger.slettOpplysninger(VaktmesterPostgresRepo())
SlettFjernetOpplysninger.slettOpplysninger(VaktmesterPostgresRepo())

avklaringRepository.registerObserver(
AvklaringKafkaObservatør(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ internal object SlettFjernetOpplysninger {
action = {
try {
if (System.getenv("NAIS_CLUSTER_NAME") == "dev-gcp") {
vaktmesterRepository.slettOpplysninger().also {
vaktmesterRepository.slettOpplysninger(antall = 1).also {
logger.info { "Har slettet ${it.size} fjernede opplysninger" }
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,48 +14,93 @@ private val logger = KotlinLogging.logger {}
internal class VaktmesterPostgresRepo {
companion object {
val låsenøkkel = 121212
private val logger = KotlinLogging.logger {}
}

fun slettOpplysninger(): List<UUID> {
val antall = mutableListOf<UUID>()
fun slettOpplysninger(antall: Int = 10): List<UUID> {
val slettet = mutableListOf<UUID>()
using(sessionOf(dataSource)) { session ->
session.transaction { tx ->
tx.medLås(låsenøkkel) {
hentAlleOpplysningerSomErFjernet(tx).forEach { opplysningId ->
slettOpplysningVerdi(opplysningId).run(tx)
slettOpplysningUtledet(opplysningId).run(tx)
slettOpplysningLink(opplysningId).run(tx)
slettOpplysningUtledning(opplysningId).run(tx)
slettErstatteAv(opplysningId).run(tx)
slettOpplysning(opplysningId).run(tx)
antall.add(opplysningId)
hentAlleOpplysningerSomErFjernet(tx, antall).forEach { opplysninger ->
opplysninger.forEach { opplysningId ->
val liste = mutableListOf<BatchStatement>()
liste.add(slettOpplysningVerdi(opplysningId))
liste.add(slettOpplysningUtledet(opplysningId))
liste.add(slettOpplysningLink(opplysningId))
liste.add(slettOpplysningUtledning(opplysningId))
liste.add(slettErstatteAv(opplysningId))
liste.add(slettOpplysning(opplysningId))
liste.forEach { batch ->
batch.run(tx)
}
slettet.add(opplysningId)
}
}
}
}
}
return antall
return slettet
}

private fun hentAlleOpplysningerSomErFjernet(tx: TransactionalSession): List<UUID> {
private fun hentAlleOpplysningerSomErFjernet(
tx: TransactionalSession,
antall: Int,
): List<List<UUID>> {
val opplysningerIder = hentOpplysningerIder(tx, antall)

//language=PostgreSQL
val query =
"""
SELECT *
SELECT id
FROM opplysning
WHERE fjernet = true
ORDER BY opprettet DESC;
INNER JOIN opplysninger_opplysning op ON opplysning.id = op.opplysning_id
WHERE fjernet = true AND op.opplysninger_id = :opplysninger_id
ORDER BY op.opplysninger_id, opprettet DESC;
""".trimIndent()

val opplysninger =
opplysningerIder.map { id ->
tx.run(
queryOf(
query,
mapOf("opplysninger_id" to id),
).map { row ->
row.uuid("id")
}.asList,
)
}

logger.info { "Fant ${opplysninger.size} opplysninger som er fjernet og som skal slettes" }
return opplysninger
}

private fun hentOpplysningerIder(
tx: TransactionalSession,
antall: Int,
): List<UUID> {
//language=PostgreSQL
val test =
"""
SELECT DISTINCT (op.opplysninger_id) AS opplysinger_id
FROM opplysning
INNER JOIN opplysninger_opplysning op ON opplysning.id = op.opplysning_id
WHERE fjernet = true
LIMIT :antall;
""".trimIndent()

val opplysningerIder =
tx.run(
queryOf(
query,
mapOf("fjernet" to true),
test,
mapOf("antall" to antall),
).map { row ->
row.uuid("id")
row.uuid("opplysinger_id")
}.asList,
)
logger.info { "Fant ${opplysninger.size} opplysninger som er fjernet og som skal slettes" }
return opplysninger

logger.info { "Skal slette opplysninger tilhørende opplysinger_id: ${opplysningerIder.joinToString("\n") { it.toString() }}" }
return opplysningerIder
}

private fun slettErstatteAv(opplysningId: UUID) =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import no.nav.dagpenger.behandling.mediator.repository.BehandlingRepositoryPostg
import no.nav.dagpenger.behandling.mediator.repository.OpplysningerRepositoryPostgres
import no.nav.dagpenger.behandling.mediator.repository.PersonRepository
import no.nav.dagpenger.behandling.mediator.repository.PersonRepositoryPostgres
import no.nav.dagpenger.behandling.mediator.repository.VaktmesterPostgresRepo
import no.nav.dagpenger.behandling.mediator.toMap
import no.nav.dagpenger.behandling.modell.Behandling
import no.nav.dagpenger.behandling.modell.Behandling.TilstandType.UnderOpprettelse
Expand Down Expand Up @@ -521,6 +522,7 @@ internal class PersonMediatorTest {
@Test
fun `endring av prøvingsdato`() {
withMigratedDb {
val vaktmester = VaktmesterPostgresRepo()
val testPerson =
TestPerson(
ident,
Expand Down Expand Up @@ -614,6 +616,10 @@ internal class PersonMediatorTest {
withClue("Skal kun ha opplysninger nødvendig for avslag") {
godkjennOpplysninger("avslag")
}

// Sletter opplysninger som ikke lenger er relevante
val slettedeOpplysninger = vaktmester.slettOpplysninger()
slettedeOpplysninger.shouldNotBeEmpty()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -494,4 +494,61 @@ class OpplysningerRepositoryPostgresTest {
slettOpplysninger shouldContainExactly listOf(cFaktum.id, bFaktum.id, aFaktum.id)
}
}

@Test
fun `Sletter flere sett med opplysninger`() {
withMigratedDb {
val repo = OpplysningerRepositoryPostgres()
val vaktmesterRepo = VaktmesterPostgresRepo()

val a = Opplysningstype.somBoolsk("A")
val b = Opplysningstype.somBoolsk("B")
val c = Opplysningstype.somBoolsk("C")
val d = Opplysningstype.somBoolsk("D")

val regelsett =
Regelsett("Regelsett") {
regel(a) { innhentes }
regel(d) { innhentes }
regel(b) { enAv(a) }
regel(c) { enAv(b, d) }
}
val opplysninger = Opplysninger()
val regelkjøring = Regelkjøring(LocalDate.now(), opplysninger, regelsett)

val aFaktum = Faktum(a, true)
val dFaktum = Faktum(d, false)
opplysninger.leggTil(aFaktum)
opplysninger.leggTil(dFaktum)
regelkjøring.evaluer()

repo.lagreOpplysninger(opplysninger)

// ----
val opplysninger2 = Opplysninger()
val regelkjøring2 = Regelkjøring(LocalDate.now(), opplysninger2, regelsett)

val qFaktum = Faktum(a, true)
val wFaktum = Faktum(d, false)
opplysninger2.leggTil(qFaktum)
opplysninger2.leggTil(wFaktum)
regelkjøring2.evaluer()

repo.lagreOpplysninger(opplysninger2)

// -----

val endretAFaktum = Faktum(a, false)
opplysninger.leggTil(endretAFaktum).also { regelkjøring.evaluer() }
repo.lagreOpplysninger(opplysninger)

// ------

val endretQFaktum = Faktum(a, false)
opplysninger2.leggTil(endretQFaktum).also { regelkjøring2.evaluer() }
repo.lagreOpplysninger(opplysninger2)

vaktmesterRepo.slettOpplysninger().size shouldBe 6
}
}
}

0 comments on commit 8a53510

Please sign in to comment.