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.
This commit is contained in:
68
docs/archive/status/BUG_FIXES_2025-12-09.md
Normal file
68
docs/archive/status/BUG_FIXES_2025-12-09.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# 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)
|
||||
|
||||
Reference in New Issue
Block a user