Fabrizio Spini
12/15/2025, 8:16 AM2025-12-15 00:00:43,067 [Workflow Poller taskQueue="SYNC", namespace="default": 5] WARN i.t.i.w.Poller$PollerUncaughtExceptionHandler(logPollErrors):362 - Failure in poller thread Workflow Poller taskQueue="SYNC", namespace="default": 5
io.grpc.StatusRuntimeException: CANCELLED: context canceled
at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:351)
at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:332)
at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:174)
at io.temporal.api.workflowservice.v1.WorkflowServiceGrpc$WorkflowServiceBlockingStub.pollWorkflowTaskQueue(WorkflowServiceGrpc.java:5634)
at io.temporal.internal.worker.WorkflowPollTask.doPoll(WorkflowPollTask.java:174)
at io.temporal.internal.worker.WorkflowPollTask.poll(WorkflowPollTask.java:155)
at io.temporal.internal.worker.WorkflowPollTask.poll(WorkflowPollTask.java:49)
at io.temporal.internal.worker.Poller$PollExecutionTask.run(Poller.java:336)
at io.temporal.internal.worker.Poller$PollLoopTask.run(Poller.java:296)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
2025-12-15 00:02:41,868 [Workflow Poller taskQueue="ui_commands", namespace="default": 2] WARN i.t.i.w.Poller$PollerUncaughtExceptionHandler(logPollErrors):362 - Failure in poller thread Workflow Poller taskQueue="ui_commands", namespace="default": 2
io.grpc.StatusRuntimeException: CANCELLED: context canceled
at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:351)
at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:332)
at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:174)
at io.temporal.api.workflowservice.v1.WorkflowServiceGrpc$WorkflowServiceBlockingStub.pollWorkflowTaskQueue(WorkflowServiceGrpc.java:5634)
at io.temporal.internal.worker.WorkflowPollTask.doPoll(WorkflowPollTask.java:174)
at io.temporal.internal.worker.WorkflowPollTask.poll(WorkflowPollTask.java:155)
at io.temporal.internal.worker.WorkflowPollTask.poll(WorkflowPollTask.java:49)
at io.temporal.internal.worker.Poller$PollExecutionTask.run(Poller.java:336)
at io.temporal.internal.worker.Poller$PollLoopTask.run(Poller.java:296)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
2025-12-14 19:36:30,863 [Workflow Poller taskQueue="CONNECTION_UPDATER", namespace="default": 4] WARN i.t.i.w.Poller$PollerUncaughtExceptionHandler(logPollErrors):362 - Failure in poller thread Workflow Poller taskQueue="CONNECTION_UPDATER", namespace="default": 4
io.grpc.StatusRuntimeException: CANCELLED: context canceled
at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:351)
at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:332)
at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:174)
at io.temporal.api.workflowservice.v1.WorkflowServiceGrpc$WorkflowServiceBlockingStub.pollWorkflowTaskQueue(WorkflowServiceGrpc.java:5634)
at io.temporal.internal.worker.WorkflowPollTask.doPoll(WorkflowPollTask.java:174)
at io.temporal.internal.worker.WorkflowPollTask.poll(WorkflowPollTask.java:155)
at io.temporal.internal.worker.WorkflowPollTask.poll(WorkflowPollTask.java:49)
at io.temporal.internal.worker.Poller$PollExecutionTask.run(Poller.java:336)
at io.temporal.internal.worker.Poller$PollLoopTask.run(Poller.java:296)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)kapa.ai
12/15/2025, 8:17 AMDEADLINE_EXCEEDED, context deadline exceeded, poller failures) appear when: - Temporal cannot reliably access its database or metadata. [[External DB deploy](https://discuss.airbyte.io/t/2179); [Temporal context deadline](https://github.com/airbytehq/airbyte/issues/59730)] - The deployment was effectively “half‑migrated”, or resources/services restart in a bad state and Temporal pollers end up cancelled/unavailable. [[Temporal context deadline](https://github.com/airbytehq/airbyte/issues/59730); [Airbyte services stuck](https://github.com/airbytehq/airbyte/issues/68115)] However, the knowledge you provided does not contain a documented, supported path to reuse an Airbyte 1.5 Postgres schema directly with Airbyte 2.0, nor any migration guide that would make this safe. Because of that, I can’t point to an official way to fix your current DB in‑place. Given what’s documented, the safest way forward (and what I can recommend based on the sources) is: 1. Do not reuse the 1.5 DB directly with 2.0. Use a fresh database/schema for the 2.0 deployment and let Airbyte 2.0 initialize its own schema. The external‑DB Temporal timeout examples you shared were solved via redeploys and “clean” environments rather than trying to repair a mismatched schema. [[Temporal context deadline](https://github.com/airbytehq/airbyte/issues/59730); [External DB deploy](https://discuss.airbyte.io/t/2179)] 2. Standing up a clean 2.0 environment: - Create a new Postgres DB (or new schema) for Airbyte 2.0. - Point your Helm/Kubernetes deployment at this new DB and redeploy so server, worker, and temporal all start from a consistent, fresh state. Similar redeploys resolved Temporal poller issues in the EKS example. [[Temporal context deadline](https://github.com/airbytehq/airbyte/issues/59730)] 3. Recreate objects from 1.5: The knowledge sources don’t describe an automated migration of sources/destinations/connections from 1.5 → 2.0. So, based on what’s available, the only clearly safe approach is: - Export connection/source/destination configs from the 1.5 environment (if you still have it) or manually recreate them in the fresh 2.0 environment. - Then test new source creation and syncs in 2.0. 4. If you must keep the existing DB: The knowledge sources don’t provide a supported procedure to repair the DB for 2.0, or to interpret these Temporal CANCELLED: context canceled errors specifically as a known upgrade issue, so I can’t give a reliable step‑by‑step fix here. I’d strongly recommend opening a GitHub issue and explicitly stating that a 1.5 DB was reused for 2.0, so the team can confirm whether any internal migration tooling exists (none is mentioned in the documents you shared). In summary, based on the available information, the recommended resolution is to: - Deploy Airbyte 2.0 against a new, empty Postgres DB, - Let it initialize cleanly, - Then recreate (or import, if you have an export) your sources/destinations/connections rather than pointing 2.0 at the 1.5 DB.Fabrizio Spini
12/15/2025, 8:39 AMkapa.ai
12/15/2025, 8:39 AMkapa.ai
12/15/2025, 8:40 AMbash # copy your backup in if you made one kubectl cp ./airbyte_backup.sql airbyte/airbyte-db-0:/tmp/airbyte_backup.sql # drop and recreate the public schema (erases all data) kubectl exec -n airbyte -it airbyte-db-0 -- bash -c \ "psql -U airbyte -d db-airbyte -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;'" [[Drop/recreate schema](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#deploy-airbyte)] 3. Restart the Airbyte pods (or redeploy via Helm) so the platform can re‑initialize the DB on next start. - This is effectively like a fresh install: you will lose all sources, destinations, connections, states, etc. - You don’t strictly have to reinstall the chart if you just drop the schema, but many users pair this with a redeploy/helm uninstall+install to be sure everything starts clean. [[Helm reinstall steps](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#deploy-airbyte)] --- ### 2. Clear only synced data in destinations (keep config & metadata) If your goal is to remove synced data but keep your connections/sources/destinations, you should use Clear (formerly “Reset”) at the connection/stream level instead of touching Postgres: - In the UI: - Go to a connection → Settings → Clear data to wipe all streams, or - On the connection status page, use the three‑dot menu next to a stream → Clear data to wipe just that stream. [[Clearing data](https://docs.airbyte.com/platform/operator-guides/clear)] - After a Clear completes, run a sync to backfill. [[Clearing data](https://docs.airbyte.com/platform/operator-guides/clear)] This does not clean the internal DB; it cleans destination tables/files. --- ### Which should you use? - Use Clear if you only want to delete synced data in destinations. - Use schema drop/recreate (option 1) if you truly want to reset the whole Airbyte instance to an empty state. After doing so, expect to recreate everything (or restore from backup).Fabrizio Spini
12/15/2025, 8:48 AM(base) ➜ ~ kubectl get pods -n airbyte
NAME READY STATUS RESTARTS AGE
airbyte-minio-0 1/1 Running 0 3h42m
airbyte-v2-connector-builder-server-666d68454-d5j7d 1/1 Running 0 39h
airbyte-v2-cron-c646874cc-prdwd 1/1 Running 0 39h
airbyte-v2-server-7b4d756955-9zmpg 1/1 Running 0 39h
airbyte-v2-temporal-7f6b6698d6-8bmsx 1/1 Running 0 39h
airbyte-v2-worker-6f4f78f464-b7lxj 1/1 Running 0 39h
airbyte-v2-workload-api-server-6c94876b5-lp654 1/1 Running 0 39h
airbyte-v2-workload-launcher-5577db5447-w4sp9 1/1 Running 1 (39h ago) 39hkapa.ai
12/15/2025, 8:48 AMkapa.ai
12/15/2025, 8:48 AMairbyte namespace, which means: - Either you configured an external Postgres DB (outside the cluster), or - You installed Airbyte without the internal airbyte-db-0 pod for some other reason. The “drop schema and recreate” operations in the docs are run inside the Postgres pod (e.g. airbyte-db-0). [[Backup/restore DB](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#deploy-airbyte)] Because we don’t see a Postgres pod, I cannot safely give you exact kubectl exec commands for your setup from the knowledge sources alone. The steps below show the pattern from the docs; you’ll need to adapt them to your actual Postgres deployment (pod name, DB name, DB user), which isn’t visible in the snippet you shared. --- ## 1. Erase data on Postgres From the docs, when using the internal DB, they: 1. Copy a backup file into the pod (optional). 2. Drop and recreate the public schema to erase all data. 3. Optionally restore from backup. [[Backup/restore DB](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#deploy-airbyte)] Example for internal DB (you must adjust pod name / namespace / DB name / user for your own Postgres): bash # 2) Drop and recreate the schema (this erases all data) kubectl exec -n airbyte -it airbyte-db-0 -- bash -c \ "psql -U airbyte -d db-airbyte -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;'" [[Drop/recreate schema](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#deploy-airbyte)] In your case (external DB): - Identify how Postgres is deployed (e.g. managed RDS, another namespace, or another cluster). - Run the same SQL (DROP SCHEMA public CASCADE; CREATE SCHEMA public;) against the Airbyte database using psql or your DB admin tool. - Make sure you are acting on the correct DB/schema that Airbyte is using (check your Helm values.yaml global.database.* or your external DB connection settings). [[External DB config](https://docs.airbyte.com/platform/deploying-airbyte/integrations/database#values)] > Warning: this fully wipes all Airbyte data (sources, destinations, connections, jobs, state, etc.) from that DB. --- ## 2. Restart Airbyte so it recreates DB objects From the Helm V2 upgrade docs, when you keep using the same namespace and database, the flow is: 1. Uninstall the Helm release (optionally; namespace remains). 2. Reinstall the chart, pointing at the same DB; Airbyte initializes schema. [[Deploy Airbyte](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#deploy-airbyte)] If you’re using Helm V2 community/Core charts, the pattern is: bash # (Optional but clean) uninstall the existing release, *keep* namespace helm uninstall airbyte -n airbyte # Reinstall, using your existing values.yaml and same external DB settings helm install airbyte airbyte-v2/airbyte \ --namespace airbyte \ --values ./values.yaml \ --version <your-chart-version> [[Deploy Airbyte](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#deploy-airbyte)] If you don’t want to uninstall/reinstall: - After you drop/recreate the schema in Postgres, you can simply restart the pods so server/worker/Temporal re‑run migrations on an empty DB: bash kubectl rollout restart deployment -n airbyte airbyte-v2-server kubectl rollout restart deployment -n airbyte airbyte-v2-worker kubectl rollout restart deployment -n airbyte airbyte-v2-temporal kubectl rollout restart deployment -n airbyte airbyte-v2-cron kubectl rollout restart deployment -n airbyte airbyte-v2-connector-builder-server kubectl rollout restart deployment -n airbyte airbyte-v2-workload-api-server kubectl rollout restart deployment -n airbyte airbyte-v2-workload-launcher This exact rollout restart sequence is not explicitly documented in the sources, but it follows directly from the documented principle that the DB is re‑initialized on startup after schema drop. [[Drop/recreate schema](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#deploy-airbyte)] --- ### Summary Because your Postgres is external, the docs don’t show your exact pod/host names. The documented pattern is: 1. On the Airbyte DB: run DROP SCHEMA public CASCADE; CREATE SCHEMA public; to erase all data. [[Drop/recreate schema](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#deploy-airbyte)] 2. Restart or reinstall the Airbyte Helm chart so that server/worker/Temporal connect to this now‑empty DB and recreate all Airbyte database objects. [[Deploy Airbyte](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#deploy-airbyte)] If you can share how your Postgres is deployed (Helm release name / namespace, or RDS/CloudSQL, etc.), I can help you map these doc patterns to concrete commands.Fabrizio Spini
12/15/2025, 8:57 AM(base) ➜ ~ kubectl get pods -n airbyte
NAME READY STATUS RESTARTS AGE
airbyte-minio-0 1/1 Running 0 3h52m
airbyte-v2-connector-builder-server-7c4f9f4987-hthsx 1/1 Running 0 4m39s
airbyte-v2-cron-7888c9cdfc-kt5cc 0/1 OutOfmemory 0 4m40s
airbyte-v2-cron-7888c9cdfc-skvst 1/1 Running 0 4m
airbyte-v2-server-76f8798cc7-64hdq 0/1 Running 4 (19s ago) 4m21s
airbyte-v2-temporal-7dcbb766b7-n7ghs 0/1 ContainerStatusUnknown 0 4m40s
airbyte-v2-temporal-7dcbb766b7-rjsdw 1/1 Running 0 4m35s
airbyte-v2-worker-58cfb97cc-2cjsh 1/1 Running 0 4m
airbyte-v2-worker-58cfb97cc-hgt8b 0/1 OutOfmemory 0 4m41s
airbyte-v2-workload-api-server-d8b76d46d-mk6fg 0/1 Error 0 4m38s
airbyte-v2-workload-api-server-d8b76d46d-mqdw8 1/1 Running 0 4m1s
airbyte-v2-workload-launcher-5fc484c76f-t2v9n 0/1 CrashLoopBackOff 4 (65s ago) 4m36skapa.ai
12/15/2025, 8:57 AMkapa.ai
12/15/2025, 8:57 AMOutOfmemory, CrashLoopBackOff, Error) - A likely Temporal / DB initialization issue after you wiped the database The knowledge sources you provided don’t include detailed troubleshooting steps for OutOfMemory or CrashLoopBackOff beyond the general guidance to redeploy and ensure a clean DB and environment. They also don’t show the expected logs for these specific pods in Airbyte 2.0, so I can’t give an exact root cause from documentation alone. Given that, here is what is clearly supported by the docs and related issues, and what you should check next: --- ### 1. Confirm DB and Temporal are healthy After dropping the schema, Airbyte needs to recreate all database objects on startup. If Temporal or the DB are misconfigured or too slow to initialize, you can see persistent errors and poller issues. Similar symptoms are mentioned in external‑DB deployments where Temporal times out or pods stay unhealthy until the deployment is fixed. [[External DB config](https://docs.airbyte.com/platform/deploying-airbyte/integrations/database); [External DB deploy issue](https://discuss.airbyte.io/t/3787)] Please verify: 1. External Postgres settings in your `values.yaml`: - postgresql.enabled: false - global.database.type: external - global.database.host, port, and name (or database for older chart) match your DB - global.database.secretName points to a secret containing database-user and database-password keys (for chart V2). [[External DB config](https://docs.airbyte.com/platform/deploying-airbyte/integrations/database#values)] 2. That you can connect from a pod to the DB (e.g., by running psql in a debug container). The docs don’t show this command, but for any external DB configuration this is a critical sanity check. 3. airbyte-v2-temporal has at least one Running replica (you do have one Running pod, which is good). If configuration is wrong, fix values.yaml and redeploy via Helm, as described in the Helm V2 docs. [[Deploy Airbyte](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#deploy-airbyte)] --- ### 2. Look into logs of failing pods Because the docs don’t describe these exact failure states, you’ll need to inspect logs to know if this is: - A DB/Temporal initialization issue, or - Purely resource limits (e.g., Java out of memory), or - Something else. Run (examples): bash kubectl logs -n airbyte airbyte-v2-server-76f8798cc7-64hdq kubectl logs -n airbyte airbyte-v2-temporal-7dcbb766b7-n7ghs kubectl logs -n airbyte airbyte-v2-workload-api-server-d8b76d46d-mk6fg kubectl logs -n airbyte airbyte-v2-workload-launcher-5fc484c76f-t2v9n kubectl logs -n airbyte airbyte-v2-cron-7888c9cdfc-kt5cc kubectl logs -n airbyte airbyte-v2-worker-58cfb97cc-hgt8b Check specifically for: - Connection failures to Postgres - Temporal errors mentioning connection, namespace, or persistence problems (similar to the poller errors you saw earlier) - Java OOM messages Unfortunately, the knowledge sources don’t document specific log patterns for these pods in 2.0, so I can’t tell you “if you see X, do Y” from docs alone. --- ### 3. Address OutOfMemory / CrashLoopBackOff The docs you shared don’t include resource‑tuning guidance, but OutOfmemory indicates that: - The container’s memory limit is too low for the current workload, or - The node is under pressure and the pod is evicted. Actions (based on Kubernetes best practices, not specifically documented for Airbyte in your sources): - Increase memory requests/limits for the affected components in your values.yaml, then helm upgrade / helm install again. [[Deploy Airbyte](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#deploy-airbyte)] - Ensure your nodes have enough free memory. Because there is no explicit Airbyte 2.0 resource recommendation in the provided docs, I can’t state exact numbers. --- ### 4. When to reinstall vs. just restart The upgrade / reinstall guides show that it is safe to: - helm uninstall the release while keeping the namespace, then - helm install again with your values.yaml, pointing to the (now empty) DB. [[How to upgrade](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#how-to-upgrade); [Deploy Airbyte](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#deploy-airbyte)] This forces all deployments to be recreated and lets Airbyte initialize the empty DB from scratch. If after fixing DB config and resource limits you still see crashes, a clean uninstall/reinstall (keeping the namespace and DB) is a reasonable next step per the docs: bash helm uninstall airbyte -n airbyte helm install airbyte airbyte-v2/airbyte \ --namespace airbyte \ --values ./values.yaml \ --version <your-chart-version> [[How to upgrade](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#how-to-upgrade); [Deploy Airbyte](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#deploy-airbyte)] --- ### What I can’t answer from the docs The knowledge sources do not: - Describe Airbyte 2.0 pod resource defaults or tuning steps for OOM. - Provide a troubleshooting matrix for CrashLoopBackOff on workload-launcher or workload-api-server. - Offer a documented, supported “wipe DB and auto‑migrate” process after jumping from 1.5 to 2.0 on the same DB. So I can’t confidently give a precise, documented single fix. The next practical steps, consistent with the docs, are: 1. Double‑check external DB configuration in values.yaml and DB connectivity. [[External DB config](https://docs.airbyte.com/platform/deploying-airbyte/integrations/database)] 2. Inspect logs of the failing pods for DB/Temporal errors. 3. Increase memory limits for the OOM pods and redeploy via Helm. [[Deploy Airbyte](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#deploy-airbyte)] 4. If problems persist even with correct DB config and adequate resources, perform a clean Helm uninstall/install in the same namespace, pointing to the empty DB, as shown in the Helm V2 upgrade docs. [[How to upgrade](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#how-to-upgrade)] If you can paste the logs from one or two of the failing pods (server, temporal, workload-launcher), I can help interpret them against the general patterns from the Temporal/DB issues you shared.Fabrizio Spini
12/15/2025, 8:59 AM{
"level": "error",
"ts": "2025-12-15T08:58:19.891Z",
"msg": "Operation failed with internal error.",
"error": "GetTasks operation failed. Failed to get rows. Error: sql: database is closed",
"error-type": "serviceerror.Unavailable",
"operation": "GetTasks",
"logging-call-at": "/home/runner/work/docker-builds/docker-builds/temporal/common/persistence/persistence_metric_clients.go:1319",
"stacktrace": "<http://go.temporal.io/server/common/log.(*zapLogger).Error|go.temporal.io/server/common/log.(*zapLogger).Error>\n\t/home/runner/work/docker-builds/docker-builds/temporal/common/log/zap_logger.go:154\ngo.temporal.io/server/common/persistence.updateErrorMetric\n\t/home/runner/work/docker-builds/docker-builds/temporal/common/persistence/persistence_metric_clients.go:1319\ngo.temporal.io/server/common/persistence.(*metricEmitter).recordRequestMetrics\n\t/home/runner/work/docker-builds/docker-builds/temporal/common/persistence/persistence_metric_clients.go:1291\ngo.temporal.io/server/common/persistence.(*taskPersistenceClient).GetTasks.func1\n\t/home/runner/work/docker-builds/docker-builds/temporal/common/persistence/persistence_metric_clients.go:557\ngo.temporal.io/server/common/persistence.(*taskPersistenceClient).GetTasks\n\t/home/runner/work/docker-builds/docker-builds/temporal/common/persistence/persistence_metric_clients.go:559\ngo.temporal.io/server/common/persistence.(*taskRetryablePersistenceClient).GetTasks.func1\n\t/home/runner/work/docker-builds/docker-builds/temporal/common/persistence/persistence_retryable_clients.go:654\ngo.temporal.io/server/common/backoff.ThrottleRetryContext\n\t/home/runner/work/docker-builds/docker-builds/temporal/common/backoff/retry.go:89\ngo.temporal.io/server/common/persistence.(*taskRetryablePersistenceClient).GetTasks\n\t/home/runner/work/docker-builds/docker-builds/temporal/common/persistence/persistence_retryable_clients.go:658\ngo.temporal.io/server/service/matching.(*taskQueueDB).GetTasks\n\t/home/runner/work/docker-builds/docker-builds/temporal/service/matching/db.go:289\ngo.temporal.io/server/service/matching.(*taskReader).getTaskBatchWithRange\n\t/home/runner/work/docker-builds/docker-builds/temporal/service/matching/task_reader.go:249\ngo.temporal.io/server/service/matching.(*taskReader).getTaskBatch\n\t/home/runner/work/docker-builds/docker-builds/temporal/service/matching/task_reader.go:276\ngo.temporal.io/server/service/matching.(*taskReader).getTasksPump\n\t/home/runner/work/docker-builds/docker-builds/temporal/service/matching/task_reader.go:202\ngo.temporal.io/server/internal/goro.(*Group).Go.func1\n\t/home/runner/work/docker-builds/docker-builds/temporal/internal/goro/group.go:58"
}kapa.ai
12/15/2025, 8:59 AMkapa.ai
12/15/2025, 9:00 AMGetTasks operation failed. Failed to get rows. Error: sql: database is closed In the docs and issues you shared, similar Temporal errors (context deadline exceeded, timeouts, persistence failures) are always rooted in DB connectivity / configuration / network problems, especially when using an external Postgres. [[External DB deploy](https://discuss.airbyte.io/t/2179); [Temporal context deadline](https://github.com/airbytehq/airbyte/issues/59730)] Given that you dropped the schema and then restarted, the most likely causes (based on those references) are: 1. Temporal can’t reliably reach the Postgres instance - Wrong host/port, credentials, or SSL settings for the external DB. - Network path issues (e.g., VPC/firewall/security group, region mismatch). Similar problems produced persistence errors and task queue failures with external RDS/Azure Postgres. [[External DB deploy](https://discuss.airbyte.io/t/2179); [Azure Postgres SSL](https://discuss.airbyte.io/t/2928)] 2. The DB or connection was restarted/closed under Temporal When the Temporal process tries to read tasks and finds “database is closed”, it usually means the underlying DB connection pool has been torn down due to an error (connection refused, timeout, SSL, etc.), not that the schema is wrong. The knowledge sources don’t show this exact “sql: database is closed” message, but they do show Temporal failing similarly when: - The DB user lacks permissions or the DB is missing. [[Unable to create SQL DB](https://discuss.airbyte.io/t/1544); [Precreated DBs & permissions](https://discuss.airbyte.io/t/4432)] - The DB is remote/slow or mis‑located, causing repeated timeouts. [[Temporal context deadline](https://github.com/airbytehq/airbyte/issues/59730); [AWS RDS timeouts](https://discuss.airbyte.io/t/2179)] ### What to check / do next Based on those patterns: 1. Verify external DB config (values.yaml & secrets) Ensure your Helm values for the external DB are correct (host, port, DB name, user, password, SSL options) and the secret keys match what the chart expects. [[External DB config](https://docs.airbyte.com/platform/deploying-airbyte/integrations/database#values)] 2. Test connectivity from inside the cluster - From any pod with psql available (or a debug pod), connect to the Temporal DB using the exact host/port/user used by Airbyte. - If you’re on Azure Postgres or similar managed services, confirm SSL requirements and certificates (the Azure case failed until SSL was configured correctly). [[Azure Postgres SSL](https://discuss.airbyte.io/t/2928)] 3. Look for root‑cause errors earlier in the same Temporal pod logs Before the database is closed error, there is usually a more specific failure such as: - pq: database "temporal" does not exist - permission denied - connection refused - read: connection timed out Those are the kinds of messages that drove the “database is closed” state in the other threads. [[Unable to create SQL DB](https://discuss.airbyte.io/t/1544); [AWS RDS timeouts](https://discuss.airbyte.io/t/2179)] 4. Confirm the Temporal DB itself is reachable and healthy - DB instance up, accepting connections. - No firewall/VPC rule blocking pods. - If it’s cross‑region or high‑latency, consider placing DB and cluster in the same region (this resolved Temporal timeouts for one user). [[Temporal context deadline](https://github.com/airbytehq/airbyte/issues/59730)] 5. Restart Temporal after fixing DB issues Once connectivity and credentials are correct, restart the Temporal deployment so it rebuilds healthy connections to Postgres. Because the sources don’t document this specific “sql: database is closed” message or a precise fix for it, I can’t safely prescribe a one‑command solution. But all related documented cases were resolved by fixing external Postgres connectivity/permissions/SSL/latency, then restarting the Temporal pod.Fabrizio Spini
12/15/2025, 9:21 AM2025-12-15 09:18:44,723 [io-executor-thread-6] ERROR i.a.c.s.e.h.UncaughtExceptionHandler(handle):33 - Uncaught exception
io.micronaut.data.exceptions.DataAccessException: Error executing SQL Query: ERROR: relation "dataplane" does not exist
Position: 203
at io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations.findOne(DefaultJdbcRepositoryOperations.java:394)
at io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations.lambda$findOne$0(DefaultJdbcRepositoryOperations.java:354)
at io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations.lambda$executeRead$23(DefaultJdbcRepositoryOperations.java:819)
at io.micronaut.data.connection.support.AbstractConnectionOperations.executeWithNewConnection(AbstractConnectionOperations.java:167)
at io.micronaut.data.connection.support.AbstractConnectionOperations.execute(AbstractConnectionOperations.java:114)
at io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations.executeRead(DefaultJdbcRepositoryOperations.java:816)
at io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations.findOne(DefaultJdbcRepositoryOperations.java:354)
at io.micronaut.data.runtime.intercept.DefaultFindOneInterceptor.intercept(DefaultFindOneInterceptor.java:45)
at io.micronaut.data.runtime.intercept.DataIntroductionAdvice.intercept(DataIntroductionAdvice.java:84)
at io.micronaut.aop.chain.MethodInterceptorChain.proceed(MethodInterceptorChain.java:143)
at io.airbyte.data.repositories.DataplaneRepository$Intercepted.findByServiceAccountId(Unknown Source)
at io.airbyte.data.services.impls.data.DataplaneServiceDataImpl.getDataplaneByServiceAccountId(DataplaneServiceDataImpl.kt:129)
at io.airbyte.server.services.DataplaneService.getDataplaneByServiceAccountId(DataplaneService.kt:79)
at io.airbyte.server.apis.controllers.DataplaneController.initializeDataplane(DataplaneController.kt:174)
at io.airbyte.server.apis.controllers.$DataplaneController$Definition$Exec.dispatch(Unknown Source)
at io.micronaut.context.AbstractExecutableMethodsDefinition$DispatchedExecutableMethod.invokeUnsafe(AbstractExecutableMethodsDefinition.java:461)
at io.micronaut.context.DefaultBeanContext$BeanContextUnsafeExecutionHandle.invokeUnsafe(DefaultBeanContext.java:4438)
at io.micronaut.web.router.AbstractRouteMatch.execute(AbstractRouteMatch.java:272)
at io.micronaut.web.router.DefaultUriRouteMatch.execute(DefaultUriRouteMatch.java:38)
at io.micronaut.http.server.RouteExecutor.executeRouteAndConvertBody(RouteExecutor.java:465)
at io.micronaut.http.server.RouteExecutor.lambda$callRoute$5(RouteExecutor.java:442)
at io.micronaut.core.execution.ExecutionFlow.lambda$async$0(ExecutionFlow.java:92)
at io.micronaut.core.propagation.PropagatedContext.lambda$wrap$3(PropagatedContext.java:232)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: org.postgresql.util.PSQLException: ERROR: relation "dataplane" does not exist
Position: 203
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2734)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2421)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:372)
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:518)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:435)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:196)
at org.postgresql.jdbc.PgPreparedStatement.executeQuery(PgPreparedStatement.java:139)
at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java)
at io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations.findOne(DefaultJdbcRepositoryOperations.java:361)
... 25 common frames omitted
2025-12-15 09:18:48,328 [main] INFO o.f.c.i.l.s.Slf4jLog(info):41 - Schema history table "public"."airbyte_jobs_migrations" does not exist yet
2025-12-15 09:18:54,362 [main] INFO o.f.c.i.l.s.Slf4jLog(info):41 - Schema history table "public"."airbyte_jobs_migrations" does not exist yet
2025-12-15 09:19:00,395 [main] INFO o.f.c.i.l.s.Slf4jLog(info):41 - Schema history table "public"."airbyte_jobs_migrations" does not exist yet
2025-12-15 09:19:06,426 [main] INFO o.f.c.i.l.s.Slf4jLog(info):41 - Schema history table "public"."airbyte_jobs_migrations" does not exist yet
2025-12-15 09:19:12,453 [main] INFO o.f.c.i.l.s.Slf4jLog(info):41 - Schema history table "public"."airbyte_jobs_migrations" does not exist yet
2025-12-15 09:19:18,479 [main] INFO o.f.c.i.l.s.Slf4jLog(info):41 - Schema history table "public"."airbyte_jobs_migrations" does not exist yet
2025-12-15 09:19:24,508 [main] INFO o.f.c.i.l.s.Slf4jLog(info):41 - Schema history table "public"."airbyte_jobs_migrations" does not exist yet
2025-12-15 09:19:30,532 [main] INFO o.f.c.i.l.s.Slf4jLog(info):41 - Schema history table "public"."airbyte_jobs_migrations" does not exist yet
2025-12-15 09:19:36,556 [main] INFO o.f.c.i.l.s.Slf4jLog(info):41 - Schema history table "public"."airbyte_jobs_migrations" does not exist yet
2025-12-15 09:19:36,566 [main] ERROR i.m.r.Micronaut(handleStartupException):362 - Error starting Micronaut server: io.airbyte.db.check.DatabaseCheckException: Timeout while waiting for database to fulfill minimum flyway migration version..
java.lang.RuntimeException: io.airbyte.db.check.DatabaseCheckException: Timeout while waiting for database to fulfill minimum flyway migration version..
at io.airbyte.server.DatabaseEventListener.onApplicationEvent(DatabaseEventListener.kt:37)
at io.airbyte.server.DatabaseEventListener.onApplicationEvent(DatabaseEventListener.kt:20)
at io.micronaut.context.event.ApplicationEventPublisherFactory.notifyEventListeners(ApplicationEventPublisherFactory.java:266)
at io.micronaut.context.event.ApplicationEventPublisherFactory$2.publishEvent(ApplicationEventPublisherFactory.java:226)
at io.micronaut.http.server.netty.discovery.NettyServiceDiscovery.onStart(NettyServiceDiscovery.java:54)
at io.micronaut.http.server.netty.discovery.$NettyServiceDiscovery$Definition$Exec.dispatch(Unknown Source)
at io.micronaut.context.AbstractExecutableMethodsDefinition$DispatchedExecutableMethod.invoke(AbstractExecutableMethodsDefinition.java:456)
at io.micronaut.context.DefaultBeanContext$BeanExecutionHandle.invoke(DefaultBeanContext.java:3987)
at io.micronaut.aop.chain.AdapterIntroduction.intercept(AdapterIntroduction.java:91)
at io.micronaut.aop.chain.MethodInterceptorChain.proceed(MethodInterceptorChain.java:143)
at io.micronaut.http.server.netty.discovery.NettyServiceDiscovery$ApplicationEventListener$onStart1$Intercepted.onApplicationEvent(Unknown Source)
at io.micronaut.context.event.ApplicationEventPublisherFactory.notifyEventListeners(ApplicationEventPublisherFactory.java:266)
at io.micronaut.context.event.ApplicationEventPublisherFactory$2.publishEvent(ApplicationEventPublisherFactory.java:226)
at io.micronaut.http.server.netty.NettyHttpServer.fireStartupEvents(NettyHttpServer.java:720)
at io.micronaut.http.server.netty.NettyHttpServer.start(NettyHttpServer.java:330)
at io.micronaut.http.server.netty.NettyHttpServer.start(NettyHttpServer.java:124)
at io.micronaut.runtime.Micronaut.start(Micronaut.java:81)
at io.airbyte.server.ApplicationKt.main(Application.kt:17)
Caused by: io.airbyte.db.check.DatabaseCheckException: Timeout while waiting for database to fulfill minimum flyway migration version..
at io.airbyte.db.check.DatabaseMigrationCheck$DefaultImpls.check(DatabaseMigrationCheck.kt:84)
at io.airbyte.db.check.JobsDatabaseMigrationCheck.check(JobsDatabaseMigrationCheck.kt:17)
at io.airbyte.server.DatabaseEventListener.onApplicationEvent(DatabaseEventListener.kt:35)
... 17 common frames omittedkapa.ai
12/15/2025, 9:21 AMkapa.ai
12/15/2025, 9:23 AMrelation "dataplane" does not exist 2. Flyway never finishing: Schema history table "public"."airbyte_jobs_migrations" does not exist yet followed by Timeout while waiting for database to fulfill minimum flyway migration version.. That means the Airbyte 2.0 jobs/config migrations are not being applied successfully to your Postgres, so required tables (like dataplane and the Flyway schema history table) are missing. From the documentation and related issues: - Airbyte expects to create and own its schema in an empty database (or schema). With external Postgres you must: - Create the databases (airbyte, temporal, temporal_visibility) yourself. - Then let Airbyte/Temporal create all tables via migrations. [[External DB issue](https://github.com/airbytehq/airbyte/issues/49304)] - When this doesn’t complete, the logs loop on “schema history table … does not exist yet” and eventually time out, exactly as you’re seeing. [[Forum Flyway timeout](https://discuss.airbyte.io/t/2589)] Because you dropped the public schema, you now have an empty DB again, but something is preventing the migrations from finishing. Given what’s in the docs and issues, here’s what you can safely do and check. --- ## 1. Ensure the DB is in a clean, supported state For an external database with Helm chart V2, the docs/issue show this pattern: 1. Create the databases (once) in Postgres (if not already done): sql CREATE DATABASE airbyte WITH OWNER = <airbyte_user>; CREATE DATABASE temporal WITH OWNER = <airbyte_user>; CREATE DATABASE temporal_visibility WITH OWNER = <airbyte_user>; (Owner/user must match what you configured in airbyte-config-secrets / global.database.*.) [[External Postgres DBs](https://github.com/airbytehq/airbyte/issues/49304)] 2. Inside each DB, Airbyte/Temporal will create tables and Flyway schema tables automatically. You should not pre-create application tables like dataplane yourself. Since you already dropped public, it’s effectively clean. Just make sure: - You did this in the Airbyte config/jobs DB (whatever your `global.database.name`/`database` is set to). [[External DB config](https://docs.airbyte.com/platform/deploying-airbyte/integrations/database#values)] - The user has full rights on that DB (create table, alter, etc.). Lack of permissions caused similar external-Postgres failures. [[SQL DB permissions](https://discuss.airbyte.io/t/1544)] --- ## 2. Re‑check your Helm values for external DB For Helm chart V2 with an external DB, values.yaml should look like the documented example: [[External DB config](https://docs.airbyte.com/platform/deploying-airbyte/integrations/database#values)] yaml postgresql: enabled: false global: database: type: external secretName: airbyte-config-secrets # or your secret host: <your-db-host> port: "<your-port>" name: "<your-airbyte-db-name>" # key is `name` in chart v2 userSecretKey: "database-user" passwordSecretKey: "database-password" And the secret: yaml apiVersion: v1 kind: Secret metadata: name: airbyte-config-secrets type: Opaque stringData: database-user: <user> database-password: <password> [[External DB secrets](https://docs.airbyte.com/platform/deploying-airbyte/integrations/database#secrets)] If any of these are misaligned (wrong DB name, wrong secret key names, etc.), migrations can fail or point at the wrong database. --- ## 3. Let Airbyte fully re‑initialize the DB Once the DB and values are correct: 1. (Recommended) Reinstall the Helm release to force a clean startup sequence, as shown in the official upgrade docs: [[How to upgrade](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#how-to-upgrade); [Deploy Airbyte](https://docs.airbyte.com/platform/deploying-airbyte/chart-v2-community#deploy-airbyte)] bash helm uninstall airbyte -n airbyte helm install airbyte airbyte-v2/airbyte \ --namespace airbyte \ --values ./values.yaml \ --version 2.0.18 # or the chart version you’re using (Keep the namespace and reuse the same external DB.) 2. Watch the server and worker logs at startup for Flyway messages. Unlike your current logs, you should see Flyway creating tables and then stopping the “schema history table does not exist yet” loop once the first migration succeeds. If, after a clean reinstall with correct DB settings, you still see: - Repeated Schema history table "public"."airbyte_jobs_migrations" does not exist yet - Followed by Timeout while waiting for database to fulfill minimum flyway migration version.. then, based on the sources, the remaining likely causes are: - Permission problems on the DB user (can’t create the Flyway tables or other objects) [[SQL DB permissions](https://discuss.airbyte.io/t/1544)] - Connectivity/latency problems that make migrations time out before finishing, similar to earlier Temporal issues with remote RDS/Azure Postgres. [[Temporal context deadline](https://github.com/airbytehq/airbyte/issues/59730); [AWS RDS timeouts](https://discuss.airbyte.io/t/2179)] --- ## 4. About the dataplane table error ERROR: relation "dataplane" does not exist is a symptom of the jobs/config migrations not having run to completion (that table is one of the objects they should create). Once Flyway succeeds in setting up the schema, that error should disappear. The knowledge sources you provided do not document a manual SQL script or supported manual creation of the dataplane table, so I cannot recommend creating it yourself. The supported path is to: - Start from an empty schema/DB, with correct external DB configuration, - Let Airbyte 2.0’s migrations create all tables automatically. --- ### If it still fails The docs and issues you shared do not contain a deeper troubleshooting flow for Flyway migration timeouts in Airbyte 2.0 (no specific SQL to run, nor a dedicated repair tool). If, after: - ensuring a clean DB, - verifying values/secrets and permissions, - and doing a clean Helm uninstall/install, you still hit the same Flyway timeout, that’s beyond what’s covered in these sources. In that case, you’d need to open an issue with: - Exact Airbyte version and chart version, - Full server logs from startup (including all Flyway lines), - Your global.database.* configuration (without passwords). From the documentation, though, the next concrete steps are: 1. Verify DB/secret config matches the external DB docs. 2. Ensure the DB is empty and permissions are sufficient. 3. Reinstall the Helm release and let Airbyte initialize the schema.