AOSSIE-Org / AOSSIE-Org/OrgExplorer
[BUG]: Unclosed IndexedDB database connections in github.js cause memory leaks
- Ngôn ngữ chính
- JavaScript
- Star
- 34
- Fork
- 92
- Merge trung bình
- 8 ngày 7 giờ
- Pull request đã merge (30 ngày)
- 12
Mô tả
### Bug Description
In `src/services/github.js`, `openDB()` opens an IndexedDB database connection on every cached API request (`cacheGet`, `cacheSet`, `cacheClear`). However, the returned `db` handle is never closed once the transaction finishes or encounters an error.
When analyzing an organization with multiple repositories and fetching contributors, issues, and pull requests, hundreds of `IDBDatabase` connection handles remain open concurrently in the browser tab. This causes memory buildup and can trigger connection limit warnings or block database upgrades.
### Steps to Reproduce
1. Open OrgExplorer and analyze an organization with multiple repositories.
2. Open Chrome DevTools -> Application -> Storage -> IndexedDB -> `orgexplorer_cache`.
3. Observe active database connection handles persisting without closing.
### Code Context
In `src/services/github.js`:
```javascript
export async function cacheGet(key) {
try {
const db = await openDB()
return new Promise(res => {
const req = db.transaction(STORE, 'readonly').objectStore(STORE).get(key)
req.onsuccess = () => {
const r = req.result
if (!r || Date.now() - r.ts > TTL_MS) return res(null)
res(r.v)
// Missing db.close() cleanup
}
req.onerror = () => res(null)
})
} catch { return null }
}
```
By contrast, `src/services/cache.js` properly handles transaction lifecycles and calls `db.close()` on completion and error.
### Environment Details
- Location: `src/services/github.js`
- Impacted Browsers: All browsers supporting IndexedDB (Chrome, Firefox, Safari, Edge)
### Impact
High - Major feature is broken
Hướng dẫn đóng góp
Hướng nghiên cứu
Start with openDB and the cacheGet, cacheSet, and cacheClear entry points in src/services/github.js, comparing their transaction lifecycle with src/services/cache.js. Reproduce an organization analysis and inspect IndexedDB in Chrome DevTools; done means successful and failed requests no longer leave connection handles open or block database upgrades.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- github, javascript
- Lĩnh vực
- databases, frontend
- Loại issue
- Lỗi
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức độ hoạt động
- Sôi nổi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức phù hợp với người mới
- 84/100