- 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.
69 lines
2.9 KiB
Markdown
69 lines
2.9 KiB
Markdown
# 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)
|
|
|