[Improvement]: Implement heap-based flush mechanism for SortedPosDeleteWriter to prevent OOM
I maintainer di solito rispondono entro 2 giorni
@slfan1989 ci sta già lavorando.
Dal 19/7/2026.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 52/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- java
- Ambito
- data-engineering, databases
Direzione di ricerca
Parti da SortedPosDeleteWriter e dal TODO relativo alla sua condizione di flush basata sul numero di record; segui i suoi costruttori e la gestione delle proprietà della tabella. Definisci HeapUsageProvider e una policy basata sull’heap insieme alla soglia di record esistente, quindi verifica con i test che siano coperti i controlli sul numero minimo di record e su un rapporto non valido, la compatibilità dei costruttori e il monitoraggio senza GC forzato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Search before asking
- I have searched in the issues and found no similar issues.
What would you like to be improved?
Currently, SortedPosDeleteWriter only flushes buffered position deletes based on a record count threshold. There is a TODO comment in the code indicating the need for a heap memory-based flush policy:
// TODO Flush buffer based on the policy that checking whether whole heap memory size exceed the
// threshold.
if (records >= recordsNumThreshold) {
flushDeletes();
}
Problem: When processing large-scale position deletes, the in-memory buffer in SortedPosDeleteWriter can grow unbounded (if record threshold is set very high or to Long.MAX_VALUE), potentially causing OutOfMemoryError (OOM) issues, especially in memory-constrained environments.
Current behavior:
- Only flushes when record count reaches recordsNumThreshold
- No protection against heap memory pressure
- Can lead to OOM when processing large delete operations
How should we improve?
Implement a heap memory-based flush mechanism with the following features:
1. New table properties:
pos-delete.flush.heap.ratio (default: 0.8)- Heap usage ratio threshold to trigger flushpos-delete.flush.records (default: Long.MAX_VALUE)- Record count thresholdpos-delete.flush.heap.min-records (default: 1000)- Minimum records before heap-based flush kicks in
2. Implementation details:
- Add
HeapUsageProviderinterface to monitor JVM heap usage - Implement
shouldFlushByHeap()method to check if heap usage exceeds threshold - Modify flush logic to:
if (records >= recordsNumThreshold || shouldFlushByHeap()) - Ensure backward compatibility through constructor overloads
3. Safety guards:
- Prevent frequent small flushes with minimum record count
- Allow disabling heap-based flush by setting invalid ratio (≤0 or ≥1)
- Non-intrusive monitoring (no forced GC)
Are you willing to submit PR?
- Yes I am willing to submit a PR!
Subtasks
No response
Code of Conduct
- I agree to follow this project's Code of Conduct
- Lingua principale
- Java
- Stelle
- 1.2k
- Fork
- 398
- Merge medio
- 1g 14h
- PR unite (30g)
- 19
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di apache/amoro
-
[CI] Core CI doesn't run for changes to amoro-format-lance (and amoro-web)Forse già presa @MarkAlex1234 l’ha presa 1 giorno fa. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
I maintainer di solito rispondono entro 2 giorni
-
fix: low-contrast secondary text color in global theme tokenForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Apertastale
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
apache/amoro#4157 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
fix: mock api server enabled in production build masks real error/loading uxForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Apertastale
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 78/100
apache/amoro#4155 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
[Bug]: Connection validation rejects bracketed IPv6 endpointsForse già presa @hutiefang76 l’ha presa 3 giorni fa. Apertatype:bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 35/100
I maintainer di solito rispondono entro 2 giorni
-
[Bug]: Table pagination parameters can overflow or return server errorsForse già presa @hutiefang76 l’ha presa 3 giorni fa. Apertatype:bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di apache/amoro
Issue simili
-
Clock.MakeTime fails to validate hour, minute, and second ranges due to inert Calendar.set try-catchAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
mit-cml/appinventor-sources#4139 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
Vakore/ZappierGames#81 ·
-
proposal
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
beemdevelopment/Aegis#1843 · 1 reazione ·
-
[Bug] Logo style setting missing and `classic` style not applied across multiple platforms (v3.1.0)Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
Stirling-Tools/Stirling-PDF#8382 · 1 reazione ·
I maintainer di solito rispondono entro 2 giorni
-
>enhancement needs:triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
elastic/elasticsearch#161191 ·
I maintainer di solito rispondono entro 1 giorno