mirror of
https://github.com/supabase/supabase.git
synced 2026-10-05 09:25:06 +03:00
* fix(studio): check job_run_details size in cron display When cron.job_run_details grows too large (200k+ rows), loading the cron jobs overview can timeout and affect other queries by pulling excessive data into shared buffers. This change: - Estimates table size using pg_stat before fetching cron jobs data - Shows a cleanup notice when the table exceeds the threshold - Provides batched deletion using ctid ranges to avoid buffer pollution - Allows scheduling an automated daily cleanup cron job - Handles timeout errors gracefully with a "suspected overflow" state The useCronJobsData hook now returns a discriminated union status that tracks loading, estimate-error, overflow-confirmed, overflow-suspected, and ready states, allowing the UI to respond appropriately to each case. * fix(studio): use index when querying cron.job_run_details cron.job_run_details is only indexed by runid, not by start_time. Change the query to use the runid index (which gives the same result, since runid is auto-incrementing).
30 lines
1.1 KiB
TypeScript
30 lines
1.1 KiB
TypeScript
import { useQueryClient } from '@tanstack/react-query'
|
|
import { useEffect } from 'react'
|
|
|
|
import { prefetchCronJobRunDetailsEstimate } from 'data/database-cron-jobs/database-cron-job-run-details-estimate-query'
|
|
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
|
|
import { useStaticEffectEvent } from 'hooks/useStaticEffectEvent'
|
|
|
|
/**
|
|
* Prefetches the cron job run details estimate when on a Cron integration page.
|
|
* This avoids a query waterfall when navigating to the Jobs tab, since the
|
|
* Jobs tab gates loading cron jobs on this estimate query completing first.
|
|
*/
|
|
export function useCronJobsEstimatePrefetch(integrationId: string | undefined) {
|
|
const queryClient = useQueryClient()
|
|
const { data: project } = useSelectedProjectQuery()
|
|
|
|
const prefetch = useStaticEffectEvent(() => {
|
|
prefetchCronJobRunDetailsEstimate(queryClient, {
|
|
projectRef: project?.ref,
|
|
connectionString: project?.connectionString,
|
|
})
|
|
})
|
|
|
|
useEffect(() => {
|
|
if (integrationId === 'cron' && project?.ref) {
|
|
prefetch()
|
|
}
|
|
}, [integrationId, project?.ref, prefetch])
|
|
}
|