This is an automated email from the ASF dual-hosted git repository.
xuba pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/amoro.git
The following commit(s) were added to refs/heads/master by this push:
new 5313608fb [AMORO-4147] [Improvement]: Resource leak in
CombinedDeleteFilter and MixedDeleteFilter position delete iterators. (#4148)
5313608fb is described below
commit 5313608fb9e66e6fb83b69885148dfb8aeab8ac2
Author: slfan1989 <[email protected]>
AuthorDate: Mon Mar 30 10:44:55 2026 +0800
[AMORO-4147] [Improvement]: Resource leak in CombinedDeleteFilter and
MixedDeleteFilter position delete iterators. (#4148)
---
.../amoro/io/reader/CombinedDeleteFilter.java | 19 ++++++++-------
.../apache/amoro/io/reader/MixedDeleteFilter.java | 27 ++++++++++++----------
2 files changed, 26 insertions(+), 20 deletions(-)
diff --git
a/amoro-format-iceberg/src/main/java/org/apache/amoro/io/reader/CombinedDeleteFilter.java
b/amoro-format-iceberg/src/main/java/org/apache/amoro/io/reader/CombinedDeleteFilter.java
index 66a92fcb8..d184ffcde 100644
---
a/amoro-format-iceberg/src/main/java/org/apache/amoro/io/reader/CombinedDeleteFilter.java
+++
b/amoro-format-iceberg/src/main/java/org/apache/amoro/io/reader/CombinedDeleteFilter.java
@@ -397,15 +397,18 @@ public abstract class CombinedDeleteFilter<T extends
StructLike> {
if (positionMap == null) {
positionMap = new HashMap<>();
List<CloseableIterable<Record>> deletes = Lists.transform(posDeletes,
this::openPosDeletes);
- CloseableIterator<Record> iterator =
CloseableIterable.concat(deletes).iterator();
- while (iterator.hasNext()) {
- Record deleteRecord = iterator.next();
- String path = FILENAME_ACCESSOR.get(deleteRecord).toString();
- if (positionPathSets != null && !positionPathSets.contains(path)) {
- continue;
+ try (CloseableIterator<Record> iterator =
CloseableIterable.concat(deletes).iterator()) {
+ while (iterator.hasNext()) {
+ Record deleteRecord = iterator.next();
+ String path = FILENAME_ACCESSOR.get(deleteRecord).toString();
+ if (positionPathSets != null && !positionPathSets.contains(path)) {
+ continue;
+ }
+ Roaring64Bitmap posBitMap = positionMap.computeIfAbsent(path, k ->
new Roaring64Bitmap());
+ posBitMap.add((Long) POSITION_ACCESSOR.get(deleteRecord));
}
- Roaring64Bitmap posBitMap = positionMap.computeIfAbsent(path, k -> new
Roaring64Bitmap());
- posBitMap.add((Long) POSITION_ACCESSOR.get(deleteRecord));
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to close position delete iterator",
e);
}
}
diff --git
a/amoro-format-iceberg/src/main/java/org/apache/amoro/io/reader/MixedDeleteFilter.java
b/amoro-format-iceberg/src/main/java/org/apache/amoro/io/reader/MixedDeleteFilter.java
index 8aebbcb4e..1d61701e5 100644
---
a/amoro-format-iceberg/src/main/java/org/apache/amoro/io/reader/MixedDeleteFilter.java
+++
b/amoro-format-iceberg/src/main/java/org/apache/amoro/io/reader/MixedDeleteFilter.java
@@ -369,19 +369,22 @@ public abstract class MixedDeleteFilter<T> {
if (positionMap == null) {
positionMap = new HashMap<>();
List<CloseableIterable<Record>> deletes = Lists.transform(posDeletes,
this::openPosDeletes);
- CloseableIterator<Record> iterator =
CloseableIterable.concat(deletes).iterator();
- while (iterator.hasNext()) {
- Record deleteRecord = iterator.next();
- String path = FILENAME_ACCESSOR.get(deleteRecord).toString();
- if (!pathSets.contains(path)) {
- continue;
- }
- Set<Long> posSet = positionMap.get(path);
- if (posSet == null) {
- posSet = new HashSet<>();
- positionMap.put(path, posSet);
+ try (CloseableIterator<Record> iterator =
CloseableIterable.concat(deletes).iterator()) {
+ while (iterator.hasNext()) {
+ Record deleteRecord = iterator.next();
+ String path = FILENAME_ACCESSOR.get(deleteRecord).toString();
+ if (!pathSets.contains(path)) {
+ continue;
+ }
+ Set<Long> posSet = positionMap.get(path);
+ if (posSet == null) {
+ posSet = new HashSet<>();
+ positionMap.put(path, posSet);
+ }
+ posSet.add((Long) POSITION_ACCESSOR.get(deleteRecord));
}
- posSet.add((Long) POSITION_ACCESSOR.get(deleteRecord));
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to close position delete iterator",
e);
}
}