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.,"druid/broker-all-tiers"). 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]