-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/64853/
-----------------------------------------------------------

Review request for Ambari, Attila Magyar, Balázs Bence Sári, Eugene Chekanskiy, 
Jonathan Hurley, Nate Cole, Robert Nettleton, and Sandor Molnar.


Bugs: AMBARI-22693
    https://issues.apache.org/jira/browse/AMBARI-22693


Repository: ambari


Description
-------

UpgradeUserKerberosDescriptor is not executed during stack upgrade due to 
missing target stack data.

*Steps to reproduce*
# Deploy cluster with Ambari version 2.6.0 and HDP version 2.4
** Storm should be installed to guarantee an error
# Do Express upgrade to HDP version 2.6
# Regenerate Keytabs.

Upon restarting Storm the following error is encountered
```
Exception in thread "main" java.lang.ExceptionInInitializerError
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at clojure.lang.RT.classForName(RT.java:2154)
        at clojure.lang.RT.classForName(RT.java:2163)
        at clojure.lang.RT.loadClassForName(RT.java:2182)
        at clojure.lang.RT.load(RT.java:436)
        at clojure.lang.RT.load(RT.java:412)
        at clojure.core$load$fn__5448.invoke(core.clj:5866)
        at clojure.core$load.doInvoke(core.clj:5865)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invoke(core.clj:5671)
        at clojure.core$load_lib$fn__5397.invoke(core.clj:5711)
        at clojure.core$load_lib.doInvoke(core.clj:5710)
        at clojure.lang.RestFn.applyTo(RestFn.java:142)
        at clojure.core$apply.invoke(core.clj:632)
        at clojure.core$load_libs.doInvoke(core.clj:5749)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invoke(core.clj:632)
        at clojure.core$require.doInvoke(core.clj:5832)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at 
org.apache.storm.daemon.nimbus$loading__5340__auto____982.invoke(nimbus.clj:16)
        at org.apache.storm.daemon.nimbus__init.load(Unknown Source)
        at org.apache.storm.daemon.nimbus__init.<clinit>(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at clojure.lang.RT.classForName(RT.java:2154)
        at clojure.lang.RT.classForName(RT.java:2163)
        at clojure.lang.RT.loadClassForName(RT.java:2182)
        at clojure.lang.RT.load(RT.java:436)
        at clojure.lang.RT.load(RT.java:412)
        at clojure.core$load$fn__5448.invoke(core.clj:5866)
        at clojure.core$load.doInvoke(core.clj:5865)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.lang.Var.invoke(Var.java:379)
        at org.apache.storm.daemon.nimbus.<clinit>(Unknown Source)
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: 
backtype.storm.security.auth.KerberosPrincipalToLocal
        at 
org.apache.storm.security.auth.AuthUtils.GetPrincipalToLocalPlugin(AuthUtils.java:125)
        at 
org.apache.storm.security.auth.authorizer.ImpersonationAuthorizer.prepare(ImpersonationAuthorizer.java:54)
        at 
org.apache.storm.daemon.common$mk_authorization_handler.invoke(common.clj:417)
        at org.apache.storm.ui.core__init.load(Unknown Source)
        at org.apache.storm.ui.core__init.<clinit>(Unknown Source)
        ... 35 more
Caused by: java.lang.ClassNotFoundException: 
backtype.storm.security.auth.KerberosPrincipalToLocal
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:264)
        at 
org.apache.storm.security.auth.AuthUtils.GetPrincipalToLocalPlugin(AuthUtils.java:121)
        ... 39 more
```

#Cause
In the following code snip, {{targetStackID}} is {null}}:
*`org/apache/ambari/server/serveraction/upgrades/UpgradeUserKerberosDescriptor.java:103`*:
```
        StackId targetStackId = 
getStackIdFromCommandParams(KeyNames.TARGET_STACK);
```
This causes the logic in `UpgradeUserKerberosDescriptor` to be skipped.  

#Solution
Change the code snip from above to 
*`org/apache/ambari/server/serveraction/upgrades/UpgradeUserKerberosDescriptor.java:103`*
```
        StackId targetStackId = cluster.getDesiredStackVersion();
```

NOTE: This has already been fixed in the trunk (Ambari 3.0.0).


Diffs
-----

  
ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
 ffe2ed63d1 
  
ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/UpgradeUserKerberosDescriptor.java
 a8c254a3eb 
  
ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeUserKerberosDescriptorTest.java
 69d82b2ab4 


Diff: https://reviews.apache.org/r/64853/diff/1/


Testing
-------

Manually tested upgrade and downgrade

# Local test results: 
```
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 27:31 min
[INFO] Finished at: 2017-12-27T10:34:51-05:00
[INFO] Final Memory: 71M/907M
[INFO] ------------------------------------------------------------------------
```

# Jenkins test results: PENDING


Thanks,

Robert Levas

Reply via email to