You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by xy...@apache.org on 2017/08/04 18:12:46 UTC
hadoop git commit: HDFS-12246. Ozone: potential thread leaks.
Contributed by Weiwei Yang.
Repository: hadoop
Updated Branches:
refs/heads/HDFS-7240 af6dfdf7e -> 15101eef7
HDFS-12246. Ozone: potential thread leaks. Contributed by Weiwei Yang.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/15101eef
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/15101eef
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/15101eef
Branch: refs/heads/HDFS-7240
Commit: 15101eef75063cd0225523032e84aba8f4b1c4bc
Parents: af6dfdf
Author: Xiaoyu Yao <xy...@apache.org>
Authored: Fri Aug 4 11:11:11 2017 -0700
Committer: Xiaoyu Yao <xy...@apache.org>
Committed: Fri Aug 4 11:11:11 2017 -0700
----------------------------------------------------------------------
.../apache/hadoop/scm/XceiverClientManager.java | 4 +++-
.../server/datanode/ObjectStoreHandler.java | 10 ++++------
.../apache/hadoop/ozone/OzoneClientImpl.java | 7 ++++---
.../statemachine/DatanodeStateMachine.java | 20 +++++++++++++++-----
.../statemachine/SCMConnectionManager.java | 11 ++++++++++-
.../common/transport/server/XceiverServer.java | 3 +++
.../ozone/scm/StorageContainerManager.java | 7 ++++---
.../web/storage/DistributedStorageHandler.java | 7 ++++---
8 files changed, 47 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/15101eef/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/XceiverClientManager.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/XceiverClientManager.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/XceiverClientManager.java
index 62e5af1..246246f 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/XceiverClientManager.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/scm/XceiverClientManager.java
@@ -18,6 +18,7 @@
package org.apache.hadoop.scm;
+import java.io.Closeable;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.Callable;
@@ -53,7 +54,7 @@ import static org.apache.hadoop.scm.ScmConfigKeys
* without reestablishing connection. But the connection will be closed if
* not being used for a period of time.
*/
-public class XceiverClientManager {
+public class XceiverClientManager implements Closeable {
//TODO : change this to SCM configuration class
private final Configuration conf;
@@ -89,6 +90,7 @@ public class XceiverClientManager {
// Mark the entry as evicted
XceiverClientSpi info = removalNotification.getValue();
info.setEvicted();
+ info.close();
}
}
}).build();
http://git-wip-us.apache.org/repos/asf/hadoop/blob/15101eef/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/ObjectStoreHandler.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/ObjectStoreHandler.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/ObjectStoreHandler.java
index 40c7b1c..5b76179 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/ObjectStoreHandler.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/ObjectStoreHandler.java
@@ -30,6 +30,7 @@ import java.util.Map;
import com.sun.jersey.api.container.ContainerFactory;
import com.sun.jersey.api.core.ApplicationAdapter;
+import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.ksm.protocolPB
.KeySpaceManagerProtocolClientSideTranslatorPB;
import org.apache.hadoop.ksm.protocolPB.KeySpaceManagerProtocolPB;
@@ -179,11 +180,8 @@ public final class ObjectStoreHandler implements Closeable {
public void close() {
LOG.info("Closing ObjectStoreHandler.");
storageHandler.close();
- if (this.storageContainerLocationClient != null) {
- this.storageContainerLocationClient.close();
- }
- if (this.scmBlockLocationClient != null) {
- this.scmBlockLocationClient.close();
- }
+ IOUtils.cleanupWithLogger(LOG, storageContainerLocationClient);
+ IOUtils.cleanupWithLogger(LOG, scmBlockLocationClient);
+ IOUtils.cleanupWithLogger(LOG, keySpaceManagerClient);
}
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/15101eef/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/OzoneClientImpl.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/OzoneClientImpl.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/OzoneClientImpl.java
index 3bd74a3..feb4586 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/OzoneClientImpl.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/OzoneClientImpl.java
@@ -21,6 +21,7 @@ import com.google.common.base.Preconditions;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.StorageType;
import org.apache.hadoop.hdfs.server.datanode.fsdataset.LengthInputStream;
+import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.ipc.Client;
import org.apache.hadoop.ipc.ProtobufRpcEngine;
import org.apache.hadoop.ipc.RPC;
@@ -562,8 +563,8 @@ public class OzoneClientImpl implements OzoneClient, Closeable {
@Override
public void close() throws IOException {
- if(xceiverClientManager != null) {
- xceiverClientManager.close();
- }
+ IOUtils.cleanupWithLogger(LOG, storageContainerLocationClient);
+ IOUtils.cleanupWithLogger(LOG, keySpaceManagerClient);
+ IOUtils.cleanupWithLogger(LOG, xceiverClientManager);
}
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/15101eef/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java
index 5cac7b0..a15ce75 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java
@@ -53,6 +53,8 @@ public class DatanodeStateMachine implements Closeable {
private final CommandDispatcher commandDispatcher;
private long commandsHandled;
private AtomicLong nextHB;
+ private Thread stateMachineThread = null;
+ private Thread cmdProcessThread = null;
/**
* Constructs a a datanode state machine.
@@ -136,6 +138,8 @@ public class DatanodeStateMachine implements Closeable {
if (now < nextHB.get()) {
Thread.sleep(nextHB.get() - now);
}
+ } catch (InterruptedException e) {
+ // Ignore this exception.
} catch (Exception e) {
LOG.error("Unable to finish the execution.", e);
}
@@ -173,6 +177,12 @@ public class DatanodeStateMachine implements Closeable {
*/
@Override
public void close() throws IOException {
+ if (stateMachineThread != null) {
+ stateMachineThread.interrupt();
+ }
+ if (cmdProcessThread != null) {
+ cmdProcessThread.interrupt();
+ }
context.setState(DatanodeStates.getLastState());
executorService.shutdown();
try {
@@ -189,8 +199,8 @@ public class DatanodeStateMachine implements Closeable {
Thread.currentThread().interrupt();
}
- for (EndpointStateMachine endPoint : connectionManager.getValues()) {
- endPoint.close();
+ if (connectionManager != null) {
+ connectionManager.close();
}
if(container != null) {
@@ -275,11 +285,11 @@ public class DatanodeStateMachine implements Closeable {
LOG.error("Unable to start the DatanodeState Machine", ex);
}
};
- Thread thread = new ThreadFactoryBuilder()
+ stateMachineThread = new ThreadFactoryBuilder()
.setDaemon(true)
.setNameFormat("Datanode State Machine Thread - %d")
.build().newThread(startStateMachineTask);
- thread.start();
+ stateMachineThread.start();
}
/**
@@ -344,7 +354,7 @@ public class DatanodeStateMachine implements Closeable {
};
// We will have only one thread for command processing in a datanode.
- Thread cmdProcessThread = new Thread(processCommandQueue);
+ cmdProcessThread = new Thread(processCommandQueue);
cmdProcessThread.setDaemon(true);
cmdProcessThread.setName("Command processor thread");
cmdProcessThread.setUncaughtExceptionHandler((Thread t, Throwable e) -> {
http://git-wip-us.apache.org/repos/asf/hadoop/blob/15101eef/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/SCMConnectionManager.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/SCMConnectionManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/SCMConnectionManager.java
index a2384e8..9023526 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/SCMConnectionManager.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/SCMConnectionManager.java
@@ -17,6 +17,7 @@
package org.apache.hadoop.ozone.container.common.statemachine;
import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.ipc.ProtobufRpcEngine;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.net.NetUtils;
@@ -28,6 +29,7 @@ import org.apache.hadoop.security.UserGroupInformation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.Closeable;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.Collection;
@@ -40,7 +42,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
* SCMConnectionManager - Acts as a class that manages the membership
* information of the SCMs that we are working with.
*/
-public class SCMConnectionManager {
+public class SCMConnectionManager implements Closeable{
private static final Logger LOG =
LoggerFactory.getLogger(SCMConnectionManager.class);
@@ -132,6 +134,7 @@ public class SCMConnectionManager {
StorageContainerDatanodeProtocolClientSideTranslatorPB rpcClient =
new StorageContainerDatanodeProtocolClientSideTranslatorPB(rpcProxy);
+
EndpointStateMachine endPoint =
new EndpointStateMachine(address, rpcClient, conf);
scmMachines.put(address, endPoint);
@@ -171,4 +174,10 @@ public class SCMConnectionManager {
public Collection<EndpointStateMachine> getValues() {
return scmMachines.values();
}
+
+ @Override
+ public void close() throws IOException {
+ getValues().forEach(endpointStateMachine
+ -> IOUtils.cleanupWithLogger(LOG, endpointStateMachine));
+ }
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/15101eef/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/XceiverServer.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/XceiverServer.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/XceiverServer.java
index cd2146b..3a6e672 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/XceiverServer.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/XceiverServer.java
@@ -97,6 +97,9 @@ public final class XceiverServer implements XceiverServerSpi {
@Override
public void stop() {
+ if (storageContainer != null) {
+ storageContainer.shutdown();
+ }
if (bossGroup != null) {
bossGroup.shutdownGracefully();
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/15101eef/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/StorageContainerManager.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/StorageContainerManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/StorageContainerManager.java
index 409b182..9d3df77 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/StorageContainerManager.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/scm/StorageContainerManager.java
@@ -21,10 +21,10 @@ import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import com.google.protobuf.BlockingService;
import com.google.protobuf.InvalidProtocolBufferException;
-import org.apache.commons.io.IOUtils;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.hdfs.DFSUtil;
import org.apache.hadoop.hdfs.protocol.DatanodeID;
+import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.ipc.ProtobufRpcEngine;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.metrics2.util.MBeans;
@@ -610,8 +610,9 @@ public class StorageContainerManager
}
unregisterMXBean();
- IOUtils.closeQuietly(scmContainerManager);
- IOUtils.closeQuietly(scmBlockManager);
+ IOUtils.cleanupWithLogger(LOG, scmContainerManager);
+ IOUtils.cleanupWithLogger(LOG, scmBlockManager);
+ IOUtils.cleanupWithLogger(LOG, scmNodeManager);
}
/**
http://git-wip-us.apache.org/repos/asf/hadoop/blob/15101eef/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/storage/DistributedStorageHandler.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/storage/DistributedStorageHandler.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/storage/DistributedStorageHandler.java
index c5754e7..ccc71fa 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/storage/DistributedStorageHandler.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/web/storage/DistributedStorageHandler.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.ozone.web.storage;
import com.google.common.base.Strings;
import org.apache.hadoop.hdfs.server.datanode.fsdataset
.LengthInputStream;
+import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.ksm.helpers.KsmBucketArgs;
import org.apache.hadoop.ksm.helpers.KsmBucketInfo;
import org.apache.hadoop.ksm.helpers.KsmKeyArgs;
@@ -496,8 +497,8 @@ public final class DistributedStorageHandler implements StorageHandler {
*/
@Override
public void close() {
- if(xceiverClientManager != null) {
- xceiverClientManager.close();
- }
+ IOUtils.cleanupWithLogger(LOG, xceiverClientManager);
+ IOUtils.cleanupWithLogger(LOG, keySpaceManagerClient);
+ IOUtils.cleanupWithLogger(LOG, storageContainerLocationClient);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org