You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by sr...@apache.org on 2020/12/20 15:03:42 UTC
[spark] branch branch-3.1 updated: [SPARK-33756][SQL] Make
BytesToBytesMap's MapIterator idempotent
This is an automated email from the ASF dual-hosted git repository.
srowen pushed a commit to branch branch-3.1
in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/branch-3.1 by this push:
new 5124558 [SPARK-33756][SQL] Make BytesToBytesMap's MapIterator idempotent
5124558 is described below
commit 5124558eb6ce561978231e3d9db9b86878e63ca9
Author: Xianjin YE <ad...@gmail.com>
AuthorDate: Sun Dec 20 08:51:17 2020 -0600
[SPARK-33756][SQL] Make BytesToBytesMap's MapIterator idempotent
### What changes were proposed in this pull request?
Make MapIterator of BytesToBytesMap `hasNext` method idempotent
### Why are the changes needed?
The `hasNext` maybe called multiple times, if not guarded, second call of hasNext method after reaching the end of iterator will throw NoSuchElement exception.
### Does this PR introduce _any_ user-facing change?
NO.
### How was this patch tested?
Update a unit test to cover this case.
Closes #30728 from advancedxy/SPARK-33756.
Authored-by: Xianjin YE <ad...@gmail.com>
Signed-off-by: Sean Owen <sr...@gmail.com>
(cherry picked from commit 13391683e7a863671d3d719dc81e20ec2a870725)
Signed-off-by: Sean Owen <sr...@gmail.com>
---
.../main/java/org/apache/spark/unsafe/map/BytesToBytesMap.java | 10 ++++++----
.../apache/spark/unsafe/map/AbstractBytesToBytesMapSuite.java | 2 ++
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/core/src/main/java/org/apache/spark/unsafe/map/BytesToBytesMap.java b/core/src/main/java/org/apache/spark/unsafe/map/BytesToBytesMap.java
index d7940fc..f474c30 100644
--- a/core/src/main/java/org/apache/spark/unsafe/map/BytesToBytesMap.java
+++ b/core/src/main/java/org/apache/spark/unsafe/map/BytesToBytesMap.java
@@ -393,10 +393,12 @@ public final class BytesToBytesMap extends MemoryConsumer {
}
private void handleFailedDelete() {
- // remove the spill file from disk
- File file = spillWriters.removeFirst().getFile();
- if (file != null && file.exists() && !file.delete()) {
- logger.error("Was unable to delete spill file {}", file.getAbsolutePath());
+ if (spillWriters.size() > 0) {
+ // remove the spill file from disk
+ File file = spillWriters.removeFirst().getFile();
+ if (file != null && file.exists() && !file.delete()) {
+ logger.error("Was unable to delete spill file {}", file.getAbsolutePath());
+ }
}
}
}
diff --git a/core/src/test/java/org/apache/spark/unsafe/map/AbstractBytesToBytesMapSuite.java b/core/src/test/java/org/apache/spark/unsafe/map/AbstractBytesToBytesMapSuite.java
index f4e952f..f35176a 100644
--- a/core/src/test/java/org/apache/spark/unsafe/map/AbstractBytesToBytesMapSuite.java
+++ b/core/src/test/java/org/apache/spark/unsafe/map/AbstractBytesToBytesMapSuite.java
@@ -576,6 +576,8 @@ public abstract class AbstractBytesToBytesMapSuite {
iter2.next();
}
assertFalse(iter2.hasNext());
+ // calls hasNext twice deliberately, make sure it's idempotent
+ assertFalse(iter2.hasNext());
} finally {
map.free();
for (File spillFile : spillFilesCreated) {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org