This is an automated email from the ASF dual-hosted git repository.
lzljs3620320 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git
The following commit(s) were added to refs/heads/master by this push:
new b0206db69 [core] Call full gc to avoid meta space oom while generating
classes (#4477)
b0206db69 is described below
commit b0206db69bdc0e903264d288bae5eda0667e9a7e
Author: YeJunHao <[email protected]>
AuthorDate: Fri Nov 8 15:59:02 2024 +0800
[core] Call full gc to avoid meta space oom while generating classes (#4477)
---
.../org/apache/paimon/codegen/CodeGenUtils.java | 35 +++++++++++++++++-----
1 file changed, 27 insertions(+), 8 deletions(-)
diff --git
a/paimon-core/src/main/java/org/apache/paimon/codegen/CodeGenUtils.java
b/paimon-core/src/main/java/org/apache/paimon/codegen/CodeGenUtils.java
index d452df5fb..e82ec144d 100644
--- a/paimon-core/src/main/java/org/apache/paimon/codegen/CodeGenUtils.java
+++ b/paimon-core/src/main/java/org/apache/paimon/codegen/CodeGenUtils.java
@@ -107,14 +107,7 @@ public class CodeGenUtils {
try {
Pair<Class<?>, Object[]> result =
- COMPILED_CLASS_CACHE.get(
- classKey,
- () -> {
- GeneratedClass<T> generatedClass =
supplier.get();
- return Pair.of(
-
generatedClass.compile(CodeGenUtils.class.getClassLoader()),
- generatedClass.getReferences());
- });
+ COMPILED_CLASS_CACHE.get(classKey, () ->
generateClass(supplier));
//noinspection unchecked
return (T) GeneratedClass.newInstance(result.getLeft(),
result.getRight());
@@ -124,6 +117,32 @@ public class CodeGenUtils {
}
}
+ private static <T> Pair<Class<?>, Object[]> generateClass(
+ Supplier<GeneratedClass<T>> supplier) {
+ long time = System.currentTimeMillis();
+ RuntimeException ex;
+
+ do {
+ try {
+ GeneratedClass<T> generatedClass = supplier.get();
+ return Pair.of(
+
generatedClass.compile(CodeGenUtils.class.getClassLoader()),
+ generatedClass.getReferences());
+ } catch (OutOfMemoryError error) {
+ // try to gc meta space
+ System.gc();
+ try {
+ Thread.sleep(5_000);
+ } catch (InterruptedException e) {
+ Thread.interrupted();
+ throw new RuntimeException("Sleep interrupted", error);
+ }
+ ex = new RuntimeException("Meet meta space oom while
generating class.", error);
+ }
+ } while ((System.currentTimeMillis() - time) < 60_000);
+ throw ex;
+ }
+
private static class ClassKey {
private final Class<?> classType;