Skip to content

FlyWay tears down db #28076

Closed
Closed
@yerzhant

Description

@yerzhant

With this setup:

spring:
  r2dbc:
    url: r2dbc:tc:postgresql:///test?TC_IMAGE_TAG=12-alpine
  flyway:
    url: jdbc:tc:postgresql:12-alpine:///test

a first container (created for migrations) gets down right after successful migration and a new one gets up for testing. One can see this from this log (when one constantly runs docker ps):

    ~                                                                                                                                                                                                                        17:50:33 
❯ docker ps
CONTAINER ID   IMAGE                       COMMAND   CREATED        STATUS                  PORTS                     NAMES
953fc83fc678   testcontainers/ryuk:0.3.1   "/app"    1 second ago   Up Less than a second   0.0.0.0:61792->8080/tcp   testcontainers-ryuk-93520c73-9205-4b22-8ff2-83a1edbf980a

    ~                                                                                                                                                                                                                        17:50:37 
❯ docker ps
CONTAINER ID   IMAGE                       COMMAND                  CREATED         STATUS                  PORTS                     NAMES
818232ec554d   postgres:12-alpine          "docker-entrypoint.s…"   1 second ago    Up Less than a second   0.0.0.0:61802->5432/tcp   intelligent_mirzakhani
953fc83fc678   testcontainers/ryuk:0.3.1   "/app"                   2 seconds ago   Up 1 second             0.0.0.0:61792->8080/tcp   testcontainers-ryuk-93520c73-9205-4b22-8ff2-83a1edbf980a

    ~                                                                                                                                                                                                                        17:50:38 
❯ docker ps
CONTAINER ID   IMAGE                       COMMAND                  CREATED                  STATUS                  PORTS                     NAMES
1fff5f400c40   postgres:12-alpine          "docker-entrypoint.s…"   Less than a second ago   Up Less than a second   0.0.0.0:61812->5432/tcp   festive_mcclintock
953fc83fc678   testcontainers/ryuk:0.3.1   "/app"                   3 seconds ago            Up 2 seconds            0.0.0.0:61792->8080/tcp   testcontainers-ryuk-93520c73-9205-4b22-8ff2-83a1edbf980a

    ~                                                                                                                                                                                                                        17:50:39 
❯ docker ps
CONTAINER ID   IMAGE                       COMMAND                  CREATED         STATUS         PORTS                     NAMES
1fff5f400c40   postgres:12-alpine          "docker-entrypoint.s…"   5 seconds ago   Up 5 seconds   0.0.0.0:61812->5432/tcp   festive_mcclintock
953fc83fc678   testcontainers/ryuk:0.3.1   "/app"                   8 seconds ago   Up 7 seconds   0.0.0.0:61792->8080/tcp   testcontainers-ryuk-93520c73-9205-4b22-8ff2-83a1edbf980a

i.e. 818232ec554d -> 1fff5f400c40.

The same thing happens with in-mem H2 db. But after adding DB_CLOSE_DELAY=-1 parameter the issue gets resolved:

spring:
  r2dbc:
    url: r2dbc:h2:mem:///test;MODE=PostgreSQL
  flyway:
    url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;MODE=PostgreSQL

Sorry if this should had been ticketed in flyway's repo.

build.gradle.kts:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

buildscript {
    dependencies {
        classpath("com.google.cloud.tools:jib-spring-boot-extension-gradle:0.1.0")
    }
}

plugins {
    id("org.springframework.boot") version "2.5.4"
    id("io.spring.dependency-management") version "1.0.11.RELEASE"
    id("com.google.cloud.tools.jib") version "3.1.2"
    id("org.flywaydb.flyway") version "7.5.4"
    kotlin("jvm") version "1.5.21"
    kotlin("plugin.spring") version "1.5.21"
}

group = "kz.qbi"
version = System.getenv("CELLS_VERSION")
java.sourceCompatibility = JavaVersion.VERSION_11

repositories {
    mavenCentral()
}

extra["testcontainersVersion"] = "1.16.0"

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-webflux")
    implementation("org.springframework.boot:spring-boot-starter-data-r2dbc")
    implementation("org.springframework.boot:spring-boot-starter-validation")
    implementation("org.springframework:spring-jdbc")

    implementation("io.projectreactor.kotlin:reactor-kotlin-extensions")

    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")

    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")

    implementation("org.flywaydb:flyway-core")

    runtimeOnly("org.postgresql:postgresql")
    runtimeOnly("io.r2dbc:r2dbc-postgresql")

    developmentOnly("org.springframework.boot:spring-boot-devtools")

    testImplementation("org.springframework.boot:spring-boot-starter-test") {
        exclude(module = "mockito-core")
    }

    testImplementation("io.projectreactor:reactor-test")

    testImplementation("org.testcontainers:junit-jupiter")
    testImplementation("org.testcontainers:postgresql")
    testImplementation("org.testcontainers:r2dbc")

    testImplementation("com.ninja-squad:springmockk:3.0.1")

    testRuntimeOnly("com.h2database:h2")
    testRuntimeOnly("io.r2dbc:r2dbc-h2")
}

dependencyManagement {
    imports {
        mavenBom("org.testcontainers:testcontainers-bom:${property("testcontainersVersion")}")
    }
}

jib {
    from {
        image = "***"
    }
    to {
        image = "***/cells"
        tags = setOf("$version")
    }
    container {
        creationTime = "USE_CURRENT_TIMESTAMP"
        user = "***"
    }
    pluginExtensions {
        pluginExtension {
            implementation = "com.google.cloud.tools.jib.gradle.extension.springboot.JibSpringBootExtension"
        }
    }
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        @Suppress("SpellCheckingInspection")
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "11"
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
    failFast = true
}

tasks {
    build {
        dependsOn(jib)
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    for: external-projectFor an external project and not something we can fixstatus: declinedA suggestion or change that we don't feel we should currently apply

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions