This is an automated email from the ASF dual-hosted git repository.
deniskuzZ pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new e8299d26d3d HIVE-29635: HS2 WebUI "Start Time" shows current time on
every refresh (#6513)
e8299d26d3d is described below
commit e8299d26d3d02155f8369d505cdcf22490d8857f
Author: magnuma3 <[email protected]>
AuthorDate: Tue Jun 9 04:04:51 2026 +0900
HIVE-29635: HS2 WebUI "Start Time" shows current time on every refresh
(#6513)
---
.../apache/hive/service/server/HiveServer2.java | 5 ++--
.../hive/service/server/TestHiveServer2.java | 30 ++++++++++++++++++++++
2 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/service/src/java/org/apache/hive/service/server/HiveServer2.java
b/service/src/java/org/apache/hive/service/server/HiveServer2.java
index 5f7f071d765..efa87714265 100644
--- a/service/src/java/org/apache/hive/service/server/HiveServer2.java
+++ b/service/src/java/org/apache/hive/service/server/HiveServer2.java
@@ -465,9 +465,11 @@ private void addHAContextAttributes(HttpServer.Builder
builder, HiveConf hiveCon
builder.setContextAttribute("hs2.failover.callback", new
FailoverHandlerCallback(hs2HARegistry));
}
- private static HttpServer.Builder createHttpServerBuilder(String webHost,
int port, String name, String contextPath,
+ @VisibleForTesting
+ static HttpServer.Builder createHttpServerBuilder(String webHost, int port,
String name, String contextPath,
HiveConf hiveConf, CLIService cliService, PamAuthenticator
pamAuthenticator) throws IOException {
HttpServer.Builder builder = new HttpServer.Builder(name);
+ hiveConf.set("startcode", String.valueOf(System.currentTimeMillis()));
builder.setConf(hiveConf);
builder.setHost(webHost);
builder.setPort(port);
@@ -476,7 +478,6 @@ private static HttpServer.Builder
createHttpServerBuilder(String webHost, int po
builder.setAdmins(hiveConf.getVar(ConfVars.USERS_IN_ADMIN_ROLE));
// SessionManager is initialized
builder.setContextAttribute("hive.sm", cliService.getSessionManager());
- hiveConf.set("startcode", String.valueOf(System.currentTimeMillis()));
if (hiveConf.getBoolVar(ConfVars.HIVE_SERVER2_WEBUI_USE_SSL)) {
String keyStorePath =
hiveConf.getVar(ConfVars.HIVE_SERVER2_WEBUI_SSL_KEYSTORE_PATH);
if (StringUtils.isBlank(keyStorePath)) {
diff --git
a/service/src/test/org/apache/hive/service/server/TestHiveServer2.java
b/service/src/test/org/apache/hive/service/server/TestHiveServer2.java
index 42dbdb88795..b7d1a332a10 100644
--- a/service/src/test/org/apache/hive/service/server/TestHiveServer2.java
+++ b/service/src/test/org/apache/hive/service/server/TestHiveServer2.java
@@ -21,9 +21,19 @@
import org.apache.hadoop.hive.conf.Constants;
import org.apache.hadoop.hive.conf.HiveConf;
import org.apache.hadoop.hive.metastore.conf.MetastoreConf;
+import org.apache.hive.http.HttpServer;
+import org.apache.hive.service.cli.CLIService;
+import org.apache.hive.service.cli.session.SessionManager;
import org.junit.Test;
+
+import java.lang.reflect.Field;
import java.util.Map;
+
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
public class TestHiveServer2 {
@@ -98,4 +108,24 @@ public void
testMaybeStartCompactorThreadsMultipleCustomPoolsAndDefaultPool() {
assertEquals(Integer.valueOf(5), startedWorkers.get("pool3"));
assertEquals(Integer.valueOf(3),
startedWorkers.get(Constants.COMPACTION_DEFAULT_POOL));
}
+
+ @Test
+ public void testCreateHttpServerBuilderStampsStartcodeBeforeConfIsCopied()
throws Exception {
+ HiveConf conf = new HiveConf();
+
+ CLIService cli = mock(CLIService.class);
+ SessionManager sessionManager = mock(SessionManager.class);
+ when(cli.getSessionManager()).thenReturn(sessionManager);
+
+ HttpServer.Builder builder = HiveServer2.createHttpServerBuilder(
+ "localhost", 0, "test", "/", conf, cli, null);
+
+ // setConf stores a *copy* of the conf on the Builder. Read that copy back
via
+ // reflection — that's the same instance the servlet context exposes to
the JSP.
+ Field confField = HttpServer.Builder.class.getDeclaredField("conf");
+ confField.setAccessible(true);
+ HiveConf builderConf = (HiveConf) confField.get(builder);
+ assertNotNull("Builder.conf must be set after createHttpServerBuilder",
builderConf);
+ assertNotNull("startcode must be exists", builderConf.get("startcode"));
+ }
}