AOSSIE-Org / AOSSIE-Org/OrgExplorer

[BUG]: Unclosed IndexedDB database connections in github.js cause memory leaks

Đang mở Phù hợp với người mới
#216 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
bug
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

Mở 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

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.