[
https://issues.apache.org/jira/browse/HBASE-29117?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17926496#comment-17926496
]
Andrew Kyle Purtell edited comment on HBASE-29117 at 2/12/25 5:22 PM:
----------------------------------------------------------------------
We managed Hadoop to 3.3.6 and Kerby to 2.0.3 in our internal fork and did this:
{noformat}
---
a/hbase-common/src/test/java/org/apache/hadoop/hbase/util/SimpleKdcServerUtil.java
+++
b/hbase-common/src/test/java/org/apache/hadoop/hbase/util/SimpleKdcServerUtil.java
@@ -85,7 +85,8 @@ public final class SimpleKdcServerUtil {
if (kdc != null) {
kdc.stop();
}
- if (ke.getCause() != null && ke.getCause() instanceof BindException) {
+ if ((ke.getCause() != null && ke.getCause() instanceof BindException)
||
+ ke.getMessage().contains("Address already in use")) {
LOG.info("Clashed using port {}; getting a new random port",
kdcPort);
continue;
} else {
{noformat}
Instead of doing this, which won't survive localization, I can see that now, we
could simply retry unconditionally. It's ugly but it would work and
downstreamers who use our testing utilities won't see this wart.
We also seemed to need this:
{noformat}
diff --git
a/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestSimpleKdcServerUtil.java
b/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestSimpleKdcServerUtil.java
index e8f227576ec..e3a8607b0fd 100644
---
a/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestSimpleKdcServerUtil.java
+++
b/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestSimpleKdcServerUtil.java
@@ -48,7 +48,9 @@ public class TestSimpleKdcServerUtil {
HBaseCommonTestingUtility::randomFreePort, true);
kdc.createPrincipal("wah");
} finally {
- kdc.stop();
+ if (kdc != null) {
+ kdc.stop();
+ }
}
}
}
{noformat}
We can also try to remove the explicit dependency, assuming everyone is going
to be using a recent Hadoop and Kerby 1 vs 2 issues are a thing of the past.
was (Author: apurtell):
We managed Hadoop to 3.3.6 and Kerby to 2.0.3 in our internal fork and did this:
{noformat}
---
a/hbase-common/src/test/java/org/apache/hadoop/hbase/util/SimpleKdcServerUtil.java
+++
b/hbase-common/src/test/java/org/apache/hadoop/hbase/util/SimpleKdcServerUtil.java
@@ -85,7 +85,8 @@ public final class SimpleKdcServerUtil {
if (kdc != null) {
kdc.stop();
}
- if (ke.getCause() != null && ke.getCause() instanceof BindException) {
+ if ((ke.getCause() != null && ke.getCause() instanceof BindException)
||
+ ke.getMessage().contains("Address already in use")) {
LOG.info("Clashed using port {}; getting a new random port",
kdcPort);
continue;
} else {
{noformat}
It's ugly but it works and downstreamers who use our testing utilities won't
see this wart.
We also seemed to need this:
{noformat}
diff --git
a/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestSimpleKdcServerUtil.java
b/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestSimpleKdcServerUtil.java
index e8f227576ec..e3a8607b0fd 100644
---
a/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestSimpleKdcServerUtil.java
+++
b/hbase-common/src/test/java/org/apache/hadoop/hbase/util/TestSimpleKdcServerUtil.java
@@ -48,7 +48,9 @@ public class TestSimpleKdcServerUtil {
HBaseCommonTestingUtility::randomFreePort, true);
kdc.createPrincipal("wah");
} finally {
- kdc.stop();
+ if (kdc != null) {
+ kdc.stop();
+ }
}
}
}
{noformat}
We can also try to remove the explicit dependency, assuming everyone is going
to be using a recent Hadoop and Kerby 1 vs 2 issues are a thing of the past.
> Kerby version conflict with Hadoop 3.4
> --------------------------------------
>
> Key: HBASE-29117
> URL: https://issues.apache.org/jira/browse/HBASE-29117
> Project: HBase
> Issue Type: Bug
> Components: dependencies
> Reporter: Istvan Toth
> Assignee: Istvan Toth
> Priority: Major
> Labels: pull-request-available
>
> HBase dependencyManages some kerby artifacts to 1.0.1.
> However, Hadoop 3.4 uses Kerby 2.0.3.
> This causes org.apache.phoenix.jdbc.SecureUserConnectionsIT in Phoenix to
> fail with
> {noformat}
> [ERROR] org.apache.phoenix.jdbc.SecureUserConnectionsIT -- Time elapsed:
> 0.003 s <<< ERROR!
> java.lang.NoClassDefFoundError:
> org/apache/kerby/kerberos/kerb/request/KrbIdentity
> at
> org.apache.kerby.kerberos.kerb.admin.kadmin.local.AdminHelper.createIdentity(AdminHelper.java:262)
> at
> org.apache.kerby.kerberos.kerb.admin.kadmin.local.LocalKadminImpl.addPrincipal(LocalKadminImpl.java:185)
> at
> org.apache.kerby.kerberos.kerb.admin.kadmin.local.LocalKadminImpl.addPrincipal(LocalKadminImpl.java:178)
> at
> org.apache.kerby.kerberos.kerb.admin.kadmin.local.LocalKadminImpl.createBuiltinPrincipals(LocalKadminImpl.java:137)
> at
> org.apache.kerby.kerberos.kerb.server.SimpleKdcServer.init(SimpleKdcServer.java:159)
> at org.apache.hadoop.minikdc.MiniKdc.start(MiniKdc.java:282)
> at
> org.apache.phoenix.jdbc.SecureUserConnectionsIT.setupKdc(SecureUserConnectionsIT.java:86)
> at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.base/java.lang.reflect.Method.invoke(Method.java:566)
> at
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
> at
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
> at
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
> at
> org.junit.internal.runners.statements.RunBefores.invokeMethod(RunBefores.java:33)
> at
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
> at
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
> at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
> at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
> at org.junit.runners.Suite.runChild(Suite.java:128)
> at org.junit.runners.Suite.runChild(Suite.java:27)
> at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
> at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
> at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
> at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
> at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
> at
> org.apache.maven.surefire.junitcore.JUnitCore.run(JUnitCore.java:49)
> at
> org.apache.maven.surefire.junitcore.JUnitCoreWrapper.createRequestAndRun(JUnitCoreWrapper.java:120)
> at
> org.apache.maven.surefire.junitcore.JUnitCoreWrapper.executeEager(JUnitCoreWrapper.java:95)
> at
> org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:75)
> at
> org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:69)
> at
> org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:146)
> at
> org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385)
> at
> org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
> at
> org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507)
> at
> org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495)
> Caused by: java.lang.ClassNotFoundException:
> org.apache.kerby.kerberos.kerb.request.KrbIdentity
> at
> java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
> at
> java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
> at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527)
> ... 38 more
> {noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)