aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2025-02-25 13:28:35 +0100
committerAleksandr Nogikh <nogikh@google.com>2025-02-26 15:09:27 +0000
commitd24eb6a35a1d5f4564cf9ac9735b36f98f96f53d (patch)
tree4c5cc910897d1569a6909b8d2128f5daaa725998
parent6b02abbc75ad23416e1aedd75799f3a68be7f681 (diff)
syz-cluster: add a DB migration job
The job can be created by a CD to apply the missing DB migrations. Add a Makefile target to prepare the job's description.
-rw-r--r--syz-cluster/Makefile7
-rw-r--r--syz-cluster/db-mgmt/deployment.yaml23
-rw-r--r--syz-cluster/db-mgmt/migrate-job.yaml19
-rw-r--r--syz-cluster/pkg/db/spanner.go5
4 files changed, 30 insertions, 24 deletions
diff --git a/syz-cluster/Makefile b/syz-cluster/Makefile
index 58237cece..ab5a1c796 100644
--- a/syz-cluster/Makefile
+++ b/syz-cluster/Makefile
@@ -65,3 +65,10 @@ restart-spanner: build-db-mgmt
k8s-config-dev:
@kubectl kustomize ./overlays/minikube/ | IMAGE_PREFIX=${IMAGE_PREFIX} IMAGE_TAG=${IMAGE_TAG} envsubst
+
+migrate-job.yaml:
+ @if [ -z "${SPANNER_DATABASE_URI}" ]; then \
+ echo "Error: SPANNER_DATABASE_URI must be defined."; \
+ exit 1; \
+ fi
+ @cat db-mgmt/migrate-job.yaml | IMAGE_PREFIX=${IMAGE_PREFIX} IMAGE_TAG=${IMAGE_TAG} envsubst
diff --git a/syz-cluster/db-mgmt/deployment.yaml b/syz-cluster/db-mgmt/deployment.yaml
deleted file mode 100644
index d81d7eced..000000000
--- a/syz-cluster/db-mgmt/deployment.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright 2025 syzkaller project authors. All rights reserved.
-# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
-
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: db-mgmt
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: db-mgmt
- template:
- metadata:
- labels:
- app: db-mgmt
- spec:
- containers:
- - name: db-mgmt-local
- image: db-mgmt-local:latest
- imagePullPolicy: Never
- command: ["db-mgmt", "migrate", "/migrations"]
- restartPolicy: Never
diff --git a/syz-cluster/db-mgmt/migrate-job.yaml b/syz-cluster/db-mgmt/migrate-job.yaml
new file mode 100644
index 000000000..7a0fd0bc3
--- /dev/null
+++ b/syz-cluster/db-mgmt/migrate-job.yaml
@@ -0,0 +1,19 @@
+# Copyright 2025 syzkaller project authors. All rights reserved.
+# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
+
+apiVersion: batch/v1
+kind: Job
+metadata:
+ name: db-migrate-job
+spec:
+ template:
+ spec:
+ serviceAccountName: gke-service-ksa
+ containers:
+ - name: migrate
+ image: ${IMAGE_PREFIX}db-mgmt:${IMAGE_TAG}
+ env:
+ - name: SPANNER_DATABASE_URL
+ value: "${SPANNER_DATABASE_URI}"
+ args: ["migrate"]
+ restartPolicy: Never
diff --git a/syz-cluster/pkg/db/spanner.go b/syz-cluster/pkg/db/spanner.go
index 77b126be7..d114727b8 100644
--- a/syz-cluster/pkg/db/spanner.go
+++ b/syz-cluster/pkg/db/spanner.go
@@ -115,7 +115,10 @@ func RunMigrations(ctx context.Context, uri string) error {
return err
}
m, err := migrate.NewWithInstance("iofs", sourceDriver, "spanner", dbDriver)
- if err != nil {
+ if err == migrate.ErrNoChange {
+ // This is not a problem.
+ return nil
+ } else if err != nil {
return err
}
return m.Up()