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

  1. Check the wrapped store error's root cause
  2. Verify metadata DB health and retry the task run
  3. Confirm task.InstanceID/DatabaseName form a valid lookup key
  4. 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

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


AI-assisted analysis of bytebase/bytebase@1870550677 (2026-09-06). Data as JSON: /api/errors/dad2fce2aa6e011e. Report an issue: GitHub.