Author: kasha
Date: Mon Jan 6 18:43:09 2014
New Revision: 1555971
URL: http://svn.apache.org/r1555971
Log:
YARN-1559. Race between ServerRMProxy and ClientRMProxy setting
RMProxy#INSTANCE. (kasha and vinodkv via kasha)
Modified:
hadoop/common/branches/branch-2/hadoop-yarn-project/CHANGES.txt
hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/dev-support/findbugs-exclude.xml
hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/ClientRMProxy.java
hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/client/RMProxy.java
hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/api/ServerRMProxy.java
Modified: hadoop/common/branches/branch-2/hadoop-yarn-project/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-yarn-project/CHANGES.txt?rev=1555971&r1=1555970&r2=1555971&view=diff
==============================================================================
--- hadoop/common/branches/branch-2/hadoop-yarn-project/CHANGES.txt (original)
+++ hadoop/common/branches/branch-2/hadoop-yarn-project/CHANGES.txt Mon Jan 6
18:43:09 2014
@@ -268,6 +268,9 @@ Release 2.4.0 - UNRELEASED
YARN-1549. Fixed a bug in ResourceManager's ApplicationMasterService that
was causing unamanged AMs to not finish correctly. (haosdent via vinodkv)
+ YARN-1559. Race between ServerRMProxy and ClientRMProxy setting
+ RMProxy#INSTANCE. (kasha and vinodkv via kasha)
+
Release 2.3.0 - UNRELEASED
INCOMPATIBLE CHANGES
Modified:
hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/dev-support/findbugs-exclude.xml
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/dev-support/findbugs-exclude.xml?rev=1555971&r1=1555970&r2=1555971&view=diff
==============================================================================
---
hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/dev-support/findbugs-exclude.xml
(original)
+++
hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/dev-support/findbugs-exclude.xml
Mon Jan 6 18:43:09 2014
@@ -309,13 +309,4 @@
<Class
name="org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore" />
<Bug pattern="IS2_INCONSISTENT_SYNC" />
</Match>
-
- <!-- Ignore INSTANCE not being final as it is created in sub-classes -->
- <Match>
- <Class name="org.apache.hadoop.yarn.client.RMProxy" />
- <Field name="INSTANCE" />
- <Bug pattern="MS_SHOULD_BE_FINAL"/>
- </Match>
-
-
</FindBugsFilter>
Modified:
hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/ClientRMProxy.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/ClientRMProxy.java?rev=1555971&r1=1555970&r2=1555971&view=diff
==============================================================================
---
hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/ClientRMProxy.java
(original)
+++
hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/ClientRMProxy.java
Mon Jan 6 18:43:09 2014
@@ -39,16 +39,13 @@ import com.google.common.base.Preconditi
public class ClientRMProxy<T> extends RMProxy<T> {
private static final Log LOG = LogFactory.getLog(ClientRMProxy.class);
+ private static final ClientRMProxy INSTANCE = new ClientRMProxy();
private interface ClientRMProtocols extends ApplicationClientProtocol,
ApplicationMasterProtocol, ResourceManagerAdministrationProtocol {
// Add nothing
}
- static {
- INSTANCE = new ClientRMProxy();
- }
-
private ClientRMProxy(){
super();
}
@@ -63,9 +60,7 @@ public class ClientRMProxy<T> extends RM
*/
public static <T> T createRMProxy(final Configuration configuration,
final Class<T> protocol) throws IOException {
- // This method exists only to initiate this class' static INSTANCE. TODO:
- // FIX if possible
- return RMProxy.createRMProxy(configuration, protocol);
+ return createRMProxy(configuration, protocol, INSTANCE);
}
private static void setupTokens(InetSocketAddress resourceManagerAddress)
Modified:
hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/client/RMProxy.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/client/RMProxy.java?rev=1555971&r1=1555970&r2=1555971&view=diff
==============================================================================
---
hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/client/RMProxy.java
(original)
+++
hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/client/RMProxy.java
Mon Jan 6 18:43:09 2014
@@ -50,7 +50,6 @@ import com.google.common.annotations.Vis
public class RMProxy<T> {
private static final Log LOG = LogFactory.getLog(RMProxy.class);
- protected static RMProxy INSTANCE;
protected RMProxy() {}
@@ -79,17 +78,17 @@ public class RMProxy<T> {
*/
@Private
protected static <T> T createRMProxy(final Configuration configuration,
- final Class<T> protocol) throws IOException {
+ final Class<T> protocol, RMProxy instance) throws IOException {
YarnConfiguration conf = (configuration instanceof YarnConfiguration)
? (YarnConfiguration) configuration
: new YarnConfiguration(configuration);
RetryPolicy retryPolicy = createRetryPolicy(conf);
if (HAUtil.isHAEnabled(conf)) {
RMFailoverProxyProvider<T> provider =
- INSTANCE.createRMFailoverProxyProvider(conf, protocol);
+ instance.createRMFailoverProxyProvider(conf, protocol);
return (T) RetryProxy.create(protocol, provider, retryPolicy);
} else {
- InetSocketAddress rmAddress = INSTANCE.getRMAddress(conf, protocol);
+ InetSocketAddress rmAddress = instance.getRMAddress(conf, protocol);
LOG.info("Connecting to ResourceManager at " + rmAddress);
T proxy = RMProxy.<T>getProxy(conf, protocol, rmAddress);
return (T) RetryProxy.create(protocol, proxy, retryPolicy);
@@ -160,25 +159,6 @@ public class RMProxy<T> {
}
/**
- * A RetryPolicy to allow failing over upto the specified maximum time.
- */
- private static class FailoverUptoMaximumTimePolicy implements RetryPolicy {
- private long maxTime;
-
- FailoverUptoMaximumTimePolicy(long maxTime) {
- this.maxTime = maxTime;
- }
-
- @Override
- public RetryAction shouldRetry(Exception e, int retries, int failovers,
- boolean isIdempotentOrAtMostOnce) throws Exception {
- return System.currentTimeMillis() < maxTime
- ? RetryAction.FAILOVER_AND_RETRY
- : RetryAction.FAIL;
- }
- }
-
- /**
* Fetch retry policy from Configuration
*/
@Private
Modified:
hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/api/ServerRMProxy.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/api/ServerRMProxy.java?rev=1555971&r1=1555970&r2=1555971&view=diff
==============================================================================
---
hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/api/ServerRMProxy.java
(original)
+++
hadoop/common/branches/branch-2/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/api/ServerRMProxy.java
Mon Jan 6 18:43:09 2014
@@ -32,10 +32,7 @@ import com.google.common.base.Preconditi
public class ServerRMProxy<T> extends RMProxy<T> {
private static final Log LOG = LogFactory.getLog(ServerRMProxy.class);
-
- static {
- INSTANCE = new ServerRMProxy();
- }
+ private static final ServerRMProxy INSTANCE = new ServerRMProxy();
private ServerRMProxy() {
super();
@@ -51,10 +48,8 @@ public class ServerRMProxy<T> extends RM
*/
public static <T> T createRMProxy(final Configuration configuration,
final Class<T> protocol) throws IOException {
- // This method exists only to initiate this class' static INSTANCE. TODO:
- // FIX if possible
- return RMProxy.createRMProxy(configuration, protocol);
- }
+ return createRMProxy(configuration, protocol, INSTANCE);
+}
@InterfaceAudience.Private
@Override