Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
63da8be
fix(gcp_pubsub source): recover from stalled streams and reduce error…
SamyDjemai Jul 20, 2026
54108a4
chore(gcp_pubsub source): drop low-value decision unit tests
SamyDjemai Jul 20, 2026
40b224b
enhancement(gcp_pubsub source): align HTTP/2 keepalive with vector si…
SamyDjemai Jul 20, 2026
7e6e1a0
docs(gcp_pubsub source): note configurable keepalive in changelog
SamyDjemai Jul 20, 2026
9a610ca
Merge branch 'master' into fix/gcp-pubsub-stalled-stream
SamyDjemai Jul 20, 2026
8307a03
fix(gcp_pubsub source): address stalled-stream review feedback
SamyDjemai Jul 21, 2026
47479d3
Merge branch 'master' into fix/gcp-pubsub-stalled-stream
SamyDjemai Jul 21, 2026
1f0b4d2
fix(gcp_pubsub source): address second round of review feedback
SamyDjemai Jul 21, 2026
d45eddc
fix(gcp_pubsub source): address third round of review feedback
SamyDjemai Jul 21, 2026
5526793
fix(gcp_pubsub source): don't block the select loop on ack sends
SamyDjemai Jul 23, 2026
bc31918
fix(gcp_pubsub source): keep reporting fetch errors past the threshold
SamyDjemai Jul 23, 2026
3f992d5
fix(gcp_pubsub source): make the auto-ack send non-blocking too
SamyDjemai Jul 23, 2026
a4e78d7
fix(gcp_pubsub source): bound streaming-pull startup with the idle ti…
SamyDjemai Jul 23, 2026
c2e578a
fix(gcp_pubsub source): forward acks on a dedicated worker task
SamyDjemai Jul 27, 2026
66e33f9
Merge branch 'master' into fix/gcp-pubsub-stalled-stream
SamyDjemai Jul 27, 2026
c6cc12f
fix(gcp_pubsub source): forward acks on a worker with bounded backpre…
SamyDjemai Jul 27, 2026
3196b32
fix(gcp_pubsub source): fix ack worker lifecycle and main-loop blocking
SamyDjemai Jul 27, 2026
7b4d182
fix(gcp_pubsub source): bound ack worker lifetime and unify error thr…
SamyDjemai Jul 27, 2026
4ce2770
fix(gcp_pubsub source): tidy ack error handling and shutdown wakeup
SamyDjemai Jul 27, 2026
119f7d9
fix(gcp_pubsub source): count pending ack before publishing to finalizer
SamyDjemai Jul 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions changelog.d/19418_gcp_pubsub_idle_reconnect.fix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
The `gcp_pubsub` source no longer floods the logs with misleading errors on idle, low-volume, or bursty subscriptions. GCP routinely ends a streaming pull with a transient error (such as an `Unavailable` status when there are simply no messages to deliver), which Vector retries automatically. These transient failures are now logged at `debug`, and a `failed_fetching_events` component error is only emitted once several failures occur in a row without any successful fetch in between. The threshold is configurable via the new `max_retry_errors` option (default `5`); a successful fetch resets the counter.

The source is also more resilient to connections that silently break and stop delivering messages until Vector is restarted:

- HTTP/2 keepalive pings are sent on the gRPC connection so a dead-but-open connection is detected and torn down instead of hanging. The ping interval and timeout are configurable via the new `keepalive` option.
- Acknowledgements are sent on a dedicated task, so a backed-up request stream applies backpressure instead of stalling message processing.
- A new `idle_timeout_secs` option (defaulting to `900`) restarts the stream if no activity is seen on an active connection within that window.
Comment thread
SamyDjemai marked this conversation as resolved.

authors: SamyDjemai
9 changes: 9 additions & 0 deletions lib/vector-config/src/external/serde_with.rs
Original file line number Diff line number Diff line change
Expand Up @@ -143,3 +143,12 @@ impl Configurable for Option<serde_with::DurationMilliSeconds<u64, serde_with::f
generate_optional_schema(&u64::as_configurable_ref(), generator)
}
}

impl Configurable for Option<serde_with::DurationSecondsWithFrac<f64, serde_with::formats::Strict>> {
fn generate_schema(generator: &RefCell<SchemaGenerator>) -> Result<SchemaObject, GenerateError>
where
Self: Sized,
{
generate_optional_schema(&f64::as_configurable_ref(), generator)
}
}
Loading
Loading