bytebase/bytebase · error
failed to get database for drift validation
Error message
failed to get database for drift validation
What it means
Thrown by validateTaskFreshness when store.GetDatabase (filtered by task.InstanceID and task.DatabaseName) returns a non-nil error. Drift validation cannot proceed without the database record, so the store error is wrapped and the task run start fails.
Source
Thrown at backend/runner/taskrun/running_scheduler.go:292
}
if instance == nil {
return errors.Errorf("target instance %q has been deleted", task.InstanceID)
}
if instance.Deleted {
return errors.Errorf("target instance %q has been archived", task.InstanceID)
}
// DATABASE_CREATE tasks have DatabaseName = nil — the database doesn't exist yet.
if task.Type == storepb.Task_DATABASE_CREATE {
return nil
}
database, err := s.store.GetDatabase(ctx, &store.FindDatabaseMessage{
InstanceID: &task.InstanceID,
DatabaseName: task.DatabaseName,
})
if err != nil {
return errors.Wrapf(err, "failed to get database for drift validation")
}
if database == nil {
return errors.Errorf("target database %q on instance %q has been deleted", task.GetDatabaseName(), task.InstanceID)
}
plan, err := s.store.GetPlan(ctx, &store.FindPlanMessage{ProjectID: task.ProjectID, UID: &task.PlanID})
if err != nil {
return errors.Wrapf(err, "failed to get plan for drift validation")
}
if plan == nil {
return errors.Errorf("plan %d not found", task.PlanID)
}
return checkTaskDrift(task, database, plan)
}
// checkTaskDrift performs the actual drift comparison logic.
// Returns nil if no drift, or an error describing the drift.View on GitHub (pinned to 1870550677)
Solutions
- Check the wrapped store error's root cause
- Verify metadata DB health and retry the task run
- Confirm task.InstanceID/DatabaseName form a valid lookup key
- Increase context timeout if the query times out under load
Defensive patterns
Strategy: retry
Validate before calling
db, err := store.GetDatabase(ctx, &store.FindDatabaseMessage{InstanceID: &task.InstanceID, DatabaseName: task.DatabaseName})
if err != nil { return fmt.Errorf("database lookup failed: %w", err) } Type guard
func databaseExists(db *store.DatabaseMessage) bool { return db != nil } Try / catch
if _, err := s.store.GetDatabase(ctx, find); err != nil {
if errors.Is(err, context.DeadlineExceeded) { return retry(err) }
return errors.Wrapf(err, "failed to get database for drift validation")
} Prevention
- Ensure task.DatabaseName is set (except DATABASE_CREATE tasks)
- Keep store query timeouts reasonable for scheduler context
- Monitor metadata DB for connection saturation
When it happens
Trigger: executeTaskRun calls validateTaskFreshness; the metadata query for the database fails due to store/database errors, context cancellation, or connection problems.
Common situations: Metadata Postgres connectivity issues; overly broad filter returning a query error; context timeout during heavy scheduler load.
Understand the failure class
Background: Database query failed: Internal Server Error 500s wrapping SQL, Prisma, and connection failures — what to check first — this error's family across 16 libraries.
Related errors
- failed to get instance for drift validation
- failed to get plan for drift validation
- no update field specified
- no update field provided
- no fields to update
AI-assisted analysis of bytebase/bytebase@1870550677 (2026-09-06).
Data as JSON: /api/errors/dad2fce2aa6e011e.
Report an issue: GitHub.