Skip to content

Conversation

Copy link

Copilot AI commented Dec 9, 2025

The API exhibited multiple N+1 query patterns causing excessive database round trips, particularly in project listing and quota endpoints. Additional inefficiencies included redundant session creation and multi-pass password validation.

Changes

N+1 Query Elimination

  • list_openstack_project_for_user: Batch fetch projects, memberships, and users instead of querying per-project and per-member (O(n²) → O(1) queries)
  • remove_user_from_project: Batch fetch member users (O(n) → O(1) queries)
  • show_project_adjustements: Batch fetch users for quota shares (O(n) → O(1) queries)

Session Reuse

  • Added optional session: Optional[Session] parameter to quota calculation functions (calculate_user_quota_by_type, calculate_user_quota, calculate_project_quota, get_user_left_quota_by_type)
  • Updated callers to pass existing sessions, eliminating redundant session creation

Password Validation

  • Single-pass validation with early exit replaces 5 separate iterations (O(5n) → O(n))

Bug Fix

  • ProxyManager: Fixed missing service.target in Traefik loadBalancer URL configuration

Example: Before/After N+1 Fix

# Before: O(n²) queries
for project in projects_owner:
    db_members = session.exec(select(ProjectUserMembership).where(...)).all()
    members=[
        session.exec(select(User).where(User.id == member.user_id)).first().username
        for member in db_members
    ]

# After: O(1) queries  
all_project_ids = [...]
projects = {p.id: p for p in session.exec(select(Project).where(Project.id.in_(all_project_ids))).all()}
memberships = session.exec(select(ProjectUserMembership).where(ProjectUserMembership.project_id.in_(all_project_ids))).all()
users = {u.id: u.username for u in session.exec(select(User).where(User.id.in_(user_ids))).all()}
Original prompt

Identify and suggest improvements to slow or inefficient code


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Co-authored-by: msterhuj <27377346+msterhuj@users.noreply.github.com>
@sonarqubecloud
Copy link

sonarqubecloud bot commented Dec 9, 2025

Please retry analysis of this Pull-Request directly on SonarQube Cloud

Co-authored-by: msterhuj <27377346+msterhuj@users.noreply.github.com>
@sonarqubecloud
Copy link

sonarqubecloud bot commented Dec 9, 2025

Please retry analysis of this Pull-Request directly on SonarQube Cloud

…h check

Co-authored-by: msterhuj <27377346+msterhuj@users.noreply.github.com>
@sonarqubecloud
Copy link

sonarqubecloud bot commented Dec 9, 2025

Copilot AI changed the title [WIP] Identify and suggest improvements for slow code Eliminate N+1 queries and optimize database operations Dec 9, 2025
Copilot AI requested a review from msterhuj December 9, 2025 08:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants