HeartSaVioR commented on a change in pull request #27064:
[SPARK-30246]OneForOneStreamManager might leak memory in connectionTerminated
URL: https://github.com/apache/spark/pull/27064#discussion_r362422639
##########
File path:
common/network-common/src/main/java/org/apache/spark/network/server/OneForOneStreamManager.java
##########
@@ -117,18 +118,21 @@ public static String genStreamChunkId(long streamId, int
chunkId) {
@Override
public void connectionTerminated(Channel channel) {
+ LinkedList<StreamState> removedStates = new LinkedList<>();
// Close all streams which have been associated with the channel.
for (Map.Entry<Long, StreamState> entry: streams.entrySet()) {
StreamState state = entry.getValue();
if (state.associatedChannel == channel) {
- streams.remove(entry.getKey());
-
- // Release all remaining buffers.
- while (state.buffers.hasNext()) {
- ManagedBuffer buffer = state.buffers.next();
- if (buffer != null) {
- buffer.release();
- }
+ removedStates.add(streams.remove(entry.getKey()));
+ }
+ }
+
+ for (StreamState state: removedStates) {
+ // Release all remaining buffers.
Review comment:
Since we're here, would we be better to try our best to clean up everything?
Like adding try-catch and try to release buffers for all removedStates even
there's any exception on releasing any state.
Regarding throwing exception, we could just store the first exception if
anything occurs (other exceptions could be just logged) and throw it. Actually
given the implementation of `TransportRequestHandler.channelInactive`, we can
even log these exceptions as ERROR and don't throw any; effectively same.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]