[Improvement]: Implement heap-based flush mechanism for SortedPosDeleteWriter to prevent OOM
Los mantenedores suelen responder en 2 días
@slfan1989 ya está trabajando en esto.
Desde el 19/7/2026.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 52/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- java
- Área
- data-engineering, databases
Línea de trabajo
Comienza en SortedPosDeleteWriter y en el TODO relacionado con su condición de flush basada en el número de registros; sigue sus constructores y el manejo de las propiedades de la tabla. Define HeapUsageProvider y una política basada en el heap junto con el umbral de registros existente, y luego verifica mediante pruebas que estén cubiertas las comprobaciones del número mínimo de registros y de una proporción no válida, la compatibilidad de los constructores y la monitorización sin GC forzado.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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
- Lenguaje dominante
- Java
- Estrellas
- 1.2k
- Forks
- 398
- Merge medio
- 1 d 14 h
- PR fusionados (30 d)
- 19
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de apache/amoro
-
[CI] Core CI doesn't run for changes to amoro-format-lance (and amoro-web)Posiblemente ocupada @MarkAlex1234 la tomó hace 1 día. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
Los mantenedores suelen responder en 2 días
-
fix: low-contrast secondary text color in global theme tokenQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abiertostale
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
apache/amoro#4157 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
fix: mock api server enabled in production build masks real error/loading uxQuizá libre de nuevo Un pull request para esta issue se cerró sin fusionarse. Abiertostale
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
apache/amoro#4155 · 1 comentario ·
Los mantenedores suelen responder en 2 días
-
[Bug]: Connection validation rejects bracketed IPv6 endpointsPosiblemente ocupada @hutiefang76 la tomó hace 3 días. Abiertotype:bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
Los mantenedores suelen responder en 2 días
-
[Bug]: Table pagination parameters can overflow or return server errorsPosiblemente ocupada @hutiefang76 la tomó hace 3 días. Abiertotype:bug
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
Los mantenedores suelen responder en 2 días
Todos los issues de apache/amoro
Issues similares
-
[Bug] Logo style setting missing and `classic` style not applied across multiple platforms (v3.1.0)Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Stirling-Tools/Stirling-PDF#8382 · 1 reacción ·
Los mantenedores suelen responder en 2 días
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 70/100
Los mantenedores suelen responder en 4 días
-
enhancement untriaged
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
opensearch-project/sql#5842 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
openhab/openhab-addons#21882 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
YunaiV/ruoyi-vue-pro#1273 ·
Los mantenedores suelen responder en 3 días