Repository: incubator-slider
Updated Branches:
  refs/heads/develop 2f63856e7 -> 88e6d66c5


SLIDER-1153 Code issues - 14 null pointer deferences found


Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/88e6d66c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/88e6d66c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/88e6d66c

Branch: refs/heads/develop
Commit: 88e6d66c56556c7f6199f4a3e4029c95bffd506a
Parents: 2f63856
Author: Gour Saha <gourks...@apache.org>
Authored: Thu Jul 14 23:01:58 2016 -0700
Committer: Gour Saha <gourks...@apache.org>
Committed: Thu Jul 14 23:01:58 2016 -0700

----------------------------------------------------------------------
 .../org/apache/slider/client/SliderClient.java  |  33 +--
 .../apache/slider/common/tools/SliderUtils.java |   8 +-
 .../launch/SerializedApplicationReport.java     |   4 +-
 .../appmaster/actions/RenewingAction.java       |   3 -
 .../slider/server/appmaster/state/AppState.java |   7 +-
 .../security/FsDelegationTokenManager.java      | 280 -------------------
 .../TestFsDelegationTokenManager.groovy         | 246 ----------------
 7 files changed, 33 insertions(+), 548 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/88e6d66c/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/client/SliderClient.java 
b/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
index 7ef3168..60c670b 100644
--- a/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
+++ b/slider-core/src/main/java/org/apache/slider/client/SliderClient.java
@@ -3679,23 +3679,24 @@ public class SliderClient extends 
AbstractSliderLaunchedService implements RunSe
       if (imagePath == null) {
         ApplicationReport appReport = findInstance(clusterName);
         Path path1 = sliderFileSystem.getTempPathForCluster(clusterName);
-        
-        Path subPath = new Path(path1, appReport.getApplicationId().toString()
-            + "/agent");
-        imagePath = subPath.toString();
-      }
-      String pathStr = imagePath + "/" + AGENT_TAR;
-      try {
-        validateHDFSFile(sliderFileSystem, pathStr);
-        log.info("Slider agent package is properly installed");
-      } catch (FileNotFoundException e) {
-        log.error("can not find agent package: {}", pathStr);
-        log.debug("can not find agent package: {}", pathStr, e);
-        return;
-      } catch (IOException e) {
-        log.error("can not open agent package: {}", pathStr, e);
-        return;
+        if (appReport != null) {
+          Path subPath = new Path(path1, appReport.getApplicationId()
+              .toString() + "/agent");
+          imagePath = subPath.toString();
+          String pathStr = imagePath + "/" + AGENT_TAR;
+          try {
+            validateHDFSFile(sliderFileSystem, pathStr);
+            log.info("Slider agent package is properly installed at " + 
pathStr);
+          } catch (FileNotFoundException e) {
+            log.error("can not find agent package: {}", pathStr, e);
+            return;
+          } catch (IOException e) {
+            log.error("can not open agent package: {}", pathStr, e);
+            return;
+          }
+        }
       }
+
       String pkgTarballPath = getApplicationDefinitionPath(instanceDefinition
               .getAppConfOperations());
       try {

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/88e6d66c/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java 
b/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
index 746e468..ef62745 100644
--- a/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
+++ b/slider-core/src/main/java/org/apache/slider/common/tools/SliderUtils.java
@@ -1032,6 +1032,9 @@ public final class SliderUtils {
    * something other than 0.0.0.0
    */
   public static boolean isAddressDefined(InetSocketAddress address) {
+    if (address == null || address.getHostString() == null) {
+      return false;
+    }
     return !(address.getHostString().equals("0.0.0.0"));
   }
 
@@ -1433,8 +1436,11 @@ public final class SliderUtils {
     if (dir == null) {
       return "";
     }
-    StringBuilder builder = new StringBuilder();
     String[] confDirEntries = dir.list();
+    if (confDirEntries == null) {
+      return "";
+    }
+    StringBuilder builder = new StringBuilder();
     for (String entry : confDirEntries) {
       builder.append(entry).append("\n");
     }

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/88e6d66c/slider-core/src/main/java/org/apache/slider/core/launch/SerializedApplicationReport.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/core/launch/SerializedApplicationReport.java
 
b/slider-core/src/main/java/org/apache/slider/core/launch/SerializedApplicationReport.java
index 377c87a..8e0ef5a 100644
--- 
a/slider-core/src/main/java/org/apache/slider/core/launch/SerializedApplicationReport.java
+++ 
b/slider-core/src/main/java/org/apache/slider/core/launch/SerializedApplicationReport.java
@@ -18,6 +18,7 @@
 
 package org.apache.slider.core.launch;
 
+import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
 import org.apache.hadoop.yarn.api.records.ApplicationReport;
 import org.apache.hadoop.yarn.api.records.FinalApplicationStatus;
 import org.apache.slider.core.persist.ApplicationReportSerDeser;
@@ -67,7 +68,8 @@ public class SerializedApplicationReport {
   
   public SerializedApplicationReport(ApplicationReport report) {
     this.applicationId = report.getApplicationId().toString();
-    this.applicationAttemptId = 
report.getCurrentApplicationAttemptId().toString();
+    ApplicationAttemptId attemptId = report.getCurrentApplicationAttemptId();
+    this.applicationAttemptId = attemptId != null ? attemptId.toString() : 
"N/A";
     this.name = report.getName();
     this.applicationType = report.getApplicationType();
     this.user = report.getUser();

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/88e6d66c/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/RenewingAction.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/RenewingAction.java
 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/RenewingAction.java
index 1164df9..f3143ea 100644
--- 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/RenewingAction.java
+++ 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/actions/RenewingAction.java
@@ -61,9 +61,6 @@ public class RenewingAction<A extends AsyncAction> extends 
AsyncAction {
       TimeUnit timeUnit,
       int limit) {
     super("renewing " + action.name, initialDelay, timeUnit, 
action.getAttrs());
-    // slightly superfluous as the super init above checks these 
values...retained
-    // in case that code is ever changed
-    Preconditions.checkArgument(action != null, "null actions");
     Preconditions.checkArgument(interval > 0, "invalid interval: " + interval);
     this.action = action;
     this.interval = interval;

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/88e6d66c/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
index 3213d93..7ff2b4c 100644
--- 
a/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
+++ 
b/slider-core/src/main/java/org/apache/slider/server/appmaster/state/AppState.java
@@ -1287,7 +1287,12 @@ public class AppState {
       return createAAContainerRequest(role);
     } else {
       incrementRequestCount(role);
-      return roleHistory.requestContainerForRole(role).getIssuedRequest();
+      OutstandingRequest request = roleHistory.requestContainerForRole(role);
+      if (request != null) {
+        return request.getIssuedRequest();
+      } else {
+        return null;
+      }
     }
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/88e6d66c/slider-core/src/main/java/org/apache/slider/server/services/security/FsDelegationTokenManager.java
----------------------------------------------------------------------
diff --git 
a/slider-core/src/main/java/org/apache/slider/server/services/security/FsDelegationTokenManager.java
 
b/slider-core/src/main/java/org/apache/slider/server/services/security/FsDelegationTokenManager.java
deleted file mode 100644
index 617fe3c..0000000
--- 
a/slider-core/src/main/java/org/apache/slider/server/services/security/FsDelegationTokenManager.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.slider.server.services.security;
-
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.CommonConfigurationKeysPublic;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.io.Text;
-import org.apache.hadoop.security.SecurityUtil;
-import org.apache.hadoop.security.UserGroupInformation;
-import org.apache.hadoop.security.token.Token;
-import org.apache.hadoop.util.Time;
-import org.apache.slider.common.SliderXmlConfKeys;
-import org.apache.slider.common.tools.SliderUtils;
-import org.apache.slider.core.launch.CredentialUtils;
-import org.apache.slider.server.appmaster.SliderAppMaster;
-import org.apache.slider.server.appmaster.actions.AsyncAction;
-import org.apache.slider.server.appmaster.actions.QueueAccess;
-import org.apache.slider.server.appmaster.actions.RenewingAction;
-import org.apache.slider.server.appmaster.state.AppState;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.security.PrivilegedExceptionAction;
-import java.text.DateFormat;
-import java.util.Date;
-import java.util.UUID;
-import java.util.concurrent.TimeUnit;
-
-/**
- *
- */
-public class FsDelegationTokenManager {
-  private final QueueAccess queue;
-  private RenewingAction<RenewAction> renewingAction;
-  private UserGroupInformation remoteUser;
-  private UserGroupInformation currentUser;
-  private static final Logger
-      log = LoggerFactory.getLogger(FsDelegationTokenManager.class);
-  private long renewInterval;
-  private RenewAction renewAction;
-  private String tokenName;
-
-  public FsDelegationTokenManager(QueueAccess queue) throws IOException {
-    this.queue = queue;
-    this.currentUser = UserGroupInformation.getCurrentUser();
-  }
-
-  private void createRemoteUser(Configuration configuration) throws 
IOException {
-    Configuration loginConfig = new Configuration(configuration);
-    
loginConfig.set(CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION,
-                    "kerberos");
-    // using HDFS principal...
-    this.remoteUser = UserGroupInformation
-        .loginUserFromKeytabAndReturnUGI(
-            SecurityUtil.getServerPrincipal(
-                
loginConfig.get(SliderXmlConfKeys.DFS_NAMENODE_KERBEROS_PRINCIPAL_KEY),
-                InetAddress.getLocalHost().getCanonicalHostName()),
-            loginConfig.get(SliderXmlConfKeys.DFS_NAMENODE_KEYTAB_FILE_KEY));
-    log.info("Created remote user {}.  UGI reports current user is {}",
-             this.remoteUser, UserGroupInformation.getCurrentUser());
-  }
-
-  public void acquireDelegationToken(Configuration configuration)
-      throws IOException, InterruptedException {
-    if (remoteUser == null) {
-      createRemoteUser(configuration);
-    }
-    if (SliderUtils.isHadoopClusterSecure(configuration) &&
-        renewingAction == null) {
-      renewInterval = configuration.getLong(
-          SliderXmlConfKeys.DFS_NAMENODE_DELEGATION_TOKEN_RENEW_INTERVAL_KEY,
-          
SliderXmlConfKeys.DFS_NAMENODE_DELEGATION_TOKEN_RENEW_INTERVAL_DEFAULT);
-      // constructor of action will retrieve initial token.  One may already be
-      // associated with user, but its lifecycle/management is not clear so 
let's
-      // create and manage a token explicitly
-      renewAction = new RenewAction("HDFS renew",
-                                           configuration);
-      // set retrieved token as the user associated delegation token and
-      // start a renewing action to renew
-      Token<?> token = renewAction.getToken();
-      currentUser.addToken(token.getService(), token);
-      log.info("HDFS delegation token {} acquired and set as credential for 
current user", token);
-      renewingAction = new RenewingAction<RenewAction>(renewAction,
-                                          (int) renewInterval,
-                                          (int) renewInterval,
-                                          TimeUnit.MILLISECONDS,
-                                          getRenewingLimit());
-      log.info("queuing HDFS delegation token renewal interval of {} 
milliseconds",
-               renewInterval);
-      queue(renewingAction);
-    }
-  }
-
-  public void cancelDelegationToken(Configuration configuration)
-      throws IOException, InterruptedException {
-    queue.removeRenewingAction(getRenewingActionName());
-    if (renewAction != null) {
-      renewAction.getToken().cancel(configuration);
-    }
-    log.info("Renewing action {} removed and delegation token renewal "
-             + "cancelled", getRenewingActionName());
-  }
-
-  protected int getRenewingLimit() {
-    return 0;
-  }
-
-  protected void queue(RenewingAction<RenewAction> action) {
-    queue.renewing(getRenewingActionName(),
-                   action);
-  }
-
-  protected String getRenewingActionName() {
-    if (tokenName == null) {
-      tokenName = "HDFS renewing token " + UUID.randomUUID();
-    }
-    return tokenName;
-  }
-
-  class RenewAction extends AsyncAction {
-    Configuration configuration;
-    Token<?> token;
-    private long tokenExpiryTime;
-    private final FileSystem fs;
-
-    RenewAction(String name,
-                Configuration configuration)
-        throws IOException, InterruptedException {
-      super(name);
-      this.configuration = configuration;
-      fs = getFileSystem();
-      // get initial token by creating a kerberos authenticated user and
-      // invoking token methods as that user
-      synchronized (fs) {
-        this.token = remoteUser.doAs(new PrivilegedExceptionAction<Token<?>>() 
{
-          @Override
-          public Token<?> run() throws Exception {
-            log.info("Obtaining HDFS delgation token with user {}",
-                     remoteUser.getShortUserName());
-            Token token = fs.getDelegationToken(
-                remoteUser.getShortUserName());
-            tokenExpiryTime = CredentialUtils.getTokenExpiryTime(token);
-            log.info("Initial delegation token obtained with expiry time of 
{}",
-                getPrintableExpirationTime(tokenExpiryTime));
-            return token;
-          }
-        });
-      }
-      log.info("Initial request returned delegation token {}", token);
-    }
-
-    protected FileSystem getFileSystem()
-        throws IOException, InterruptedException {
-      // return non-cache FS reference
-      return remoteUser.doAs(new PrivilegedExceptionAction<FileSystem>() {
-        @Override
-        public FileSystem run() throws Exception {
-          Configuration config = new Configuration(configuration);
-          config.setBoolean("fs.hdfs.impl.disable.cache", true);
-          return getRemoteFileSystemForRenewal(config);
-        }
-      });
-    }
-
-    @Override
-    public void execute(SliderAppMaster appMaster, QueueAccess queueService,
-                        AppState appState)
-        throws Exception {
-      if (fs != null) {
-        synchronized(fs) {
-          try {
-            long expires = remoteUser.doAs(new 
PrivilegedExceptionAction<Long>() {
-              @Override
-              public Long run() throws Exception {
-                long expires = token.renew(fs.getConf());
-                log.info("HDFS delegation token renewed.  Renewal cycle ends 
at {}",
-                         getPrintableExpirationTime(expires));
-                return expires;
-              }
-            });
-            long calculatedInterval = tokenExpiryTime - Time.now();
-            if ( calculatedInterval < renewInterval ) {
-              // time to get a new token since the token will expire before
-              // next renewal interval.  Could modify this to be closer to 
expiry
-              // time if deemed necessary....
-              log.info("Interval of {} less than renew interval.  Getting new 
token",
-                       calculatedInterval);
-              getNewToken();
-            } else {
-              updateRenewalTime(renewInterval);
-            }
-          } catch (IOException ie) {
-            // token has expired.  get a new one...
-            log.info("Exception raised by renew", ie);
-            getNewToken();
-          }
-        }
-      }
-    }
-
-    private String getPrintableExpirationTime(long expires) {
-      Date d = new Date(expires);
-      return DateFormat.getDateTimeInstance().format(d);
-    }
-
-    private void getNewToken()
-        throws InterruptedException, IOException {
-      try {
-        Text service = token.getService();
-        Token<?>[] tokens = remoteUser.doAs(new 
PrivilegedExceptionAction<Token<?>[]>() {
-            @Override
-            public Token<?>[] run() throws Exception {
-              return fs.addDelegationTokens(remoteUser.getShortUserName(), 
null);
-            }
-        });
-        if (tokens.length == 0) {
-          throw new IOException("addDelegationTokens returned no tokens");
-        }
-        token = findMatchingToken(service, tokens);
-        currentUser.addToken(token.getService(), token);
-
-        tokenExpiryTime = CredentialUtils.getTokenExpiryTime(token);
-
-        log.info("Expired HDFS delegation token replaced and added as 
credential"
-                 + " to current user.  Token expires at {}",
-                 getPrintableExpirationTime(tokenExpiryTime));
-        updateRenewalTime(renewInterval);
-      } catch (IOException ie2) {
-        throw new IOException("Can't get new delegation token ", ie2);
-      }
-    }
-
-    private void updateRenewalTime(long interval) {
-      long delay = interval - interval/10;
-      renewingAction.updateInterval(delay, TimeUnit.MILLISECONDS);
-      log.info("Token renewal set for {} ms from now", delay);
-    }
-
-    private Token<?> findMatchingToken(Text service, Token<?>[] tokens) {
-      Token<?> token = null;
-      int i = 0;
-      while (token == null && i < tokens.length) {
-        if (tokens[i].getService().equals(service)) {
-          token = tokens[i];
-        }
-        i++;
-      }
-
-      return token;
-    }
-
-    Token<?> getToken() {
-      synchronized (fs) {
-        return token;
-      }
-    }
-  }
-
-  protected FileSystem getRemoteFileSystemForRenewal(Configuration config)
-      throws IOException {
-    return FileSystem.get(config);
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/88e6d66c/slider-core/src/test/groovy/org/apache/slider/server/services/security/TestFsDelegationTokenManager.groovy
----------------------------------------------------------------------
diff --git 
a/slider-core/src/test/groovy/org/apache/slider/server/services/security/TestFsDelegationTokenManager.groovy
 
b/slider-core/src/test/groovy/org/apache/slider/server/services/security/TestFsDelegationTokenManager.groovy
deleted file mode 100644
index d82a79c..0000000
--- 
a/slider-core/src/test/groovy/org/apache/slider/server/services/security/TestFsDelegationTokenManager.groovy
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.slider.server.services.security
-
-import groovy.util.logging.Slf4j
-import org.apache.hadoop.conf.Configuration
-import org.apache.hadoop.fs.CommonConfigurationKeysPublic
-import org.apache.hadoop.fs.FileSystem as HadoopFS
-import org.apache.hadoop.fs.RawLocalFileSystem
-import 
org.apache.hadoop.hdfs.security.token.delegation.DelegationTokenIdentifier
-import org.apache.hadoop.io.Text
-import org.apache.hadoop.security.Credentials
-import org.apache.hadoop.security.UserGroupInformation
-import org.apache.hadoop.security.token.SecretManager
-import org.apache.hadoop.security.token.Token
-import 
org.apache.hadoop.security.token.delegation.AbstractDelegationTokenSecretManager
-import org.apache.hadoop.service.ServiceOperations
-import org.apache.hadoop.util.Time
-import org.apache.slider.common.SliderXmlConfKeys
-import org.apache.slider.common.tools.CoreFileSystem
-import org.apache.slider.server.appmaster.actions.ActionStopQueue
-import org.apache.slider.server.appmaster.actions.QueueExecutor
-import org.apache.slider.server.appmaster.actions.QueueService
-import org.junit.After
-import org.junit.Before
-import org.junit.Test
-
-import java.util.concurrent.TimeUnit
-import java.util.concurrent.atomic.AtomicBoolean
-import java.util.concurrent.atomic.AtomicLong
-
-@Slf4j
-//@CompileStatic
-class TestFsDelegationTokenManager {
-
-  QueueService queues;
-  FsDelegationTokenManager tokenManager;
-  Configuration conf;
-  UserGroupInformation currentUser;
-
-
-  @Before
-  void setup() {
-    queues = new QueueService();
-
-    conf = new Configuration()
-    conf.set(
-        CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION,
-            "TOKEN")
-    conf.setLong(
-            SliderXmlConfKeys.DFS_NAMENODE_DELEGATION_TOKEN_RENEW_INTERVAL_KEY,
-            1000)
-    queues.init(conf)
-    queues.start();
-
-    HadoopFS fs = new TestFileSystem()
-
-    CoreFileSystem coreFileSystem = new CoreFileSystem(fs, conf)
-
-    String[] groups = new String[1];
-    groups[0] = 'testGroup1'
-
-    currentUser = UserGroupInformation.createUserForTesting("test", groups)
-    UserGroupInformation.setLoginUser(currentUser)
-
-    tokenManager = new FsDelegationTokenManager(queues) {
-        @Override
-        protected int getRenewingLimit() {
-            return 5
-        }
-
-        @Override
-        protected org.apache.hadoop.fs.FileSystem 
getRemoteFileSystemForRenewal(Configuration config) throws IOException {
-            return new TestFileSystem();
-        }
-
-        @Override
-        protected String getRenewingActionName() {
-            return "TEST RENEW"
-        }
-    }
-
-  }
-
-  public static class DummySecretManager extends
-          AbstractDelegationTokenSecretManager<DelegationTokenIdentifier> {
-
-    public DummySecretManager(long delegationKeyUpdateInterval,
-                              long delegationTokenMaxLifetime, long 
delegationTokenRenewInterval,
-                              long delegationTokenRemoverScanInterval) {
-      super(delegationKeyUpdateInterval, delegationTokenMaxLifetime,
-            delegationTokenRenewInterval, delegationTokenRemoverScanInterval);
-    }
-
-    @Override
-    public DelegationTokenIdentifier createIdentifier() {
-      return null;
-    }
-
-    @Override
-    public byte[] createPassword(DelegationTokenIdentifier dtId) {
-      return new byte[1];
-    }
-  }
-
-  public class TestFileSystem extends RawLocalFileSystem {
-      int sequenceNum = 0;
-      SecretManager<DelegationTokenIdentifier> mgr =
-          new DummySecretManager(0, 0, 0, 0);
-      @Override
-      Token<DelegationTokenIdentifier> getDelegationToken(String renewer) 
throws IOException {
-        return new TestToken(getIdentifier(), mgr);
-      }
-
-      @Override
-      Token<?>[] addDelegationTokens(String renewer, Credentials credentials) 
throws IOException {
-          Token[] tokens = new Token[1]
-          tokens[0] = new TestToken(getIdentifier(), mgr)
-          return tokens
-      }
-
-      private DelegationTokenIdentifier getIdentifier() {
-          def user = new Text(currentUser.getUserName())
-          def id = new DelegationTokenIdentifier(user, user, user)
-          id.setSequenceNumber(sequenceNum++)
-          id.setMaxDate(Time.now() + 10000)
-
-          return id
-      }
-  }
-
-  public class TestToken extends Token<DelegationTokenIdentifier> {
-      static long maxCount = 0;
-      private final AtomicLong renewCount = new AtomicLong()
-      private final AtomicLong totalCount = new AtomicLong()
-      public final AtomicBoolean expired = new AtomicBoolean(false);
-      public final AtomicBoolean cancelled = new AtomicBoolean(false);
-
-      TestToken(DelegationTokenIdentifier id, 
SecretManager<DelegationTokenIdentifier> mgr) {
-          super(id, mgr)
-      }
-
-      @Override
-      Text getService() {
-          return new Text("HDFS")
-      }
-
-      @Override
-      long renew(Configuration conf) throws IOException, InterruptedException {
-          totalCount.getAndIncrement();
-          if (maxCount > 0 && renewCount.getAndIncrement() > maxCount) {
-              renewCount.set(0L)
-              expired.set(true)
-              throw new IOException("Expired")
-          }
-
-
-          return Time.now() + 1000;
-      }
-
-      @Override
-      void cancel(Configuration conf) throws IOException, InterruptedException 
{
-        cancelled.set(true)
-      }
-  }
-
-  @After
-  void destroyService() {
-    ServiceOperations.stop(queues);
-  }
-
-  public void runQueuesToCompletion() {
-    new Thread(queues).start();
-    QueueExecutor ex = new QueueExecutor(queues)
-    ex.run();
-  }
-
-  public void runQueuesButNotToCompletion() {
-    new Thread(queues).start();
-    QueueExecutor ex = new QueueExecutor(queues)
-    new Thread(ex).start();
-    Thread.sleep(1000)
-    tokenManager.cancelDelegationToken(conf)
-  }
-
-  @Test
-  public void testRenew() throws Throwable {
-    tokenManager.acquireDelegationToken(conf)
-    def stop = new ActionStopQueue(10, TimeUnit.SECONDS)
-    queues.schedule(stop);
-    runQueuesToCompletion()
-
-    TestToken token = (TestToken) currentUser.getTokens()[0]
-    assert token.totalCount.get() > 4
-  }
-
-  @Test
-  public void testCancel() throws Throwable {
-    tokenManager.acquireDelegationToken(conf)
-    def stop = new ActionStopQueue(10, TimeUnit.SECONDS)
-    queues.schedule(stop);
-    runQueuesButNotToCompletion()
-
-    TestToken token = (TestToken) currentUser.getTokens()[0]
-    assert token.cancelled.get()
-    assert queues.lookupRenewingAction("TEST RENEW") == null
-  }
-
-
-    @Test
-  public void testRenewPastExpiry() throws Throwable {
-    try {
-      TestToken.maxCount = 3L
-      tokenManager.acquireDelegationToken(conf)
-      TestToken origToken = currentUser.getTokens()[0]
-      def stop = new ActionStopQueue(10, TimeUnit.SECONDS)
-      queues.schedule(stop);
-      runQueuesToCompletion()
-
-      TestToken token = (TestToken) currentUser.getTokens()[0]
-      assert token != null
-      assert token != origToken
-      assert origToken.getService().equals(token.getService())
-      assert origToken.totalCount.get() > 4
-      assert origToken.expired.get()
-    } finally {
-      TestToken.maxCount = 0
-    }
-  }
-}

Reply via email to