Skip to content

[BUG] PPL Monitor fails with ReceiveTimeoutTransportException (~60s) when scheduled but succeeds when executed manually #2190

Description

@c0depirate69

Describe the bug

We are encountering a consistent timeout issue when running PPL monitors in Alerting. The monitor executes successfully when triggered manually (via Dev Tools), but fails when executed on schedule with a ReceiveTimeoutTransportException.

This suggests a transport-level timeout (default ~60s) that cannot be configured via cluster or PPL settings.


Error

{
  "error_message": "Failed to run PPL Monitor Npy68p0Bs4ku8IPEc884, PPL Trigger m5y58p0Bs4ku8IPEPrOS: ReceiveTimeoutTransportException[[opensearch-cluster-warm-nodes-3][x.x.x.x:9300][cluster:admin/opensearch/ppl] request_id [58894985] timed out after [60040ms]]"
}

Observed Behavior

  • ✅ Manual execution via Dev Tools:

    • PPL query completes successfully
    • No timeout occurs
  • ❌ Scheduled execution (Alerting):

    • Fails consistently at ~60 seconds
    • Throws ReceiveTimeoutTransportException

Related component

No response

To Reproduce

Create a scheduled ppl monitor that takes longer than 60 sec to execute

Expected behavior

  • Scheduled executions should behave the same as manual executions
  • The transport timeout should either:
    • Be configurable, or
    • Be aligned with PPL/query execution expectations
  • Long-running PPL queries should not fail due to transport-layer timeout while still executing

Additional Details

Investigation Summary

We traced this to the use of:

org.opensearch.sql.plugin.transport.TransportPPLQueryRequest

Key findings:

  • TransportPPLQueryRequest does not include any timeout field
  • ActionRequest (parent class) also does not support timeouts
  • The timeout comes from the transport layer (TransportService.sendRequest)
  • The failure occurs at ~60s → likely default TransportRequestOptions timeout

We attempted:

  • Increasing all PPL-related timeouts
  • Adjusting cluster settings (search.default_search_timeout, search.cancel_after_time_interval)
  • Tuning query complexity

None affected the issue.


Root Cause (Hypothesis)

The Alerting plugin likely executes PPL queries internally using a transport call similar to:

transportService.sendRequest(...)

without overriding timeout:

TransportRequestOptions.builder().withTimeout(...)

This results in:

  • Default timeout (~60s)
  • Hard failure even if query continues running

Why this is problematic

  • Users cannot configure this timeout
  • Behavior differs between:
    • Manual execution
    • Scheduled monitor execution
  • Leads to:
    • False alert failures
    • Inconsistent system behavior

Suggested Fix

One of the following:

Option 1 (preferred)

Allow configuring transport timeout for PPL execution in Alerting:

  • e.g. monitor-level setting:
    "transport_timeout": "120s"

Option 2

Increase default timeout for PPL execution in Alerting internally

Option 3

Use a different execution mechanism that:

  • Avoids strict transport timeout coupling
  • Or supports async execution with polling

Option 4

Propagate timeout from monitor configuration → PPL execution layer


Impact

  • Makes PPL monitors unreliable for large datasets or longer queries
  • Forces users to:
    • Reduce query scope artificially
    • Or modify OpenSearch source code to increase timeout

Environment

  • OpenSearch version: 3.5
  • Alerting plugin version: 3.5
  • SQL/PPL plugin version: 3.5

Request

Please provide:

  • A way to configure transport timeout for PPL execution in Alerting
    OR
  • Increase/remove the hardcoded/default timeout behavior

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    Status
    🆕 New

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions