Commit Graph
4001 Commits
Author SHA1 Message Date
haohuaijin 33e173e5f5 refactor: split flight's common module by responsibility
common.rs held the wire messages, what a node sends and when, and what
a remote scan's caller tracks. Each now has its own module:

- message: CustomMessage and Metrics, the protocol between nodes.
- node_messages: NodeMessages, NodeRole and MetricsInfo, the sending side.
- remote_scan: RemoteScanMetrics, RemoteScanState and NodeProfiles, the
  receiving side.

FlightMessage, the decoder's output, moves into decoder. Code moves
without changes; callers import from the new modules.
2026-11-04 17:07:39 +08:00
haohuaijin 3678d69d3a refactor: share one state per remote scan and tidy the analyze output
- RemoteScanExec keeps its scan stats, peak memory, partial error and
  node profiles in one RemoteScanState instead of four fields, four
  builders and four arguments; a cluster leader's NodeRole reuses it.
- DistributeAnalyzeExec builds its batch in a method that reads the
  node's name and address from the profile.
- metric_value no longer returns an Option: convert_metrics already
  drops the timestamps it skipped.
- Replace stale and multi-line comments.
2026-11-04 16:46:52 +08:00
haohuaijin ce75aa4740 refactor: describe a flight node's custom messages by its role
Replace the flat PreCustomMessage list with NodeMessages: what every
node sends (its scan stats, memory peak and, for EXPLAIN ANALYZE, its
profile) plus a NodeRole saying whether it is a follower or a super
cluster's cluster leader, which also forwards what its remote scan
collected. first() and last() list what goes out before the first batch
and after the last one, so is_early_emit and the three remote-scan
visitors are gone. The messages on the wire are unchanged.
2026-11-04 16:04:44 +08:00
haohuaijin d7e335f861 refactor: send a flight custom message only when its value exists
PreCustomMessage variants held Option values and get_custom_message
skipped None at encode time. The handler now pushes a message only when
it has a value, so each variant carries exactly what it sends.
2026-11-04 15:44:22 +08:00
haohuaijin f334939d6c refactor: render the analyze text rows from the profile tree
Followers now always send their profile with EXPLAIN ANALYZE, and the leader
builds the four text columns from it, so the flat text metrics, the MetricsRef
forwarding and the SearchInfo.analyze_profile proto field are gone. The flag
only decides whether the leader adds the profile column.

ProfileMetric gains `display`, DataFusion's own formatting of the value, and
metrics are aggregated and ordered the way the text plan does, so the rendered
text matches DataFusion's. Memory gauges are now bytes, and `detail` keeps the
operator line unchanged.
2026-11-04 13:22:08 +08:00
haohuaijin 769be34278 docs: call the profile's observer the caller, not the leader 2026-11-04 12:04:36 +08:00
haohuaijin 3b5ee25bd9 refactor: make a profile node's children and remote one enum
ProfileInputs is either the operators that ran on the node or, for a
remote scan, the nodes it called; the two lists can no longer both be
set. It is flattened, so the JSON still has a children or a remote key;
a leaf now writes children: [].
2026-11-03 20:48:30 +08:00
Huaijin 8df42b3db7 Merge branch 'hj/explain-analyze-profile' of github.com:openobserve/openobserve into hj/explain-analyze-profile 2026-11-03 20:27:50 +08:00
Huaijin 80a0a74b52 update 2026-11-03 20:27:43 +08:00
haohuaijin b4efbd7493 docs: explain how the profile tree nests remote nodes 2026-11-03 20:26:34 +08:00
haohuaijin b26868247d docs: note how remote node profiles nest in the profile types 2026-11-03 20:23:19 +08:00
haohuaijin 6bc237658f refactor: drop the redundant profile clearing on forwarded metrics
The remote decoder already takes each node's profile out before storing
its metrics in cluster_metrics, so the entries MetricsRef forwards never
carry one.
2026-11-03 19:41:01 +08:00
haohuaijin c4516da850 refactor: pass analyze_profile to create_physical_plan directly
The leader reads req.analyze_profile and passes it as an argument, so the
AnalyzeProfile session-config extension and its setup in
SearchContextBuilder are gone. DataFusion plans the outer AnalyzeExec
outside the physical optimizer rules, so this rewrite cannot move into a
rule.
2026-11-03 18:50:34 +08:00
haohuaijin 2231c9c4e7 refactor: trim the analyze profile to what the UI reads
- Drop the per-node error, first-batch time and peak memory recording from
  the remote decoder; the profile keeps the node's plan, its stream counters
  and whether it was skipped.
- Drop profile fields nothing reads: region, fetch_ns, assigned_files on a
  remote node, the per-metric max, and the profile version.
- Use DataFusion's one_line display for the operator detail instead of a
  local wrapper.
2026-11-03 17:12:49 +08:00
haohuaijin a7086c505d refactor: build each node profile from the remote stream's own counters
- NodeProfileRecorder now owns its node's profile and publishes it when
  dropped; rows, batches, bytes, fetch/decode time and scan stats come from
  the counters FlightDecoderStream already keeps, so the per-batch lock and
  the duplicate tallies are gone. A disabled (default) recorder publishes
  nothing, which removes the Option checks at every call site.
- build_profile walks the plan in the search crate and reads RemoteScanExec
  directly; the flight crate keeps only the profile types.
- DistributeAnalyzeExec passes the profile start time as an Option instead
  of a (start, duration) tuple.
2026-11-03 16:39:45 +08:00
haohuaijin 0e939dbcb9 Merge branch 'main' into hj/explain-analyze-profile 2026-11-03 16:24:36 +08:00
Loakesh Indiran 2353c0c336 fix(llm-eval): reuse a saved provider key only for its saved endpoint (#16310) 2026-11-03 08:07:37 +00:00
Huaijin a185ab1e13 chore: fill default search Query fields with ..Default::default() (#16314) 2026-11-03 08:01:44 +00:00
Huaijin b36c61ebd1 feat(profiles): support user-defined schema for profiles streams (#16237) 2026-11-03 06:43:36 +00:00
Shrinath Rao 476bbfb39c fix: reject a negative toolset list limit and publish satisfiable scorer schemas (#16301) 2026-11-03 06:35:00 +00:00
Huaijin 7fe726b73f fix: tell Prometheus remote write senders how much was written (#16214) 2026-11-03 06:06:35 +00:00
Shrinath Rao e6a65bfa95 fix(authz): test overlong role users against the 512-byte OpenFGA limit (#16291) 2026-11-03 05:01:42 +00:00
Manul PatelandManul 2287444a15 fix(db): propagate file_list registration errors to prevent silent da… (#15968)
Co-authored-by: Manul <manulpatel@users.noreply.github.com>
2026-11-03 04:35:08 +00:00
Huaijin cb10cb7f20 fix: do not acknowledge Firehose and Pub/Sub requests that stored nothing (#16253) 2026-11-03 04:15:31 +00:00
haohuaijin 891f811eb0 refactor: carry analyze_profile in the session config instead of a plan argument 2026-11-03 11:42:05 +08:00
haohuaijin 2f00beb622 feat: opt-in structured profile for distributed EXPLAIN ANALYZE
With query.analyze_profile set, followers attach a structured profile to
their metrics message, each RemoteScanExec records per-node timing, rows,
bytes and scan stats, and DistributeAnalyzeExec adds a JSON `profile`
column on the first row. Without the flag the output stays the four text
columns, so plain EXPLAIN ANALYZE does not grow.
2026-11-03 11:19:31 +08:00
uddhavdaveandgithub-actions[bot] bc1e8d92b8 fix: withhold tokens and credentials from readers in fleet, destinations, synthetics and AI (#16044)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-11-03 02:44:28 +00:00
Harsh Mahajan 61cef336d3 fix(openapi): publish public API routes and guard spec coverage (#16280) 2026-11-02 22:59:27 +00:00
Harsh Mahajan 04f6d0b8a9 fix(ci): cut wasted CI work and start enterprise checks on ready-for-ci (#16195) 2026-11-02 21:40:13 +00:00
Huaijin 820aa48c3c fix(streams): treat profiles as user data; original-data toggle only on logs (#16249) 2026-11-02 14:51:07 +00:00
Shrinath Rao b0780de250 fix: return clean errors from roles and groups APIs (#16205) 2026-11-02 14:47:39 +00:00
Neha Pandgithub-actions[bot] 97dd743693 fix(workflows): scope draft update and delete to the org (#16215)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-11-02 14:25:30 +00:00
uddhavdave 29cfe58986 fix(llm-eval): org-scope provider lookups; check experiment dataset, prompt and provider reads (#16174) 2026-11-02 12:50:01 +00:00
Hengfei Yang 61cc2175a2 fix(search): match substrings that overlap a partial match in ContainsAutomaton (#16250) 2026-11-02 12:39:43 +00:00
Huaijin 11c0cb0a9b feat(profiles): build tantivy index for profiles streams (#16238) 2026-11-02 12:34:57 +00:00
Shrinath RaoandAshish Kolhe b42ff72f2e chore: document PromQL 400/403/429 responses (#16224)
Co-authored-by: Ashish Kolhe <35160958+oasisk@users.noreply.github.com>
2026-11-02 11:52:29 +00:00
Huaijin 46a85bb9cc fix: skip compactor jobs for streams whose key cannot be stored (#16231) 2026-11-02 11:43:42 +00:00
Hengfei Yang 07ae6fc163 chore: say fleet tokens get 401 when fleet is disabled (#16243) 2026-11-02 11:42:36 +00:00
Hengfei Yang b981d04ce1 fix(promql): report the metric streams a query read in usage events (#16240) 2026-11-02 19:13:54 +08:00
Subhra264andgithub-actions[bot] 36d0c7ee06 feat(oncall): on-call pages in Slack, on the OpenObserve Slack app (#16192)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-11-02 19:13:37 +08:00
Subhra264andgithub-actions[bot] f8c580e452 feat(oncall): one acknowledge across alerts, incidents and on-call pages (#16098)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-11-02 09:45:42 +00:00
Huaijin 63afed20f4 fix: skip the trace time index when its stream key is too long (#16230) 2026-11-02 07:58:20 +00:00
Loakesh Indiran 2ca2b5fe90 fix: sort cached hits by the aliased timestamp when ORDER BY uses _timestamp (#16207) 2026-11-02 07:41:48 +00:00
Jason LeiandClaude Opus 5.5 e613b5789b feat: add map modifier to alert templates (#16109)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 07:36:56 +00:00
Hengfei Yang 27f5fd52c5 fix: compare session expiry in microseconds (#16211) 2026-11-02 07:27:24 +00:00
Loakesh Indiran cfc6c91c0e fix: check RBAC on synthetics bulk delete and anomaly alert history (#16208) 2026-11-02 07:12:07 +00:00
Shrinath Rao 3f3388e04b fix: answer 400 for bad role updates and stop time-range overflow and PromQL time panics (#16190) 2026-11-02 07:56:09 +00:00
Hengfei Yang d2289786a4 fix: watch branding updates on router nodes (#16201) 2026-11-02 07:55:20 +00:00
Sai Nikhilandgithub-actions[bot] 33bb02c1b3 feat(alerts): add Jira as an alert destination (#16026)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-11-02 07:06:59 +00:00
Huaijin 3db9e0fcbc fix(profiles): route queries to queriers and reject bad profiles input (#16094) 2026-11-02 05:35:51 +00:00