#9079
1. A view was saved while the histogram was being loaded, which
incorrectly hardcoded the loadingHistogram flag as true in the saved
view data.
2. When this saved view was later loaded, the true value of
loadingHistogram was retrieved.
3. This pre-existing true state bypassed the histogram loading logic and
resulted in an incorrect call to the get page count.
https://github.com/openobserve/openobserve/pull/8876 had made
this variable private, resulting in failed enterprise builds.
It also removed one of the imports causing build failure.
This commit reverts those specific changes.
- Fix panic on path canonicalization in check_has_pending_files()
- Implement proper recursive directory checking for parquet files
- Add exponential backoff to draining loop (50ms -> 1s)
- Validate query parameter strictly in enable endpoint to prevent accidental node disablement
These changes address critical robustness issues identified in the code review:
1. Prevents potential panics during shutdown when WAL path is missing
2. Ensures correct pending file detection instead of assuming all subdirectories have files
3. Reduces CPU usage during drain with exponential backoff
4. Prevents unintentional node disablement from invalid/missing parameters
Implements cloud-agnostic graceful shutdown mechanism to support
Kubernetes preStop hooks and other orchestration platforms.
Changes:
- Add IS_INGESTER_DRAINING global flag with atomic operations
- Enhance /enable?value=false to trigger flush and set draining mode
- Add /drain_status endpoint to monitor shutdown readiness
- Modify parquet upload job to prioritize draining mode
- Exit upload loop when all files are uploaded to S3
API Usage:
- PUT /node/enable?value=false - Initiates drain (flushes memory, sets flag)
- GET /node/drain_status - Returns readyForShutdown status
Benefits:
- Eliminates fixed 900s wait in Helm charts
- Cloud-agnostic (works with K8s, ECS, Docker Swarm, systemd)
- Data-safe: ensures all WAL files uploaded before shutdown
There is a potential deadlock of usage report, it will resend to queue
when ingest failed. but if the queue is full, the resend will block and
waiting consume, but the consumer is itself, then it deadlock.
I saw a lot of logs like this:
```
DEBUG openobserve::service::db::schema: [Schema:watch] Received event: Put(EventData { key: "/schema/default/metrics/http_server_duration", value: Some(b""), start_dt: None
```
This PR optimized the metadata check logic also try to debug this case.
resolves https://github.com/openobserve/openobserve/issues/8991
### Summary
- Introduces `is_background()` method in `SearchEventType`.
- Identifies **Alerts**, **Reports**, and **DerivedStreams** as
background tasks.
- Routes these tasks to a dedicated **`BACKGROUND`** work group.
1. Verify stream detail access and index type options - Test stream
navigation and available configuration options
2. Verify validation error when selecting both index types - Test
business rule enforcement for conflicting field configurations
3. Verify index type clearing mechanism works - Test ability to clear
field index selections after validation errors
Backend:
- Add `stream_name` parameter to service graph query API for multi-stream filtering
- Pass `stream_name` through `handle_otlp_request` to service graph tracking
- Filter Prometheus metrics by both `org_id` and optional `stream_name`
- Update API documentation with stream filtering examples
Frontend:
- Add tree view and graph view visualization modes with toggle
- Implement tree layouts: horizontal, vertical, and radial
- Implement graph layouts: force-directed and circular
- Add stream selector dropdown to filter metrics by trace stream
- Add auto-refresh toggle with configurable interval (5-300 seconds)
- Refactor graph rendering to use `ChartRenderer` component with ECharts
- Implement D3-force physics simulation for force-directed layout
- Add `convertServiceGraphToTree` and `convertServiceGraphToNetwork` utilities
- Preserve node positions during graph updates to prevent re-layout jitter
- Use incremental updates (`notMerge: false`) for stable graph view
- Store user preferences (visualization type, layout, stream filter) in localStorage
- Update `ChartRenderer` to respect `notMerge` and `lazyUpdate` flags from props
Dependencies:
- Add `d3-force` for force-directed graph layout calculations
- Add `@types/d3-force` for TypeScript support
- Add `d3-quadtree` for spatial indexing in force simulation
Currently in the alert manager, we run a keep alive thread for every
scheduled job pulled, so that if the timeout for the job is near and the
job is still in progress, we can increase the timeout a bit so that the
job can complete. But in edge cases, if the job itself is complete, but
the keep-alive thread is still not stopped, it will keep running the
keep alive thread forever.
Hence, a limit is added to the keep alive thread, so that it stops after
the timeout.
# PR Type
Enhancement
# Description
The columns in the Alerts and Pipelines History are augmented to be
sortable. The backend endpoint is updated accordingly too.
---------
Co-authored-by: sai nikhil kethe <nikhil@openobserve.ai>
1. Field List schema tabs were getting disabled due to warning message
when searching for non-existing fields.
2. Reset scroll position on changing field-list schema tab.
3. Parse decimal values to whole numbers that are added in the Date Time
custom value input.
1. Here we have refactored import module
the structure will be
```
BaseImport will be main serving component for Import UI
import(module).vue will be used to serve core business logic and functionality
```
1. This PR fixed the sync issue on all listing pages alerts , piplines ,
actions , reports , iam pages , destinations , templates , sensitive
data redaction list , cipher keys
with this PR we add OR operator support in pipeline conditions along
with the ability to nest conditions, creating complex conditions
quickly. existing conditions will be treated as legacy conditions and
still be honoured in the new evaluation logic.