Commit Graph
2267 Commits
Author SHA1 Message Date
Shivank Anchal 111a67b73d fix: return proper error for incorrect function panic (#7708) (#8021) 2025-08-19 19:45:02 +08:00
ktx-vaidehi cd00d5b06c feat: dashboard color based on series name (#7941)
### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Add "Color by series" UI and schema

- Apply custom series colors in charts

- Emit and wire series data for config

- Improve autocomplete filtering robustness


___

### Diagram Walkthrough


```mermaid
flowchart LR
  UI["ConfigPanel adds ColorBySeries UI"] -- "saves mappings" --> Schema["color.colorBySeries in panel schema"]
  Charts["PanelSchemaRenderer emits series data"] -- "series-data-update" --> Pages["Visualize/Metrics/AddPanel pages"]
  Pages -- "pass seriesData" --> UI
  Colors["applySeriesColorMappings + getSeriesColor"] -- "resolve colors" --> ECharts["ECharts series options"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>13
files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>Add colorBySeries schema and
struct</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7941/files#diff-da49585bbcb02bf0f737bb68739ebc248edd15c7ad9427c0e68f7728bb4a8c17">+14/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>PanelSchemaRenderer.vue</strong><dd><code>Emit series data
updates to parents</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7941/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>ColorBySeries.vue</strong><dd><code>New Color by series
config entrypoint</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7941/files#diff-2783259507b45f0b3664d9be68ca236690bbbf151472da3fa8b552d230af5b3f">+126/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ColorBySeriesPopUp.vue</strong><dd><code>New popup to map
series to colors</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7941/files#diff-8b4dce28a203ce7e70550d6437f16e7661d5a4ecaf336de3450a8dc7fbe5e27a">+385/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ConfigPanel.vue</strong><dd><code>Integrate ColorBySeries
and accept panelData</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7941/files#diff-c3a6e64dff02b58bb7cdc3f0668990b41ff41544b4c5e991bbcd989ad4bba3f8">+5/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>VisualizeLogsQuery.vue</strong><dd><code>Wire
series-data-update and pass to ConfigPanel</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7941/files#diff-979b01d943d58c5d70faeeac5948b7f02f0b2392a12b84ef07ba7f7393ab0261">+34/-7</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>Index.vue</strong><dd><code>Capture series data and pass to
ConfigPanel</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7941/files#diff-a6734928ea4dcb5244e90de5a16fe6f5cafa95ccf58430ac7b548a065daf3d61">+11/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>AddPanel.vue</strong><dd><code>Capture panel series data for
config</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7941/files#diff-c9632db1ad95af95aba10161bcbc7c5608318919f228637bdafae3f3a31267e8">+11/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>useDashboardPanel.ts</strong><dd><code>Add defaults for
mappings and colorBySeries</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7941/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>colorPalette.ts</strong><dd><code>Prefer custom
colorBySeries mapping</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7941/files#diff-30ac812743f2388c4061647fac5e9f413bfe561f1fc5d4f6f7be82fce73f2840">+11/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>convertDataIntoUnitValue.ts</strong><dd><code>Add
applySeriesColorMappings helper</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7941/files#diff-14c6fe442ef231566ec411f9e0262cdd24ec912fc67b9154eec743282ab7211a">+82/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>convertPromQLData.ts</strong><dd><code>Apply mapped colors
to PromQL charts</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7941/files#diff-68d70ba6c622911d48cdb567940dc404a4a6468b86c6d24fb54e5f1d8aa5ca2a">+9/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>convertSQLData.ts</strong><dd><code>Apply mapped colors to
SQL charts</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7941/files#diff-88c0e865040a20b2c8bb7d77e7f6bd187a5b07c1645c120223bc9d59603752c3">+13/-1</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Formatting</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>CommonAutoComplete.vue</strong><dd><code>Fix watch comma and
cleanup</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7941/files#diff-35f59b61336a5ba3f5933f6803e8e2cc84ced59c3f0bea25f370bb2e3d21849b">+1/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Bug
fix</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>useSearchInputUsingRegex.ts</strong><dd><code>Guard nulls in
option filtering</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7941/files#diff-f901991c2e465430e9b2434405852ac225ff94f5adfcfeb0ad0e80fdaadd0f4b">+6/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-08-19 15:10:38 +05:30
Ashish Kolhe 3458678f3a feat: Query Optimiser cli (#7745) (#7748)
### **PR Type**
Enhancement


___

### **Description**
- Add `query-optimiser` subcommand with required flags

- Dispatch to `query_optimiser` handler in CLI

- Introduce `query_optimiser` module with enterprise logic

- Fallback stub when enterprise feature disabled


___

### Diagram Walkthrough


```mermaid
flowchart LR
  CLIApp["CLI Application"] --> Dispatch["Subcommand Dispatch"]
  Dispatch -- "query-optimiser" --> QueryOpt["query_optimiser Module"]
  QueryOpt -- "feature enterprise" --> GetRec["get_recommendations API"]
  QueryOpt -- "no enterprise" --> Fallback["Unsupported Handler"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>cli.rs</strong><dd><code>Add query-optimiser command
handling</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/cli/basic/cli.rs

<ul><li>Added <code>query-optimiser</code> command definition<br> <li>
Defined arguments: url, token, duration, etc.<br> <li> Implemented match
branch for dispatch</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7748/files#diff-cb1eb3e74723d891353ccf1e2e5e0d246d2e78a5e69dbe4c73006ea8412d65e0">+70/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>query_optimiser.rs</strong><dd><code>Implement
query_optimiser functionality</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/cli/basic/query_optimiser.rs

<ul><li>Created <code>query_optimiser</code> module file<br> <li>
Enterprise feature calls <code>get_recommendations</code><br> <li>
Fallback prints unsupported message</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7748/files#diff-69a90f896bb4c373e3f710b55453404c9cfd1d4b17a8d57a835e2b07de9a85fe">+64/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>mod.rs</strong><dd><code>Register query_optimiser
module</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/cli/basic/mod.rs

- Registered new `query_optimiser` module


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7748/files#diff-8820944bd26c070b4d7d80c21d699937e32f8f8d0f3dad496edf580bd83aa321">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-19 09:43:07 +05:30
Yashodhan JoshiandYashodhan Joshi d28b5064d8 fix: handle non-empty base-uri in router (main) (#8032)
### **User description**
cherry pick of https://github.com/openobserve/openobserve/pull/8016 on
main, with added tests.


___

### **PR Type**
Bug fix, Tests


___

### **Description**
- Respect non-empty base URI in routing

- Update dispatcher to pass base URI

- Strip base URI before route matching

- Add tests covering base URI logic


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Req["Incoming request path"] -- includes base URI --> Strip["Strip base_uri prefix"]
  Strip -- api_path --> Match["Match querier/ingester routes"]
  Match -- node discovery --> Proxy["Proxy to appropriate node"]
  Tests["Tests"] -- validate --> Strip
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>mod.rs</strong><dd><code>Base URI-aware routing and
tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/router/http/mod.rs

<ul><li>Pass <code>cfg.common.base_uri</code> into
<code>get_url</code>.<br> <li> Update <code>get_url</code> to strip
<code>base_uri</code> from paths.<br> <li> Base path used for
<code>is_querier_route</code> now <code>api_path</code>.<br> <li> Add
async test <code>test_with_base_uri</code> for base URI cases.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8032/files#diff-d7987e62dcc7b1ec1bd4aeabef94f85d8c41b2ea33de5ab78660794fa4d51a9e">+22/-3</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
2025-08-18 16:06:08 +05:30
Huaijin a99527ce52 fix: tantivy row_id to AccessPlan (#8034) 2025-08-18 17:53:32 +08:00
Huaijin c51142de03 fix: streaming aggregate config (#8029) 2025-08-18 14:58:02 +08:00
Ashish Kolhe 2ce1fba5d3 fix: add max bytes for nats stream (#8009)
### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Add NATS queue max size config

- Validate and default NATS size to 2GB

- Convert GB setting to bytes at init

- Apply max_bytes to JetStream stream


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Config: Add `queue_max_size` (GB)"] -- "init validation" --> B["`check_nats_config`: default 2GB if 0"]
  B -- "convert to bytes" --> C["Store bytes in cfg.nats.queue_max_size"]
  C -- "use in stream config" --> D["NATS JetStream: set `max_bytes`"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>config.rs</strong><dd><code>Introduce and validate NATS
`queue_max_size`</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/config/src/config.rs

<ul><li>Add <code>queue_max_size</code> env config (GB, default 0)<br>
<li> Validate NATS config, default to 2GB if 0<br> <li> Convert size
from GB to bytes during init<br> <li> Wire
<code>check_nats_config</code> into global init</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8009/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+19/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>nats.rs</strong><dd><code>Use config to set JetStream
max_bytes</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

src/infra/src/queue/nats.rs

<ul><li>Apply <code>cfg.nats.queue_max_size</code> to JetStream
<code>max_bytes</code><br> <li> Enforce retention by size alongside age
limits</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8009/files#diff-b05729b03dff9a5e29eaf536d0f90e94a0c27a27d1a3a41b52f25dc6dc380138">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-15 17:37:42 +05:30
Huaijin 3eb271620a refactor: try move remotescan, stream aggregate, topk from rewrite to optimize rule (#7998) 2025-08-15 12:28:17 +08:00
1d0490875b fix: is_multi_stream_search and enable_align_histogram (#8003)
### **User description**
Fixes:
- https://github.com/openobserve/openobserve/issues/7986


### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Add multi-stream search histogram support

- Gate histogram alignment via query flag

- Remove unused search_type plumbing

- Propagate multi-stream flag through services


___

### Diagram Walkthrough


```mermaid
flowchart LR
  HTTP["HTTP handlers"]
  GRPC["gRPC handlers"]
  Utils["HTTP query utils"]
  SQL["SQL utils: histogram eligibility"]
  Hist["SQL: histogram query builder"]
  Svc["Search service"]
  Cache["Search cache"]
  Stream["Streaming pipeline"]

  Utils -- "parse is_multi_stream_search / enable_align_histogram" --> HTTP
  Utils -- "parse flags" --> GRPC
  HTTP -- "pass flags" --> Svc
  GRPC -- "pass flags" --> Svc
  Svc -- "eligibility check (multi/unified)" --> SQL
  Svc -- "partitioning uses align flag" --> Svc
  Svc -- "search() with multi-stream flag" --> Cache
  Cache -- "eligibility(query, multi)" --> SQL
  HTTP -- "convert_to_histogram_query(..., multi)" --> Hist
  Stream -- "do_search(..., multi)" --> Cache
  Hist -- "build single/multi-stream histogram query" --> Svc
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>15
files</summary><table>
<tr>
<td><strong>http.rs</strong><dd><code>Parse multi-stream and align
histogram flags</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-3b50a69c1ec2f63f8eebb5f9880e17826463a586768aed3e3e15242833609d6b">+20/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>search.rs</strong><dd><code>Remove
SearchPartitionRequest.search_type field</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-373e83a31e5bbc82fba05d7ae274b0dbd624ed748272232cf7eb8b8c3b2f3afc">+0/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>sql.rs</strong><dd><code>Add multi-stream histogram
eligibility (UNION ALL)</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-a0a09c66a20d878ec7683ae222c919fbe092b8001871ade7f455b89573ce0911">+134/-38</a></td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Pass multi-stream flag into search
service</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-8dcdb10340635be8bb58d45a815569026877f6fdbb3b69a773a30698b91674b0">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Wire flags; histogram conversion
uses multi-stream</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-96630a0dbb6dd7b2b0248fa325c7c7041ce31340c32826675a4a70772e9d29f6">+11/-7</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>multi_streams.rs</strong><dd><code>Partition multi: add
align flag; remove search_type</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-c3233cdf1e68cb2455f91457719b9c2f477e735ee16546fdfe111e76768bd054">+10/-9</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>search_inspector.rs</strong><dd><code>Pass multi-stream flag
in search profile</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-f818db4ca10b411c3559cc2a2659c49a59a45ecde0e4a22f9ef023da0bf4a009">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>search_stream.rs</strong><dd><code>Stream API supports
multi-stream histogram and flag</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-642de43ff6b19ae41087a9f1efc02d8b0b873809e0c92cbddfac1a30ef3f1184">+9/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Propagate multi-stream flag in
traces search</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-64694c886c809b6efe449e6eba9fbb33d31ce5a3c49cea1a30006fc1d9522665">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Cache search considers multi-stream
eligibility</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-f07bfacc0501b9c234e64b16c1dd8eb0ae8fcbe231f90c81fed72bcc94946f74">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Align partitions via flag; multi
partition API updates</code>&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-c3b85ea662a885fbd39797968928b291cb59a58f53a03f7b7dfd7ba8b6a7985a">+22/-12</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>histogram.rs</strong><dd><code>Build histogram for
multi-stream queries (UNION ALL)</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-a5fc4cd11b3ec569b4cedf278ef0b14f540504abfbb23e29eb896d5b2a6cc2b2">+64/-8</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>cache.rs</strong><dd><code>Streaming cache handles
multi-stream flag</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-55769b7cb67b550daf45363c6d7d569b39d4a6235f6a68c091beb40f16b6511e">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>execution.rs</strong><dd><code>Execution path passes
multi-stream flag to searches</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-75d432351865224f0b00d7cc819554c2ad5fa1f777e9c645d91a3fd5c1113bc0">+25/-4</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Stream request processing threads
multi-stream flag</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-f236c6c880ed80233fd264e657d5ab658c16c7368bdc70e20f123862b7214374">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___


___

### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Add multi-stream histogram query support

- Align histogram via query flag

- Remove search_type plumbing in partitions

- Propagate multi-stream flag end-to-end


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Http["HTTP handlers"]
  Grpc["gRPC handlers"]
  Utils["HTTP query utils"]
  Front["Web client"]
  Service["Search service"]
  Cache["Search cache"]
  SQLU["SQL utils: histogram eligibility"]
  Hist["Histogram query builder"]

  Front -- "is_multi_stream, align flag" --> Http
  Utils -- "parse is_multi_stream/align" --> Http
  Http -- "enable_align_histogram" --> Service
  Http -- "is_multi_stream_search" --> Cache
  Grpc -- "flags default false" --> Service
  Cache -- "eligibility(sql, multi)" --> SQLU
  Http -- "convert_to_histogram_query(..., multi)" --> Hist
  Service -- "partition(gen interval if enabled)" --> Service
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>19
files</summary><table>
<tr>
<td><strong>http.rs</strong><dd><code>Parse multi-stream and
align-histogram flags</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-3b50a69c1ec2f63f8eebb5f9880e17826463a586768aed3e3e15242833609d6b">+20/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>search.rs</strong><dd><code>Remove search_type from
partition request</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-373e83a31e5bbc82fba05d7ae274b0dbd624ed748272232cf7eb8b8c3b2f3afc">+0/-4</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>sql.rs</strong><dd><code>Histogram eligibility with
multi-stream UNION ALL</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-a0a09c66a20d878ec7683ae222c919fbe092b8001871ade7f455b89573ce0911">+134/-38</a></td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Pass default multi-stream flag to
service</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-8dcdb10340635be8bb58d45a815569026877f6fdbb3b69a773a30698b91674b0">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Add flags to HTTP search; align
histogram handling</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-96630a0dbb6dd7b2b0248fa325c7c7041ce31340c32826675a4a70772e9d29f6">+11/-7</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>multi_streams.rs</strong><dd><code>Partition multi endpoint
supports align flag</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-c3233cdf1e68cb2455f91457719b9c2f477e735ee16546fdfe111e76768bd054">+10/-9</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>search_inspector.rs</strong><dd><code>Forward multi-stream
flag in inspector search</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-f818db4ca10b411c3559cc2a2659c49a59a45ecde0e4a22f9ef023da0bf4a009">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>search_stream.rs</strong><dd><code>Streaming search supports
multi-stream histogram</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-642de43ff6b19ae41087a9f1efc02d8b0b873809e0c92cbddfac1a30ef3f1184">+9/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Forward multi-stream flag in traces
helpers</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-64694c886c809b6efe449e6eba9fbb33d31ce5a3c49cea1a30006fc1d9522665">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Eligibility check aware of
multi-stream</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-f07bfacc0501b9c234e64b16c1dd8eb0ae8fcbe231f90c81fed72bcc94946f74">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Align histogram in partition; multi
aggregate</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-c3b85ea662a885fbd39797968928b291cb59a58f53a03f7b7dfd7ba8b6a7985a">+22/-12</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>histogram.rs</strong><dd><code>Build single/multi-stream
histogram SQL</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-a5fc4cd11b3ec569b4cedf278ef0b14f540504abfbb23e29eb896d5b2a6cc2b2">+64/-8</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>cache.rs</strong><dd><code>Propagate multi-stream flag in
streaming cache</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-55769b7cb67b550daf45363c6d7d569b39d4a6235f6a68c091beb40f16b6511e">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>execution.rs</strong><dd><code>Pass multi flag through
streaming execution</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-75d432351865224f0b00d7cc819554c2ad5fa1f777e9c645d91a3fd5c1113bc0">+25/-4</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Wire multi-stream flag across
streaming path</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-f236c6c880ed80233fd264e657d5ab658c16c7368bdc70e20f123862b7214374">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>IndexList.vue</strong><dd><code>Use align flag in partition
requests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-08f058f883b659e713e606991a7ea37ae1ff016b7cccef970489ab5840dc3d09">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>usePanelDataLoader.ts</strong><dd><code>Toggle align
histogram for dashboards</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-5a42e9493a7bcd722b88e61fd38883c4f61001bc9cafa399f65f8eafda3aace9">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>useLogs.ts</strong><dd><code>Multi-stream histogram flow and
params</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+3/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>search.ts</strong><dd><code>API params for is_multi_stream
and align flag</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8003/files#diff-885ab872dbc6e7b20264df815e3ef4727f0abc86ce90d2fb47e4aff572814c75">+7/-5</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: Bhargav <BJP232004@GMAIL.COM>
Co-authored-by: ktx-abhay <abhay.padamani@kiara.tech>
Co-authored-by: Shrinath Rao <shnath@openobserve.ai>
Co-authored-by: omkark06 <omkar@zinclabs.io>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
2025-08-14 17:39:48 +05:30
Subhra264 cb07c8af7e fix: improve alert manager error handling (#7936)
### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Add robust trigger usage reporting on failures

- Improve retry/backoff and next-run updates

- Respect alert/report realtime and free-trial states

- Add scheduler debug logs and report success log


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Scheduler workers"] -- process --> B["Alert triggers"]
  A -- process --> C["Report triggers"]
  B -- failures/conditions --> D["Update trigger (status/next_run/retries)"]
  C -- failures/conditions --> D
  B -- publish --> E["Trigger usage telemetry"]
  C -- publish --> E
  A -- keep-alive --> F["Job keep-alive logs"]
  G["Report sender"] -- success --> H["Info log: report sent"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>handlers.rs</strong><dd><code>Stronger trigger failure
handling, retries, and telemetry</code></dd></summary>
<hr>

src/service/alerts/scheduler/handlers.rs

<ul><li>Compute queue timing and source node metadata<br> <li> Publish
TriggerData on alert/report fetch failures<br> <li> Refactor trigger
updates: retries, next_run_at, realtime<br> <li> Handle free-trial:
reschedule next run appropriately</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7936/files#diff-5eca8995a88fcecb6d6b8efd3c7c4496f4a96a4b060fb4ed85593574f7cf49eb">+151/-29</a></td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>reports.rs</strong><dd><code>Log report send
success</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/service/dashboards/reports.rs

- Log info on successful report send


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7936/files#diff-07dd8993c92038fa1197f9a4b6fe141d310854fbc5859d76ee8723fb90871312">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Documentation</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>worker.rs</strong><dd><code>Add detailed scheduler
debug logs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/service/alerts/scheduler/worker.rs

<ul><li>Add debug log after trigger processing<br> <li> Add debug log
for keep-alive extension</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7936/files#diff-3d37991258d3f26b16ad99bba59b63adfa614bfbc4866c4088544ca9308ae49d">+10/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-14 16:14:45 +05:30
Ashish Kolhe db454f2d50 fix: use uds fields length for file move (#7813)
### **PR Type**
Bug fix


___

### **Description**
- Pass UDS schema field count to merge_files

- Compute `num_uds_fields` from stream settings

- Use UDS count when determining field number

- Fallback to full schema fields if none defined


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>parquet.rs</strong><dd><code>Add and use UDS fields
count in merge logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/job/files/parquet.rs

<ul><li>Extract <code>num_uds_fields</code> from
<code>stream_settings</code><br> <li> Extend <code>merge_files</code>
signature with <code>num_uds_fields</code><br> <li> Use
<code>num_uds_fields</code> over schema fields when > 0<br> <li> Retain
default schema field count otherwise</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7813/files#diff-27f710981cfe1b938aeeb53abaed05961596c32e2edf3b8a2a59d3e72b2f542b">+10/-1</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-14 11:29:21 +05:30
Ashish Kolhe cd08a60baf fix: vrl error report fn name (#7968) (#7973)
### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Include function name in node errors

- Propagate optional fn name through channel

- Truncate VRL error messages to 500 chars

- Minor refactors in VRL apply path


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["process_node errors"] -- "send (node_id, type, msg, fn)" --> B["error channel tuple +fn"]
  B -- "collect" --> C["PipelineError.add_node_error(..., fn)"]
  C -- "store" --> D["NodeErrors.function_name (Option)"]
  A -- "VRL errors truncated" --> B
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>error.rs</strong><dd><code>Add function name to node
error metadata</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

src/config/src/meta/self_reporting/error.rs

<ul><li>Add <code>function_name</code> to <code>NodeErrors</code>
(optional).<br> <li> Extend <code>add_node_error</code> to accept
<code>fn_name</code>.<br> <li> Update <code>NodeErrors::new</code> to
take <code>function_name</code>.<br> <li> Fix tests to include
<code>function_name: None</code>.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7973/files#diff-00a00a557343475be7131843f748fbae2d0c1a4041a5c4dddec56c940a03e613">+13/-3</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Bug fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>batch_execution.rs</strong><dd><code>Propagate fn name
and trim VRL error messages</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/service/pipeline/batch_execution.rs

<ul><li>Extend error channel to carry optional function name.<br> <li>
Pass function name for FunctionNode errors.<br> <li> Truncate VRL error
messages to 500 chars.<br> <li> Minor VRL apply and stream_name handling
tweaks.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7973/files#diff-3f6824a6eddaf1603e5cb0f1a4311ac6a45e1ffb967266ccc1f0bba944625e69">+60/-35</a>&nbsp;
</td>

</tr>
</table></td></tr><tr><td><strong>Formatting</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>mod.rs</strong><dd><code>Minor formatting
cleanup</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/service/self_reporting/mod.rs

- Remove superfluous blank line.


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7973/files#diff-c6255010f7a87d6acdb3ad04954fc9f2c27350ae319c53a1857b120aa06408a3">+0/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-14 09:53:00 +05:30
Yuta YamaguchiandHengfei Yang 6921d9ad96 refactor: remove warn(dead_code) annotation from Immutable (#8006)
Remove unnecessary `#[warn(dead_code)]` annotation from `Immutable`
struct.

Co-authored-by: Hengfei Yang <hengfei.yang@gmail.com>
2025-08-14 09:22:48 +08:00
Hengfei Yang 9f5aa745a7 feat: remove tantivy footer cache (#8004)
### **User description**
We can't control the memory with the cache, it doesn't only cache footer
it will cache all the data, it caused memory issue. so i removed this
feature.


___

### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Remove Tantivy reader cache feature

- Drop related config flag and module

- Rename result cache static to `GLOBAL_CACHE`

- Expose result cache size and memory stats


___

### Diagram Walkthrough


```mermaid
flowchart LR
  cfg["Config: remove inverted index reader cache flag"]
  http["HTTP status: report Tantivy result cache stats"]
  grpc_use["gRPC search: remove reader cache usage"]
  resultCache["Result cache: rename to GLOBAL_CACHE + stats"]
  module["Puffin directory: remove reader_cache module"]

  cfg -- "delete ZO_INVERTED_INDEX_CACHE_ENABLED" --> grpc_use
  grpc_use -- "open index per request (no reader cache)" --> module
  grpc_use -- "use GLOBAL_CACHE get/put" --> resultCache
  http -- "display len + memory_size" --> resultCache
  module -- "cleanup module export" --> ( )
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>config.rs</strong><dd><code>Drop inverted index reader
cache config flag</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/config/src/config.rs

<ul><li>Remove <code>inverted_index_cache_enabled</code> env config.<br>
<li> Delete flag <code>ZO_INVERTED_INDEX_CACHE_ENABLED</code>.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8004/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+0/-6</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>mod.rs</strong><dd><code>Expose Tantivy result cache
metrics in status</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/handler/http/request/status/mod.rs

<ul><li>Replace reader cache stats with result cache stats.<br> <li>
Import <code>grpc::tantivy_result_cache</code>.<br> <li> Report
<code>len</code> and <code>memory_size</code> for result cache.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8004/files#diff-ca09c9c9b020049bdbc3382c466bfcca80daac92e98760d9a9a76172abf34049">+8/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>storage.rs</strong><dd><code>Remove reader cache; use
GLOBAL_CACHE for results</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

src/service/search/grpc/storage.rs

<ul><li>Remove reader cache usage and logic paths.<br> <li> Always open
index and reader directly.<br> <li> Switch to
<code>tantivy_result_cache::GLOBAL_CACHE</code>.<br> <li> Clean up
imports for removed reader_cache.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8004/files#diff-ab2d867e1e2e3dd8307505c2e130039628a84f8131a9b38cd2e7b4e1c141e094">+29/-45</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>tantivy_result_cache.rs</strong><dd><code>Result cache
rename and stats helpers</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/service/search/grpc/tantivy_result_cache.rs

<ul><li>Rename global static to <code>GLOBAL_CACHE</code>.<br> <li> Add
<code>len()</code> and <code>memory_size()</code> helpers.<br> <li>
Update test to use <code>GLOBAL_CACHE</code>.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8004/files#diff-f4bcf95cba21da14d907701d1440b1be9c9140c23de8681639770364e78af01e">+13/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>reader_cache.rs</strong><dd><code>Delete Tantivy reader
cache module</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/service/tantivy/puffin_directory/reader_cache.rs

- Delete reader cache implementation and tests.


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8004/files#diff-baabb8633f8966f2407c724632e85a34f469a1591d52ded16a6d66c40950c190">+0/-423</a>&nbsp;
</td>

</tr>
</table></td></tr><tr><td><strong>Miscellaneous</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>mod.rs</strong><dd><code>Remove reader_cache module
reference</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/service/tantivy/puffin_directory/mod.rs

- Remove `reader_cache` module export.


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/8004/files#diff-1602f85399080c1e2838d1ef1d62af23d96f353379e49a7770026e892c954018">+0/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-13 23:15:20 +08:00
Hengfei Yang 1f15b7ed58 ci: bump version (#7992) 2025-08-13 16:53:12 +08:00
748cca3ecb feat: visualization enhancement (#7456)
### **User description**
### Which query will be used?
- If query is empty will use histogram query
- Else query will be available:
    - If query has group by clause :- will use same query
    - Else will use histogram query


___

### **PR Type**
Enhancement, Tests, Bug fix


___

### **Description**
- Add server API to extract result schema

- Implement DataFusion plan visitor for projections

- Integrate visualization flow with schema and histogram

- Numerous UI fixes and UX improvements


___

### Diagram Walkthrough


```mermaid
flowchart LR
  DF["DataFusion Plan Visitor (Rust)"]
  API["HTTP API /result_schema (Rust)"]
  FE["Logs Visualize UI (Vue)"]
  Loader["Panel Data Loader (TS)"]
  Cache["Histogram Handler & Cache (Rust)"]

  DF -- "extract projections/group_by/timeseries" --> API
  API -- "JSON ResultSchemaResponse" --> FE
  FE -- "build config, set fields, decide histogram" --> Loader
  Loader -- "inject searchResponse / is_ui_histogram" --> FE
  Cache -- "normalize histogram()" --> DF
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>14
files</summary><table>
<tr>
<td><strong>projections.rs</strong><dd><code>Add DataFusion logical plan
visitor to extract schema</code>&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-7a0420d3649da44b80be36d7f1043d6ff81d88395c961266882c3c700f7edff7">+651/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Add /result_schema endpoint and
wire parsing/security</code>&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-96630a0dbb6dd7b2b0248fa325c7c7041ce31340c32826675a4a70772e9d29f6">+224/-2</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>cacher.rs</strong><dd><code>Improve histogram() handling and
make public</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-8c387b22b2c0a282600ee41ca702b3db60f5a284d507c0feb7418608ff062c6c">+22/-11</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Export projections
module</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-70bb941c2eef1365e5ead1a59b65c5397457b9197a4e22596e18d17db7eaf922">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>Index.vue</strong><dd><code>Integrate visualization with
schema API and histogram</code>&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+564/-154</a></td>

</tr>

<tr>
<td><strong>VisualizeLogsQuery.vue</strong><dd><code>Field list UX,
props for searchResponse/histogram</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-979b01d943d58c5d70faeeac5948b7f02f0b2392a12b84ef07ba7f7393ab0261">+236/-174</a></td>

</tr>

<tr>
<td><strong>SearchBar.vue</strong><dd><code>Visualize toggle gating,
SQL/VRL disabled states</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+102/-52</a></td>

</tr>

<tr>
<td><strong>FieldList.vue</strong><dd><code>Readonly/visibility options
for logs visualize</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-a071c06e3e26629cb4ae4751450acc39c61fa49b07a1cc4be3711697829668d4">+13/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>TransformSelector.vue</strong><dd><code>Disable transform
controls in visualize mode</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-0037d8dd9cfbacc26309b26e98ae953e7ccbd0891ac2fd01c6314ebd7eed9d2c">+11/-4</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ChartSelection.vue</strong><dd><code>Allow restricting
selectable chart types</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-384ce178717731e2c85f1312f12a54b42ceabd0b86f7e2befb0e421ef568a6a3">+14/-11</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>PanelSchemaRenderer.vue</strong><dd><code>Accept
searchResponse and is_ui_histogram props</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-e5376e7e77bf3aaf6590c2522d8c2dbffcc95a8006ae0d6dc0040a37825367d6">+13/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>usePanelDataLoader.ts</strong><dd><code>Support injected
searchResponse and ui histogram</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-5a42e9493a7bcd722b88e61fd38883c4f61001bc9cafa399f65f8eafda3aace9">+30/-5</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>visualizationUtils.ts</strong><dd><code>Add SQL alias
validator for visualization</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-c2c391afcaa0b44c33d3f4fa531a4f31f044ae036f0baa182c8c88e83de066c5">+80/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>query.ts</strong><dd><code>Extend response metadata for
visualization</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-12dd5b3bb9741bbeaa348c0efbbd745d0a582899678738159c6927d34a35191d">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>Add test for compact delete value
check</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-b7e3bf7f0ac23dd084c0c817a310a4d5e7a64ff532746d182986ef940fa03fd0">+17/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>2 files</summary><table>
<tr>
<td><strong>auth.rs</strong><dd><code>Allow auth bypass for
result_schema route</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-9bc2b1841504a435f66ad094f72ddbe7b7fa75e5e1557b8adbfe36f7f0592e1b">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Register result_schema HTTP
route</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-02556e3f515441b5d2b6bbea7829df488beac03c4cc41309a6638ae3c0e0aec6">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>search.rs</strong><dd><code>Add ResultSchemaResponse
contract</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-373e83a31e5bbc82fba05d7ae274b0dbd624ed748272232cf7eb8b8c3b2f3afc">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Bug
fix</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>TableRenderer.vue</strong><dd><code>Render null/undefined as
empty string</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-794706ea9da3a70012a0327c0464f9fd16802f78ece26055fe951716c2d73d59">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Formatting</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>sqlUtils.ts</strong><dd><code>Minor formatting
fix</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-dde40e8fcb5c37b06c011ede08922c44a3c025682fbc341aee97ba046b73a0e3">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>11 files</summary><table>
<tr>
  <td><strong>playwright.yml</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-7afcd2d8f7b49bda74843f209eefb7b2da45f7e7803bf2e4bd636699b76aa2d3">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>visualise.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-c14ac1db3e4aa86190d7525e8e38c410bcbbae7f46b01890e74937cc11be67e6">+1/-5</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>logsPage.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-8045b343491d8943869c1af74cdafab204dc49c02a70294417e73f47d35e0b59">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>visualize.spec.js</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-d144f23552ec150db375c89e52c3a53ede9ff3fa5dcd6092694fbe0a308d22ec">+225/-183</a></td>

</tr>

<tr>
  <td><strong>useDashboardPanel.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-fbba1700750053b9eaf38ddd30dab84531bc44131c795ebb713811e4930cd7cb">+420/-6</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>useLogs.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+151/-19</a></td>

</tr>

<tr>
  <td><strong>useNotifications.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-32ff5072df9badfebc0a72c401fe337de3324f76b186a52d202eb6cc2fa71e3a">+25/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>en.json</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-892aa3d75ab6e129ef9116aa21bec1b9a15ba69ce5366d2a19128078c690d824">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>search.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-885ab872dbc6e7b20264df815e3ef4727f0abc86ce90d2fb47e4aff572814c75">+43/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>logs.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-637857fa918f47ffb02ebfc8a35b124001ef4f65fd180c467f0f153382d2dc76">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>convertDataIntoUnitValue.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7456/files#diff-14c6fe442ef231566ec411f9e0262cdd24ec912fc67b9154eec743282ab7211a">+120/-29</a></td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: ktx-akshay <akshay.patil@kiara.tech>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: omkark06 <omkar@zinclabs.io>
Co-authored-by: loaki07 <rustyloaki@gmail.com>
Co-authored-by: Loakesh Indiran <66478092+Loaki07@users.noreply.github.com>
Co-authored-by: Bhargav <BJP232004@GMAIL.COM>
Co-authored-by: ktx-vaidehi <vaidehi.akhani@kiara.tech>
Co-authored-by: ktx-vaidehi <134508096+ktx-vaidehi@users.noreply.github.com>
Co-authored-by: Yashodhan Joshi <yashodhan@openobserve.ai>
2025-08-13 13:11:44 +05:30
Huaijin ee7fc8be68 refactor: datafusion session create and parquet table create (#7993) 2025-08-13 14:46:04 +08:00
Huaijin 96fdd6b4f8 fix: super cluster scan_stats (#7989) 2025-08-12 22:35:29 +08:00
Yashodhan JoshiandYashodhan Joshi 4b3826bbd8 fix: add 7d and 13d to no ingestion reporting as well (#7983)
### **User description**
As per requirements, we also want to send events for 7d and 13d no
ingestion along with 24h


___

### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Add 7d and 13d no-ingestion checks

- Generalize job to parameterized durations

- Include duration field in telemetry payload

- Improve logs with duration context


___

### Diagram Walkthrough


```mermaid
flowchart LR
  start["start()"]
  runner["run_no_ingestion() loop hourly"]
  check24["report_org_no_ingestion(24, '24hr')"]
  check7d["report_org_no_ingestion(168, '7d')"]
  check13d["report_org_no_ingestion(312, '13d')"]
  list["organizations::list with created window"]
  streams["get_streams(org)"]
  segment["report_no_ingestion_to_segment(org, duration)"]

  start -- "spawn" --> runner
  runner --> check24
  runner --> check7d
  runner --> check13d
  check24 --> list
  check7d --> list
  check13d --> list
  list --> streams
  streams -- "no streams" --> segment
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>cloud.rs</strong><dd><code>Parameterize and extend
no-ingestion reporting intervals</code>&nbsp; </dd></summary>
<hr>

src/job/cloud.rs

<ul><li>Replace single 24h job with scheduler loop.<br> <li> Add
parameterized <code>report_org_no_ingestion(start_hour,
duration)</code>.<br> <li> Extend telemetry to include
<code>duration</code> and updated log messages.<br> <li> Add 7d and 13d
reporting alongside 24hr.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7983/files#diff-7fc16d008216c106d63f78f75c867fbefe7102433fcaa8893c314f0b7ea8d0e6">+44/-32</a>&nbsp;
</td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
2025-08-12 18:35:42 +05:30
Hengfei Yang 0869daeb48 perf: set cache file_list to background (#7970) 2025-08-12 20:04:08 +08:00
Hengfei Yang 674910c84c fix: search doesn't work with comments (#7980) 2025-08-12 19:21:49 +08:00
Huaijin e74ad0c932 feat: use custom FlightData encoder/decoder send ScanStats (#7979) 2025-08-12 17:03:24 +08:00
Hengfei Yang e9f041a28e feat: support largeutf8 (#7962) 2025-08-11 23:36:51 +08:00
Hengfei Yang 86dec0cb91 fix: datatype mismatch #7951 (#7953) 2025-08-11 21:13:38 +08:00
Yashodhan JoshiandYashodhan Joshi 584eafcacb fix: local cache table for alert manager (#7956)
### **User description**
pick from https://github.com/openobserve/openobserve/pull/7925/ for main

Without this the alert manager panics on init


___

### **PR Type**
Bug fix


___

### **Description**
Guard local cache table creation for alert manager
Prevent alert-manager init panics on startup
Create global file index table as before
No behavior change for non-alert nodes


___

### Diagram Walkthrough


```mermaid
flowchart LR
  Init["job::init()"] --> CreateGlobal["create_table_index() for infra_file_list"]
  Init --> Cond{"LOCAL_NODE.is_alert_manager()?"}
  Cond -- "No" --> CreateLocal["LOCAL_CACHE.create_table_index()"]
  Cond -- "Yes" --> Skip["Skip local cache table creation"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>mod.rs</strong><dd><code>Conditionalize local cache
table creation by node role</code>&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/job/mod.rs

<ul><li>Wrap local cache table/index creation in alert-manager
guard.<br> <li> Keep global
<code>infra_file_list::create_table_index()</code> call unchanged.<br>
<li> Prevents panic during alert manager initialization.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7956/files#diff-f2e4c29b8eef22189ec704a832633c4bd135a24444f054864c98064bd0963681">+3/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
2025-08-11 16:18:10 +05:30
Loakesh Indiranandsai nikhil kethe e46f6d5b82 feat: custom histogram interval & aligned partitions (#7909)
- `is_ui_histogram` query param for search api, the backend will convert
the sql to histogram query and respond accordingly
- `search_type` for search partition query, and if search type is `ui`
only then we generate partitions with mini partition that is aligned
with histogram interval


### **PR Type**
Enhancement, Bug fix, Tests, Documentation


___

### **Description**
- Add UI histogram query conversion and flag

- Align partitions to histogram with mini

- Stream empty metadata+hints consistently

- Expose histogram eligibility and interval


___

### Diagram Walkthrough


```mermaid
flowchart LR
  FE["Web UI logs & services"] -- "is_ui_histogram, searchType" --> HTTP["HTTP search endpoints"]
  HTTP -- "convert to histogram SQL\n(resolve streams, eligibility)" --> SQL["Histogram SQL converter"]
  HTTP -- "pass search_type, flags" --> SVC["Search service"]
  SVC -- "is_eligible, gen interval" --> PART["PartitionGenerator"]
  PART -- "aligned partitions\n(+mini optional)" --> STREAM["Streaming execution"]
  STREAM -- "SearchResponse + metadata\n(empty hits emitted)" --> FE
  SVC -- "Response: histogram_interval, is_histogram_eligible, converted_query" --> FE
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>16
files</summary><table>
<tr>
<td><strong>partition.rs</strong><dd><code>Histogram-aligned partitions
with optional mini support</code>&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-348fa23375d0cea3e5fb039cc6b381d79aa1d5121e6b9792acc048d3fd02e37c">+798/-269</a></td>

</tr>

<tr>
<td><strong>execution.rs</strong><dd><code>Always emit responses;
accumulate and metadata tweaks</code>&nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-75d432351865224f0b00d7cc819554c2ad5fa1f777e9c645d91a3fd5c1113bc0">+148/-152</a></td>

</tr>

<tr>
<td><strong>search_stream.rs</strong><dd><code>HTTP2 stream: UI
histogram conversion and interval handling</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-642de43ff6b19ae41087a9f1efc02d8b0b873809e0c92cbddfac1a30ef3f1184">+149/-69</a></td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>Partition API: histogram
eligibility, interval, UI paths</code>&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-c3b85ea662a885fbd39797968928b291cb59a58f53a03f7b7dfd7ba8b6a7985a">+71/-5</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>histogram.rs</strong><dd><code>Convert original SQL to
histogram-safe query</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-a5fc4cd11b3ec569b4cedf278ef0b14f540504abfbb23e29eb896d5b2a6cc2b2">+140/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>HTTP search: UI histogram
conversion and response enrichment</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-96630a0dbb6dd7b2b0248fa325c7c7041ce31340c32826675a4a70772e9d29f6">+38/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>search.rs</strong><dd><code>Response/request fields for
histogram meta and streaming chunks</code></dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-373e83a31e5bbc82fba05d7ae274b0dbd624ed748272232cf7eb8b8c3b2f3afc">+45/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>mod.rs</strong><dd><code>New error:
SearchHistogramNotAvailable</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-90c725d0e77a6e7d4bcc130cf5783848a5cf0efdb304b351cd63cacf8775fc36">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>multi_streams.rs</strong><dd><code>Multi-stream partition
search accepts search_type</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-c3233cdf1e68cb2455f91457719b9c2f477e735ee16546fdfe111e76768bd054">+16/-4</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>sql.rs</strong><dd><code>Detect histogram-eligible queries
and subqueries</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-a0a09c66a20d878ec7683ae222c919fbe092b8001871ade7f455b89573ce0911">+27/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>http.rs</strong><dd><code>Add query flag parser for
is_ui_histogram</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-3b50a69c1ec2f63f8eebb5f9880e17826463a586768aed3e3e15242833609d6b">+8/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>Index.vue</strong><dd><code>UI: histogram streaming flow,
timeouts cleanup</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-0323c3da69b369843c5d72bf4df5b00ca6b5147192a213baf331659ecf92af62">+45/-12</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>IndexList.vue</strong><dd><code>Pass searchType=ui to
partition API</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-08f058f883b659e713e606991a7ea37ae1ff016b7cccef970489ab5840dc3d09">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>search.ts</strong><dd><code>API: support is_ui_histogram,
searchType plumbed</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-885ab872dbc6e7b20264df815e3ef4727f0abc86ce90d2fb47e4aff572814c75">+7/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>useStreamingSearch.ts</strong><dd><code>Include
is_ui_histogram in streaming URL</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-8fce3e25a161cd458e734bd9b1f98aadefe3482da7b6529a5b1f4fa20ec115e2">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>usePanelDataLoader.ts</strong><dd><code>Dashboard partition
calls pass searchType</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-5a42e9493a7bcd722b88e61fd38883c4f61001bc9cafa399f65f8eafda3aace9">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>3
files</summary><table>
<tr>
<td><strong>cacher.rs</strong><dd><code>Adjust tests for new response
fields</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-8c387b22b2c0a282600ee41ca702b3db60f5a284d507c0feb7418608ff062c6c">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>SearchResult.spec.ts</strong><dd><code>Skip flaky
resetPlotChart unit test</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-8ff7d14fc3cdac80eeec5550ecd89a77f015b4ebe928da9d4a76a9585d64d788">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>useLogs.spec.ts</strong><dd><code>Skip failing query
partitions test</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-842307ae8db03aa51891ddde98cfdbbabc712db1e1614c9eee99a59add395f70">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Error
handling</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>error_utils.rs</strong><dd><code>Map histogram
unavailability to 400 with code</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-d4de63bc9275a19c868f6967de0f7835bd2d7bda74ff55ce97b8fb3f9af54da9">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Miscellaneous</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>Export histogram SQL
module</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-dc0ab53d0ff551cf3cd12027c73d0da5e66680c0bf2d1830778639a33bac3464">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Bug
fix</strong></td><td><details><summary>2 files</summary><table>
<tr>
<td><strong>SearchResult.vue</strong><dd><code>UI: robust
empty-histogram handling and reset watcher</code>&nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-5e65533aa4754bb6d0074fda18ffc1ecacded3b9ca6bc28a161c3f6b12f20195">+17/-15</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>SearchBar.vue</strong><dd><code>Cancel running query before
applying saved view</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-81893de4edf186b0556f610acb280c87baa2ffe67d3b48a60a866094c7635baf">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>query.ts</strong><dd><code>Types: histogram interval and
eligibility fields</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-12dd5b3bb9741bbeaa348c0efbbd745d0a582899678738159c6927d34a35191d">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>2 files</summary><table>
<tr>
  <td><strong>fga.rs</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-e7c99f37f3abbb5e0507d2760bbf67df010d9218704b38dce84c5477acecd22e">+0/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>useLogs.ts</strong></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7909/files#diff-1040f61354f92711e0e77ed4e9bfa15586d45a94c7e2ab06cc37372068030e7b">+154/-168</a></td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___

---------

Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
2025-08-11 13:36:03 +05:30
Hengfei Yang 41d0d4acb6 fix: add more logs for flower (#7944)
### **User description**
- [x] Add more logs for flower
- [x] Optimize parquet footer cache calculate


___

### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Switch query partition strategy to enum

- Improve file stats cache size accuracy

- Add follower leader work-group and partition logs

- Minor consistent-hash refactor for clarity


___

### Diagram Walkthrough


```mermaid
flowchart LR
  CFG["Config Common.feature_query_partition_strategy (enum)"]
  STREAM["meta/stream QueryPartitionStrategy FromStr"]
  FLIGHT["search/cluster/flight uses enum directly"]
  FOLL["super_cluster/follower adds detailed logs"]
  HASH["cluster get_node_from_consistent_hash minor reorder"]
  CACHE["file_statistics_cache counts min/max/sum sizes"]

  STREAM -- "provides parser" --> CFG
  CFG -- "typed value" --> FLIGHT
  FLIGHT -- "strategy choice" --> FOLL
  CACHE -- "more accurate memory estimate" --> FLIGHT
  HASH -- "clarify flow" --> FLIGHT
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>6
files</summary><table>
<tr>
<td><strong>mod.rs</strong><dd><code>Precompute hash before node-set
access</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7944/files#diff-d15434a27e2b8406811f5a707b605203b603dad4a262c0642326be860bd2b568">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>config.rs</strong><dd><code>Make query partition strategy a
parsed enum</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7944/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+7/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>stream.rs</strong><dd><code>Add FromStr and default for
strategy enum</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7944/files#diff-2438d04c3fe97bc5452e5b74a303163b8723d93455cda32c95f0525435ad46bd">+8/-5</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>flight.rs</strong><dd><code>Use enum-config strategy
directly</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7944/files#diff-dbffb1a03b65f6a9163b18c5bb1241ba2966735657be39bbe9f4d0e3260d8c1d">+1/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>file_statistics_cache.rs</strong><dd><code>Include
min/max/sum sizes in cache estimate</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7944/files#diff-5b3f948f2ad04a6babe72c15365b95a284d0533720419fa5dc793aa379783a7d">+5/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>follower.rs</strong><dd><code>Add work-group wait and
partition logs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7944/files#diff-59e0cc386582cf8baf201977475fd9a7e479fd8ed000bbaa6746a51ecb28632f">+8/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Miscellaneous</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>lib.rs</strong><dd><code>Remove unused async_drop feature
gate</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7944/files#diff-b1a35a68f14e696205874893c07fd24fdb88882b47c23cc0e0c80a30c7d53759">+0/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-08-11 15:12:22 +08:00
Yashodhan JoshiandYashodhan Joshi a484a80d24 feat: cloud ingest event (#7893)
### **User description**
This adds two main changes : 
1. send an event to cloud_events stream whenever a new (log) stream gets
created in an organization
2. send an event to segment when an org created ~24hr before has not
ingested any data since.


___

### **PR Type**
Enhancement


___

### **Description**
- Extend CloudEvent struct with stream_name

- Emit StreamCreated on new stream ingestion

- Add periodic no-ingestion-reporting cloud job

- Implement get_admin helper for OrgUser


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["New stream write"] -- "detect new stream" --> B["Enqueue StreamCreated event"]
  C["Job initialization"] -- "start cloud job" --> D["report_org_no_ingestion loop"]
  D -- "filter 24h no ingestion" --> E["Send segment no-ingestion event"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody></tr></tbody></table>

</details>

___

---------

Signed-off-by: Yashodhan Joshi <yjdoc2@gmail.com>
Co-authored-by: Yashodhan Joshi <yjdoc2@gmail.com>
2025-08-11 11:11:00 +05:30
Hengfei Yang d8b6e14df6 chore: remove wal metrics to wal.rs (#7939)
### **PR Type**
Enhancement


___

### **Description**
Move parquet metrics collection to `wal.rs`
Expose `collect_wal_parquet_metrics` from ingester
Update job to call new metrics function
Minor imports and re-exports cleanup


___

### Diagram Walkthrough


```mermaid
flowchart LR
  writer["writer.rs: remove collect_parquet_metrics"] -- "responsibility moved" --> wal["wal.rs: add collect_wal_parquet_metrics"]
  wal -- "re-export function" --> lib["lib.rs: pub use wal::collect_wal_parquet_metrics"]
  job["job/metrics.rs: update_parquet_metrics"] -- "call new API" --> lib
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>lib.rs</strong><dd><code>Re-export new WAL metrics
collector</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/ingester/src/lib.rs

<ul><li>Re-export <code>collect_wal_parquet_metrics</code><br> <li>
Remove re-export of old <code>collect_parquet_metrics</code><br> <li>
Adjust writer public exports formatting</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7939/files#diff-603267e2f712eeb4bc46fdff981f1fad1f3a9d3b989a7db4b3c0984fc5b1ed43">+3/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>wal.rs</strong><dd><code>Add WAL parquet metrics
collection</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/ingester/src/wal.rs

<ul><li>Import <code>get_config</code> and <code>HashMap</code><br> <li>
Add <code>collect_wal_parquet_metrics</code> function<br> <li> Count
pending WAL parquet files by labels<br> <li> Set
<code>INGEST_PARQUET_FILES</code> gauge per org/stream</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7939/files#diff-8ba57e3a90cce57ceb88ea5215024c6d54473732bebdc7bf33847462379ec03e">+47/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>writer.rs</strong><dd><code>Remove parquet metrics from
writer</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/ingester/src/writer.rs

<ul><li>Remove <code>collect_parquet_metrics</code> function<br> <li>
Keep flushing logic intact</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7939/files#diff-d1a9b1542cc2758afe4fa67abd454dd818718f4e1c7570303519af5a58d6301f">+0/-52</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>metrics.rs</strong><dd><code>Update job to call new WAL
metrics API</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

src/job/metrics.rs

<ul><li>Switch to <code>ingester::collect_wal_parquet_metrics</code><br>
<li> Preserve error mapping and behavior</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7939/files#diff-ca98d90d1293682c98c33a777a653cf3c1466f6297969ae94a359bb81abca4b1">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-11 10:15:58 +08:00
udev 7cca606f16 feat: add metrics to count wal files in ingester (#7898)
### **PR Type**
Enhancement

other changes:
- change default of batch exporter to false
- update gitignore
___

### **Description**
- Add WAL file count gauge metric

- Implement and register collect_wal_metrics

- Invoke WAL metrics in job loop

- Disable batching exporter by default


___

### Diagram Walkthrough


```mermaid
flowchart LR
  WRITERS["In-memory writers"]
  IMMUTABLES["Rotated immutables"]
  COLLECT["collect_wal_metrics()"]
  METRIC["INGEST_WAL_FILES gauge"]
  JOB["job::update_wal_metrics()"]
  WRITERS -- "active WAL files" --> COLLECT
  IMMUTABLES -- "rotated WAL files" --> COLLECT
  COLLECT -- "set metric" --> METRIC
  JOB -- "calls" --> COLLECT
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>config.rs</strong><dd><code>Disable pipeline batch
exporter by default</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

src/config/src/config.rs

- Changed `ZO_PIPELINE_BATCH_ENABLED` default to false


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7898/files#diff-9aeee4a74c0520daa40f9b81c7016f5b6b3254375b968dd7598e745630980d62">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>metrics.rs</strong><dd><code>Add and register WAL files
metric</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/config/src/metrics.rs

<ul><li>Added <code>INGEST_WAL_FILES</code> gauge metric<br> <li>
Registered metric in registry</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7898/files#diff-950d37bdd77aa533539acd818a3fcdebd90ccb1f09acb5490b9c0f9b51cb2090">+15/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>immutable.rs</strong><dd><code>Expose get_key on
Immutable</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

src/ingester/src/immutable.rs

- Added `Immutable::get_key()` accessor


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7898/files#diff-eee941ce73df39e37edae4a98ba3ca679f2c61592ad3e5afa47eb7793c9b0410">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>lib.rs</strong><dd><code>Expose collect_wal_metrics in
lib</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/ingester/src/lib.rs

- Re-exported `collect_wal_metrics` in public API


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7898/files#diff-603267e2f712eeb4bc46fdff981f1fad1f3a9d3b989a7db4b3c0984fc5b1ed43">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>writer.rs</strong><dd><code>Implement
collect_wal_metrics in writer</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/ingester/src/writer.rs

<ul><li>Implemented <code>collect_wal_metrics()</code> function<br> <li>
Counts active and rotated WAL files<br> <li> Updates
<code>INGEST_WAL_FILES</code> metric</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7898/files#diff-d1a9b1542cc2758afe4fa67abd454dd818718f4e1c7570303519af5a58d6301f">+38/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>metrics.rs</strong><dd><code>Integrate WAL metrics in
job loop</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/job/metrics.rs

<ul><li>Added <code>update_wal_metrics()</code> function<br> <li>
Invoked WAL metrics in job loop when ingester</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7898/files#diff-ca98d90d1293682c98c33a777a653cf3c1466f6297969ae94a359bb81abca4b1">+13/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-10 22:33:30 +05:30
rajeshd3v b6ce17d27a feat: add ZO_ROUTE_STRATEGY env to choose between workload and random… (#7908) 2025-08-10 17:57:52 +08:00
Hengfei Yang 33eefb89f4 fix: result cache with func (#7934)
### **User description**
fix #7919


___

### **PR Type**
Bug fix


___

### **Description**
Avoid unwrap panic when ts column missing
Return default cache response when None
Preserve order_by in default response
Update result cache key with timestamp


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["check_cache: determine result_ts_col"] -- "was None" --> B["return default MultiCachedQueryResponse"]
  A -- "found ts col" --> C["use result_ts_col for cache key"]
  C -- "set discard_interval, file_path" --> D["proceed with caching logic"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>cacher.rs</strong><dd><code>Guard missing timestamp
column to avoid panic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/service/search/cache/cacher.rs

<ul><li>Replace unwrap on <code>result_ts_col</code> with safe
<code>else</code> early return.<br> <li> Return default
<code>MultiCachedQueryResponse</code> while preserving
<code>order_by</code>.<br> <li> Keep existing logic for wildcard and
aggregate checks.<br> <li> Ensure cache key includes interval and
timestamp when available.</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7934/files#diff-8c387b22b2c0a282600ee41ca702b3db60f5a284d507c0feb7418608ff062c6c">+8/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-09 10:33:42 +05:30
Hengfei Yang 3b9fe6f4a7 feat: add parquet cache size in status (#7929) 2025-08-09 09:39:20 +08:00
Loakesh IndiranandBhargav 1bd1caa10a fix: limit, hist_alignment by factors of 24 hrs, order_by (#7895)
### **User description**
Fixes:
- `total` count when limit is reached for limit queries in http2
streaming
- Search response to return an array of `order_by`
```
eg: [["x_axis", "asc"], ["y_axis", "asc"]]
```
- Check and validate the histogram interval provided either as a query
payload or the histogram query, to generate partitions in aligned 24 hr
manner to avoid duplicate.


___

### **PR Type**
Enhancement, Bug fix, Tests


___

### **Description**
- Add `order_by_metadata` to search responses

- Validate histogram intervals as 24h factors

- Fix total count after results truncation

- Implement frontend sorting with metadata


___

### Diagram Walkthrough


```mermaid
flowchart LR
  SQL["SQL generation"] -- "validate hist interval" --> R["Response (order_by metadata)"]
  R -- "merge response" --> C["Cache module"]
  R -- "set result" --> H["HTTP handler"]
  H -- "streaming data" --> S["Streaming exec"]
  S -- "apply sort metadata" --> U["Frontend UI"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody></tr></tbody></table>

</details>

___

---------

Co-authored-by: Bhargav <BJP232004@GMAIL.COM>
2025-08-08 17:50:20 +05:30
Hengfei Yang e98a9f953e feat: improve internal error report (#7917) 2025-08-08 19:41:09 +08:00
Huaijin 7b864c65ba fix: default ZO_INVERTED_INDEX_RESULT_CACHE_MAX_ENTRY_SIZE value (#7915) 2025-08-08 17:46:54 +08:00
Loakesh Indiran b4cdbddad0 fix: track_total_hits to consider multiple distinct cols (#7894)
### **User description**
## Problem Description

When using `SELECT DISTINCT` queries with multiple columns in
OpenObserve, the track total hits functionality was incorrectly counting
only the first column instead of all columns, and the response field
name was incorrect.

### Example Problem Query
```sql
SELECT DISTINCT unique_id, continent FROM oly WHERE continent = 'ASI'
```

### Issues Encountered

1. **Incorrect Count**: The track total hits was only counting distinct
values of the first column (`unique_id`) instead of distinct
combinations of all columns (`unique_id, continent`).

2. **DataFusion Error**: The original approach tried to use
`count(DISTINCT unique_id, continent)` which caused DataFusion to throw
an error:
   ```
"This feature is not implemented: COUNT DISTINCT with multiple
arguments"
   ```

## Solution

### Approach
Instead of trying to use `COUNT DISTINCT` with multiple arguments (which
DataFusion doesn't support), we now use a subquery approach:

**Before (causing errors):**
```sql
SELECT count(DISTINCT unique_id, continent) AS zo_sql_num FROM oly WHERE continent = 'ASI'
```

**After (DataFusion compatible):**
```sql
SELECT count(*) AS zo_sql_num FROM (SELECT DISTINCT unique_id, continent FROM oly WHERE continent = 'ASI')
```

## Tests

<img width="1802" height="1009" alt="image"
src="https://github.com/user-attachments/assets/ec302f65-9115-4584-a9de-a2a51cbad502"
/>

<img width="1804" height="1009" alt="image (18)"
src="https://github.com/user-attachments/assets/e38d9b51-afa8-4bfe-a61a-5f6fa1683eb7"
/>



## Testing

1. **Single column DISTINCT**:
   ```sql
   SELECT DISTINCT name FROM t WHERE name = 'a'
   ```
Expected: `SELECT count(*) AS zo_sql_num FROM (SELECT DISTINCT name FROM
t WHERE name = 'a')`

2. **Multiple columns DISTINCT**:
   ```sql
   SELECT DISTINCT unique_id, continent FROM oly WHERE continent = 'ASI'
   ```
Expected: `SELECT count(*) AS zo_sql_num FROM (SELECT DISTINCT
unique_id, continent FROM oly WHERE continent = 'ASI')`

3. **Three columns DISTINCT**:
   ```sql
SELECT DISTINCT unique_id, continent, bronze_medals FROM oly WHERE
continent = 'ASI'
   ```
Expected: `SELECT count(*) AS zo_sql_num FROM (SELECT DISTINCT
unique_id, continent, bronze_medals FROM oly WHERE continent = 'ASI')`


___

### **PR Type**
Bug fix, Tests


___

### **Description**
- Wrap DISTINCT queries in subquery for counting

- Simplify non-DISTINCT count to wildcard

- Remove unsupported COUNT DISTINCT arguments

- Add unit tests for DISTINCT cases


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Original DISTINCT query"]
  B["Wrapped subquery"]
  C["Count(*) AS zo_sql_num"]
  A -- "wrap" --> B
  B -- "count" --> C
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>track_total_hits.rs</strong><dd><code>Support
multi-column DISTINCT and tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/service/search/sql/rewriter/track_total_hits.rs

<ul><li>Use subquery wrapper for multi-column DISTINCT<br> <li> Simplify
count logic for non-DISTINCT queries<br> <li> Remove DuplicateTreatment
import<br> <li> Add unit tests for DISTINCT scenarios</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7894/files#diff-723facaa72e99da8a0736ca449529fe2395059d1196c54943c1622c7f99f29d5">+135/-40</a></td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-08 08:43:19 +05:30
Huaijin 646c6c681f feat: impl tantivy result cache (#7890) 2025-08-08 08:48:15 +08:00
sktrpathi 551633be76 fix: change updated_at AI prompts table to bigint (#7905)
### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Change `updated_at` column to bigint

- Update migration tests to expect bigint
2025-08-07 19:20:52 +05:30
Subhra264 2205775144 fix: enrichment table rewrite should not create compact jobs (#7841)
### **User description**
Enrichment table deletion should not create compact jobs, that is
because compaction is a background job, and until that happens, the
search on enrichment table is blocked. So, instead, we can directly
delete the file_lists when enrichment tables are deleted.


___

### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Directly delete enrichment file lists on rewrite

- Remove redundant compactor job creation

- Enhance logs with org_id and table name context

- Broadcast file list deletions in enterprise


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Rewrite enrichment table"] --> B["Compute time_range"]
  B --> C["delete_enrichment_table(...)"]
  C --> D["delete_from_file_list(...)"]
  D --> E["Compact service removes file lists"]
  D --> F{"Enterprise mode?"}
  F -- "yes" --> G["Broadcast delete event"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>retention.rs</strong><dd><code>Expose
delete_from_file_list in retention module</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/service/compact/retention.rs

<ul><li>Made <code>delete_from_file_list</code> public<br> <li> Exposed
file list deletion API</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7841/files#diff-6abd048f5ef4e7163cffbb51cb4bee10c07fb88b871469d5b3724f7cd04743dc">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>enrichment_table.rs</strong><dd><code>Add context-rich
logging for enrichment queries</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/service/db/enrichment_table.rs

<ul><li>Upgraded debug logs to info with org/name context<br> <li>
Included org_id and name in error logs</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7841/files#diff-6ce27ddf8a0d8b4e790bda90d088ff692a5da31a8d330beea8a9dd843294572b">+12/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>mod.rs</strong><dd><code>Refactor enrichment table
deletion workflow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/service/enrichment_table/mod.rs

<ul><li>Extended <code>delete_enrichment_table</code> with
<code>time_range</code><br> <li> Replaced compaction job creation with
file list deletion<br> <li> Added <code>delete_from_file_list</code>
helper implementation<br> <li> Added enterprise broadcast in helper</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7841/files#diff-3e2b6d3b8da1f9e73aca279052a97e683184d68256c23215b18ffee885836bbf">+83/-5</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>enrichment_table.rs</strong><dd><code>Handle enrichment
file list delete queue messages</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

src/super_cluster_queue/enrichment_table.rs

<ul><li>Added handler <code>process_file_list_delete</code> for
enrichment deletes<br> <li> Parses queue message and invokes file list
deletion</ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7841/files#diff-b1344df0b7cefa60532a15a4ef200ab95434dddd5aad98b16c48a5edf184a45d">+50/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Bug fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>stream.rs</strong><dd><code>Align stream delete with
retention jobs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

src/service/stream.rs

<ul><li>Added retention job creation in <code>delete_stream</code><br>
<li> Removed duplicate job creation in
<code>stream_delete_inner</code></ul>


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7841/files#diff-41452a7fb29b4634437174fd6aecf6a9050dbfdef41b9077a21d59af3d79e9ed">+19/-10</a>&nbsp;
</td>

</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>mod.rs</strong><dd><code>Register enrichment table
queue handler</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

src/super_cluster_queue/mod.rs

- Registered `on_enrichment_file_list_delete_msg` handler


</details>


  </td>
<td><a
href="https://github.com/openobserve/openobserve/pull/7841/files#diff-6ed0f1dd36b7216fffde573232a49869f247330ecb03b50f94b2ddd723742e46">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-08-07 17:37:23 +05:30
Huaijin 3a2378b6d8 fix: make insert task to query manager later (#7891)
after insert trace_id to query_manager, any error should not return
until we remove this tracd_id.
2025-08-07 18:54:08 +08:00
Loakesh Indiran 1ebd0679db feat: api to delete stream by time period (#7600) 2025-08-07 14:47:14 +05:30
sktrpathi b68015dd71 feat: prompt management (#7825)
### **PR Type**
Enhancement

___

### **Description**
- Add AI prompt meta config and model

- Create system_prompts table migration and entity

- Implement HTTP prompt CRUD endpoints

- Wire cluster-coordinator and super-cluster events
2025-08-07 13:49:48 +05:30
Hengfei Yang abacd62b5e feat: remove default partition key for traces (#7878) 2025-08-06 21:01:30 +08:00
udevandAshish Kolhe 1290512fe3 fix: SYNC optimize remote wal [phase 2] (#7664) (#7786)
### **User description**
Add separate envs for pipeline wal
Improve metrics


___

### **PR Type**
Enhancement


___

### **Description**
- Add batch buffering for pipeline WAL writes

- Schedule periodic buffer flush in enterprise mode

- Introduce env configs and metric labels

- Instrument WAL reader with timing logs


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["process_node"]
  B["group by batch_key"]
  C["BATCH_BUFFERS"]
  D["get_pipeline_wal_writer"]
  E["remote WAL"]
  F["accumulate"]
  G["pipeline flush task"]
  A -- "records" --> B
  B -- "add to buffer" --> C
  C -- "should_flush? yes" --> D
  D -- "write_wal" --> E
  C -- "should_flush? no" --> F
  G -- "flush_all_buffers" --> C
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody></tr></tbody></table>

</details>

___

---------

Co-authored-by: Ashish Kolhe <ashish.j.kolhe@gmail.com>
2025-08-06 16:47:02 +05:30
Shivank AnchalandYashodhan Joshi 408237472b feat: add enable_distinct_fields setting to StreamSettings (#7775)
Closes #7711

---------

Co-authored-by: Yashodhan Joshi <yashodhan@openobserve.ai>
2025-08-06 10:50:58 +05:30
Subhra264 5d4266b4ec fix: remove module key from zo_db_query_nums metrics (#7845) (#7850)
### **PR Type**
Enhancement


___

### **Description**
- Remove third 'key' label dimension in DB_QUERY_NUMS

- Update all with_label_values to two labels only

- Remove empty-string label arguments across modules

- Applies to file_list, db, scheduler, schema, and metrics config


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody></tr></tbody></table>

</details>

___
2025-08-05 17:34:29 +05:30
ktx-vaidehiandAshish Kolhe 45bac67dec feat: add run ID management and panel ID for dashboard refresh (#7760)
### **PR Type**
Enhancement


___

### **Description**
- Introduce DashboardInfo struct with run/panel/tab IDs

- Extract dashboard_info from HTTP requests

- Propagate dashboard_info in backend search & stats

- Frontend: manage runId state and include IDs in requests


___

### Diagram Walkthrough


```mermaid
flowchart LR
  FE["Frontend components"] 
  HTTPRequest["HTTP Request"]
  ExtractInfo["get_dashboard_info_from_request"]
  SearchService["SearchService::search"]
  UsageStats["report_request_usage_stats"]

  FE -- "include run/panel/tab IDs" --> HTTPRequest
  HTTPRequest -- "extract dashboard info" --> ExtractInfo
  ExtractInfo -- "pass DashboardInfo" --> SearchService
  SearchService -- "attach stats with info" --> UsageStats
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody></tr></tbody></table>

</details>

___

---------

Co-authored-by: Ashish Kolhe <ashish.j.kolhe@gmail.com>
2025-08-05 11:11:15 +05:30
Huaijin 682033437e chore: refactor sql.rs (#7846) 2025-08-05 12:18:20 +08:00
Huaijin 1a19d62694 chore: set ZO_INVERTED_INDEX_SKIP_THRESHOLD default to 35 (#7839) 2025-08-05 10:42:51 +08:00