This is an automated email from the ASF dual-hosted git repository.

aho pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/master by this push:
     new a131ad23e87 Configurable brokerService for console queries (#19069)
a131ad23e87 is described below

commit a131ad23e87c4576a2666708f7358637d696a9e7
Author: aho135 <[email protected]>
AuthorDate: Wed Mar 4 17:52:30 2026 -0800

    Configurable brokerService for console queries (#19069)
    
    * Configurable brokerService for console queries
    
    * Add support to set brokerService for console queries via 
web-console-config
    
    * npm run prettify
    
    * Remove brokerService for queryDruidRune
    
    * Update from setConsoleBrokerService to setConsoleSystemQueryBrokerService
    
    * Address review comment
    
    * formatting
    
    * Remove special character
---
 .../server/router/TieredBrokerHostSelector.java    |  2 +-
 .../web-console-config/web-console-config.mock.tsx |  1 +
 .../web-console-config/web-console-config.tsx      | 14 +++++++++++++
 web-console/src/entry.tsx                          | 24 +++++++++++++++++++++-
 web-console/src/utils/druid-query.ts               | 20 +++++++++++++++++-
 5 files changed, 58 insertions(+), 3 deletions(-)

diff --git 
a/services/src/main/java/org/apache/druid/server/router/TieredBrokerHostSelector.java
 
b/services/src/main/java/org/apache/druid/server/router/TieredBrokerHostSelector.java
index e1732b44fb2..6a20f3bb418 100644
--- 
a/services/src/main/java/org/apache/druid/server/router/TieredBrokerHostSelector.java
+++ 
b/services/src/main/java/org/apache/druid/server/router/TieredBrokerHostSelector.java
@@ -287,7 +287,7 @@ public class TieredBrokerHostSelector
       }
     }
 
-    // Use defaut if not resolved by strategies
+    // Use default if not resolved by strategies
     if (brokerServiceName == null) {
       brokerServiceName = tierConfig.getDefaultBrokerServiceName();
 
diff --git 
a/web-console/src/druid-models/web-console-config/web-console-config.mock.tsx 
b/web-console/src/druid-models/web-console-config/web-console-config.mock.tsx
index 13e65b0e2ef..3d1663601fb 100644
--- 
a/web-console/src/druid-models/web-console-config/web-console-config.mock.tsx
+++ 
b/web-console/src/druid-models/web-console-config/web-console-config.mock.tsx
@@ -20,4 +20,5 @@ import type { WebConsoleConfig } from './web-console-config';
 
 export const DEFAULT_WEB_CONSOLE_CONFIG: WebConsoleConfig = {
   showLocalTime: false,
+  consoleSystemQueryBrokerService: undefined,
 };
diff --git 
a/web-console/src/druid-models/web-console-config/web-console-config.tsx 
b/web-console/src/druid-models/web-console-config/web-console-config.tsx
index 1e6ebbf1d9f..0446478cd09 100644
--- a/web-console/src/druid-models/web-console-config/web-console-config.tsx
+++ b/web-console/src/druid-models/web-console-config/web-console-config.tsx
@@ -20,6 +20,7 @@ import type { Field } from '../../components';
 
 export interface WebConsoleConfig {
   showLocalTime?: boolean;
+  consoleSystemQueryBrokerService?: string;
 }
 
 export const WEB_CONSOLE_CONFIG_FIELDS: Field<WebConsoleConfig>[] = [
@@ -34,4 +35,17 @@ export const WEB_CONSOLE_CONFIG_FIELDS: 
Field<WebConsoleConfig>[] = [
       </>
     ),
   },
+  {
+    name: 'consoleSystemQueryBrokerService',
+    type: 'string',
+    placeholder: 'druid/broker',
+    info: (
+      <>
+        Sets brokerService in the query context for console system queries
+        (e.g.,&quot;druid/broker-all-tiers&quot;). Useful when configuring
+        druid.broker.segment.watchedTiers if the default Broker server does 
not have visibility into
+        some Historical tiers. Does not affect user-initiated queries.
+      </>
+    ),
+  },
 ];
diff --git a/web-console/src/entry.tsx b/web-console/src/entry.tsx
index e441a3ec5be..fde0b2c518c 100644
--- a/web-console/src/entry.tsx
+++ b/web-console/src/entry.tsx
@@ -27,10 +27,17 @@ import { bootstrapJsonParse } from 
'./bootstrap/json-parser';
 import { bootstrapReactTable } from './bootstrap/react-table-defaults';
 import { ConsoleApplication } from './console-application';
 import type { QueryContext } from './druid-models';
+import type { WebConsoleConfig } from 
'./druid-models/web-console-config/web-console-config';
 import type { Links } from './links';
 import { setLinkOverrides } from './links';
 import { Api, UrlBaser } from './singletons';
-import { initMouseTooltip, setLocalStorageNamespace } from './utils';
+import {
+  initMouseTooltip,
+  localStorageGetJson,
+  LocalStorageKeys,
+  setConsoleSystemQueryBrokerService,
+  setLocalStorageNamespace,
+} from './utils';
 
 import './entry.scss';
 
@@ -70,6 +77,10 @@ interface ConsoleConfig {
 
   // Allow for namespacing the local storage in case multiple clusters share a 
URL due to proxying
   localStorageNamespace?: string;
+
+  // Broker service name to use for console system queries
+  // This injects "brokerService" into the query context for routing via the 
manual strategy
+  consoleSystemQueryBrokerService?: string;
 }
 
 const consoleConfig: ConsoleConfig = (window as any).consoleConfig;
@@ -101,6 +112,17 @@ if (consoleConfig.localStorageNamespace) {
   setLocalStorageNamespace(consoleConfig.localStorageNamespace);
 }
 
+// Set consoleSystemQueryBrokerService with precedence: WebConsoleConfig 
(personal) > consoleConfig (global)
+const webConsoleConfig: WebConsoleConfig | undefined = localStorageGetJson(
+  LocalStorageKeys.WEB_CONSOLE_CONFIGS,
+);
+const consoleSystemQueryBrokerService =
+  webConsoleConfig?.consoleSystemQueryBrokerService ||
+  consoleConfig.consoleSystemQueryBrokerService;
+if (consoleSystemQueryBrokerService) {
+  setConsoleSystemQueryBrokerService(consoleSystemQueryBrokerService);
+}
+
 QueryRunner.defaultQueryExecutor = ({ payload, isSql, signal }) => {
   return Api.instance.post(`/druid/v2${isSql ? '/sql' : ''}`, payload, { 
signal });
 };
diff --git a/web-console/src/utils/druid-query.ts 
b/web-console/src/utils/druid-query.ts
index c4e04c37162..8a64e4fd80f 100644
--- a/web-console/src/utils/druid-query.ts
+++ b/web-console/src/utils/druid-query.ts
@@ -322,6 +322,13 @@ export class DruidError extends Error {
   }
 }
 
+// Broker service to use for console system queries
+let consoleSystemQueryBrokerService: string | undefined;
+
+export function setConsoleSystemQueryBrokerService(brokerService: string | 
undefined): void {
+  consoleSystemQueryBrokerService = brokerService;
+}
+
 export async function queryDruidRune(
   runeQuery: Record<string, any>,
   signal?: AbortSignal,
@@ -341,7 +348,18 @@ export async function queryDruidSql<T = any>(
 ): Promise<T[]> {
   let sqlResultResp: AxiosResponse;
   try {
-    sqlResultResp = await Api.instance.post('/druid/v2/sql', sqlQueryPayload, 
{ signal });
+    // Inject brokerService into context if configured for system queries
+    const payload = consoleSystemQueryBrokerService
+      ? {
+          ...sqlQueryPayload,
+          context: {
+            ...sqlQueryPayload.context,
+            brokerService: consoleSystemQueryBrokerService,
+          },
+        }
+      : sqlQueryPayload;
+
+    sqlResultResp = await Api.instance.post('/druid/v2/sql', payload, { signal 
});
   } catch (e) {
     throw new Error(getDruidErrorMessage(e));
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to