AOSSIE-Org / AOSSIE-Org/OrgExplorer

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

Offen Anfängerfreundlich
#216 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
bug
Vorherrschende Sprache
JavaScript
Sterne
34
Forks
92
Ø Merge
8 T. 7 Std.
Gemergte PRs (30 T.)
12

Beschreibung

### 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

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

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.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
github, javascript
Bereich
databases, frontend
Issue-Typ
Bug
Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Aktivitätsstatus
Aktiv
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
84/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.