Repository: incubator-slider Updated Branches: refs/heads/develop 55e86f172 -> 9104caad8
SLIDER-904 Resource leak reported by coverity scan results Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/9104caad Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/9104caad Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/9104caad Branch: refs/heads/develop Commit: 9104caad859981d070973ca22c62498362a640f1 Parents: 55e86f1 Author: Gour Saha <[email protected]> Authored: Mon Jun 15 17:21:58 2015 -0700 Committer: Gour Saha <[email protected]> Committed: Mon Jun 15 17:21:58 2015 -0700 ---------------------------------------------------------------------- .../client/ipc/SliderClusterOperations.java | 67 +++++++++++--------- .../slider/server/appmaster/rpc/RpcBinder.java | 60 ++++++++++-------- 2 files changed, 68 insertions(+), 59 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/9104caad/slider-core/src/main/java/org/apache/slider/client/ipc/SliderClusterOperations.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/client/ipc/SliderClusterOperations.java b/slider-core/src/main/java/org/apache/slider/client/ipc/SliderClusterOperations.java index ae95b17..69dcb3b 100644 --- a/slider-core/src/main/java/org/apache/slider/client/ipc/SliderClusterOperations.java +++ b/slider-core/src/main/java/org/apache/slider/client/ipc/SliderClusterOperations.java @@ -282,45 +282,50 @@ public class SliderClusterOperations { @VisibleForTesting public int waitForRoleInstanceLive(String role, long timeout) throws WaitTimeoutException, IOException, YarnException { - Duration duration = new Duration(timeout).start(); + Duration duration = new Duration(timeout); + duration.start(); boolean live = false; int state = StateValues.STATE_CREATED; log.info("Waiting {} millis for a live node in role {}", timeout, role); - while (!live) { - // see if there is a node in that role yet - List<String> uuids = innerListNodeUUIDSByRole(role); - String[] containers = uuids.toArray(new String[uuids.size()]); - int roleCount = containers.length; - ClusterNode roleInstance = null; - if (roleCount != 0) { - - // if there is, get the node - roleInstance = getNode(containers[0]); - if (roleInstance != null) { - state = roleInstance.state; - live = state >= StateValues.STATE_LIVE; + try { + while (!live) { + // see if there is a node in that role yet + List<String> uuids = innerListNodeUUIDSByRole(role); + String[] containers = uuids.toArray(new String[uuids.size()]); + int roleCount = containers.length; + ClusterNode roleInstance = null; + if (roleCount != 0) { + + // if there is, get the node + roleInstance = getNode(containers[0]); + if (roleInstance != null) { + state = roleInstance.state; + live = state >= StateValues.STATE_LIVE; + } } - } - if (!live) { - if (duration.getLimitExceeded()) { - throw new WaitTimeoutException( - String.format("Timeout after %d millis" + - " waiting for a live instance of type %s; " + - "instances found %d %s", - timeout, role, roleCount, - (roleInstance != null - ? (" instance -\n" + roleInstance.toString()) - : "") - )); - } else { - try { - Thread.sleep(1000); - } catch (InterruptedException ignored) { - // ignored + if (!live) { + if (duration.getLimitExceeded()) { + throw new WaitTimeoutException( + String.format("Timeout after %d millis" + + " waiting for a live instance of type %s; " + + "instances found %d %s", + timeout, role, roleCount, + (roleInstance != null + ? (" instance -\n" + roleInstance.toString()) + : "") + )); + } else { + try { + Thread.sleep(1000); + } catch (InterruptedException ignored) { + // ignored + } } } } + } finally { + duration.close(); } return state; } http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/9104caad/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/RpcBinder.java ---------------------------------------------------------------------- diff --git a/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/RpcBinder.java b/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/RpcBinder.java index 9381b76..d5c9df7 100644 --- a/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/RpcBinder.java +++ b/slider-core/src/main/java/org/apache/slider/server/appmaster/rpc/RpcBinder.java @@ -199,37 +199,41 @@ public class RpcBinder { timeout.start(); Exception exception = null; YarnApplicationState state = null; - while (application != null && - (state = application.getYarnApplicationState()).equals( - YarnApplicationState.RUNNING)) { - - try { - return getProxy(conf, application, rpcTimeout); - } catch (IOException e) { - if (connectTimeout <= 0 || timeout.getLimitExceeded()) { - throw e; - } - exception = e; - } catch (YarnException e) { - if (connectTimeout <= 0 || timeout.getLimitExceeded()) { - throw e; + try { + while (application != null && + (state = application.getYarnApplicationState()).equals( + YarnApplicationState.RUNNING)) { + + try { + return getProxy(conf, application, rpcTimeout); + } catch (IOException e) { + if (connectTimeout <= 0 || timeout.getLimitExceeded()) { + throw e; + } + exception = e; + } catch (YarnException e) { + if (connectTimeout <= 0 || timeout.getLimitExceeded()) { + throw e; + } + exception = e; } - exception = e; + //at this point: app failed to work + log.debug("Could not connect to {}. Waiting for getting the latest AM address...", + appId); + Thread.sleep(1000); + //or get the app report + application = + rmClient.getApplicationReport( + GetApplicationReportRequest.newInstance(appId)).getApplicationReport(); } - //at this point: app failed to work - log.debug("Could not connect to {}. Waiting for getting the latest AM address...", - appId); - Thread.sleep(1000); - //or get the app report - application = - rmClient.getApplicationReport( - GetApplicationReportRequest.newInstance(appId)).getApplicationReport(); + //get here if the app is no longer running. Raise a specific + //exception but init it with the previous failure + throw new BadClusterStateException( + exception, + ErrorStrings.E_FINISHED_APPLICATION, appId, state ); + } finally { + timeout.close(); } - //get here if the app is no longer running. Raise a specific - //exception but init it with the previous failure - throw new BadClusterStateException( - exception, - ErrorStrings.E_FINISHED_APPLICATION, appId, state ); } /**
