Files
Sankofa/docs/archive/status/BUG_FIXES_2025-12-09.md
defiQUG 7cd7022f6e Update .gitignore, remove package-lock.json, and enhance Cloudflare and Proxmox adapters
- Added lock file exclusions for pnpm in .gitignore.
- Removed obsolete package-lock.json from the api and portal directories.
- Enhanced Cloudflare adapter with additional interfaces for zones and tunnels.
- Improved Proxmox adapter error handling and logging for API requests.
- Updated Proxmox VM parameters with validation rules in the API schema.
- Enhanced documentation for Proxmox VM specifications and examples.
2025-12-12 19:29:01 -08:00

2.9 KiB

Bug Fixes - December 9, 2025

Bug 1: Unreachable Return Statement in costOptimization Resolver

Issue

The costOptimization resolver in api/src/schema/resolvers.ts had an unreachable return statement at line 407. Lines 397-406 already returned the mapped recommendations, making line 407 dead code that would never execute.

Root Cause

Incomplete refactoring where both the mapped return value and the original return statement were left in place.

Fix

Removed the unreachable return billingService.getCostOptimization(args.tenantId) statement at line 407.

Files Changed

  • api/src/schema/resolvers.ts (line 407)

Bug 2: N+1 Query Problem in getResources Function

Issue

The getResources function in api/src/services/resource.ts executed one query to fetch resources, then called mapResource for each row. The mapResource function executed an additional database query to fetch site information for every resource (line 293). This created an N+1 query problem: if you fetched 100 resources, you executed 101 queries instead of 1-2 optimized queries.

Impact

  • Performance: Severely degraded performance with large datasets
  • Database Load: Unnecessary database load and connection overhead
  • Scalability: Does not scale well as the number of resources grows

Root Cause

The original implementation fetched resources first, then made individual queries for each resource's site information.

Fix

  1. Modified getResources function to use a LEFT JOIN query that fetches both resources and sites in a single database query
  2. Created mapResourceWithSite function to map the joined query results without making additional database queries
  3. Preserved mapResource function for single resource lookups (used by getResource and other functions)

Performance Improvement

  • Before: N+1 queries (1 for resources + N for sites)
  • After: 1 query (resources and sites joined)
  • Example: Fetching 100 resources now uses 1 query instead of 101 queries

Files Changed

  • api/src/services/resource.ts:
    • Modified getResources function (lines 47-92)
    • Added mapResourceWithSite function (lines 303-365)
    • Preserved mapResource function for backward compatibility

Testing Recommendations

  1. Bug 1: Verify that costOptimization resolver returns the correct recommendations without errors
  2. Bug 2:
    • Test getResources with various filter combinations
    • Verify that site information is correctly populated
    • Monitor database query count to confirm N+1 problem is resolved
    • Test with large datasets (100+ resources) to verify performance improvement

Verification

Both bugs have been verified:

  • Bug 1: Unreachable code removed
  • Bug 2: N+1 query problem fixed with JOIN query
  • No linter errors introduced
  • Backward compatibility maintained (single resource lookups still work)