Add organization quota setting to database

Everyone can contribute. Help move this issue forward while earning points, leveling up and collecting rewards.

Summary

Add database columns to store the SecurityProjectTrackedContext quota settings:

  1. Per-namespace quota override in namespace_settings
  2. Global default quota in application_settings

This is a foundational task that all other quota work depends on.

Closed Beta Context

During closed beta, we need:

  • Default quota of 2 for all VAC-enabled namespaces
  • Ability to set explicit per-namespace quotas to grant more capacity
  • Global default adjustable without code changes

Implementation

Migration 1: Add column to namespace_settings

# db/migrate/YYYYMMDDHHMMSS_add_security_tracked_context_quota_to_namespace_settings.rb
class AddSecurityTrackedContextQuotaToNamespaceSettings < Gitlab::Database::Migration[2.2]
  milestone '19.1'
  
  def change
    add_column :namespace_settings, :security_tracked_context_quota, :integer, null: true
  end
end

Migration 2: Add column to application_settings

# db/migrate/YYYYMMDDHHMMSS_add_default_security_tracked_context_quota_to_application_settings.rb
class AddDefaultSecurityTrackedContextQuotaToApplicationSettings < Gitlab::Database::Migration[2.2]
  milestone '19.1'
  
  def change
    # Default of 2 for closed beta - conservative starting point
    add_column :application_settings, :default_security_tracked_context_quota, :integer, default: 2
  end
end

Model changes in ee/app/models/ee/namespace_setting.rb

# Validation
validates :security_tracked_context_quota,
  numericality: { only_integer: true, greater_than_or_equal_to: 1, allow_nil: true }

# Add to EE_NAMESPACE_SETTINGS_PARAMS
:security_tracked_context_quota

# New methods
def security_tracked_context_quota_with_default
  return security_tracked_context_quota if security_tracked_context_quota.present?
  return unless Gitlab::Saas.feature_available?(:gitlab_saas_features)
  
  Gitlab::CurrentSettings.default_security_tracked_context_quota || 2
end

def security_tracked_context_quota_explicitly_set?
  security_tracked_context_quota.present?
end

Acceptance Criteria

  • namespace_settings.security_tracked_context_quota column exists (integer, nullable)
  • application_settings.default_security_tracked_context_quota column exists (integer, default: 2)
  • Validation ensures quota is >= 1 when set
  • security_tracked_context_quota_with_default returns explicit value if set, else default
  • security_tracked_context_quota_explicitly_set? returns true only when explicitly set
  • Setting quota to nil reverts to using default
  • Unit tests for model methods

Dependencies

None - this is the foundation.

Downstream Issues

Edited by 🤖 GitLab Bot 🤖