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"));
+  }
 }

Reply via email to