Skip to content

Commit

Permalink
Sletter opplysnigner innenfor samme opplysninger_id. Satt en begrensi…
Browse files Browse the repository at this point in the history
…ng 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]>
  • Loading branch information
geiralund and richardmartinsen committed Jan 14, 2025
1 parent 4ee0f24 commit 28e032f
Show file tree
Hide file tree
Showing 4 changed files with 75 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 @@ -33,6 +33,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

0 comments on commit 28e032f

Please sign in to comment.