Skip to content

Add project-scoped callouts for failed web-hooks

Alex Kalderimis requested to merge 363662-project-callouts into master

What does this MR do and why?

This MR adds project-scoped callouts for failed web-hooks.

In order to enable this, a new callout table is added: user_namespace_callouts, which at present contains only project-namespace callouts (supporting the project-scoped case) but can eventually be used to replace the user-group-callouts table, which is a specific case of namespaces.

This is guarded by a new feature-flag: webhooks_failed_callout

This is not exposed in the frontend yet, so no observable changes are present in this MR.

See: #365772 (closed)

New database queries:

The follow new database query is used:

# See app/helpers/web_hooks/web_hooks_helper.rb:23
ProjectHook.for_projects(project).disabled.exists?

Which produces the following SQL (here for gitlab-org/gitlab>)

SELECT 1 AS one FROM "web_hooks"
 WHERE "web_hooks"."type" = 'ProjectHook'
   AND "web_hooks"."project_id" = 278964
   AND (recent_failures > 3 OR disabled_until >= '2022-06-27 18:27:30.227635')
   LIMIT 1

Plan:

 Limit  (cost=0.43..4.38 rows=1 width=4) (actual time=58.780..58.781 rows=0 loops=1)
   Buffers: shared read=7
   I/O Timings: read=58.667 write=0.000
   ->  Index Scan using index_web_hooks_on_project_id on public.web_hooks  (cost=0.43..4.38 rows=1 width=4) (actual time=58.777..58.778 rows=0 loops=1)
         Index Cond: (web_hooks.project_id = 278964)
         Filter: (((web_hooks.type)::text = 'ProjectHook'::text) AND ((web_hooks.recent_failures > 3) OR (web_hooks.disabled_until >= '2022-06-27 18:27:30.227635+00'::timestamp with time zone)))
         Rows Removed by Filter: 3
         Buffers: shared read=7
         I/O Timings: read=58.667 write=0.000

Timings from #database-lab:

Time: 60.573 ms
  - planning: 1.743 ms
  - execution: 58.830 ms
    - I/O read: 58.667 ms
    - I/O write: 0.000 ms

Shared buffers:
  - hits: 0 from the buffer pool
  - reads: 7 (~56.00 KiB) from the OS file cache, including disk I/O
  - dirtied: 0
  - writes: 0

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Alex Kalderimis

Merge request reports