apache / apache/pulsar-client-cpp

[Feature] Port SameAuthParamsLookupAutoClusterFailover from Java client to C++

未关闭
#571 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
C++
星标
71
派生
90
平均合并
2 小时 33 分钟
30 天内合并 PR
3

描述

## Motivation

The Java client introduced `SameAuthParamsLookupAutoClusterFailover` in apache/pulsar#23129 (merged August 2024, released in Pulsar 4.0.0 and backported to 3.0.7 / 3.3.2). This `ServiceUrlProvider` implementation addresses a well-known reliability gap in `AutoClusterFailover` that is particularly relevant to geo-replication deployments sitting behind a Pulsar Proxy.

**The problem with `AutoClusterFailover`**: its health probe is a raw TCP connection. In a typical deployment where a Pulsar Proxy fronts the brokers, the TCP probe succeeds as soon as the proxy accepts the connection — even if all brokers behind the proxy have crashed. This means `AutoClusterFailover` cannot detect broker-layer failure and may reconnect clients to a cluster that is not actually serving requests.

**What `SameAuthParamsLookupAutoClusterFailover` does differently**:
- Probes cluster health via a **topic lookup** (`getBroker()` on a configurable test topic) rather than a raw TCP connection. A broker that can respond to a lookup is demonstrably processing requests — the proxy cannot mask broker failure here.
- Introduces a **hysteresis state machine** with separate `failoverThreshold` and `recoverThreshold` counters (default 5 each), requiring consecutive failures before cutting over and consecutive successes before switching back. This prevents flapping without requiring a coarse `switchBackDelay` timer.
- Targets geo-replication topologies where all clusters share the same authentication credentials, which is the common case.

## Request

Port `SameAuthParamsLookupAutoClusterFailover` to the C++ client.

The `ServiceInfoProvider` interface is already part of the C++ public API (`include/pulsar/ServiceInfoProvider.h`), and `AutoClusterFailover` is already implemented against it — so the interface contract is defined and the pattern is established. The Java implementation ([`SameAuthParamsLookupAutoClusterFailover.java`](https://github.com/apache/pulsar/blob/master/pulsar-client/src/main/java/org/apache/pulsar/client/impl/SameAuthParamsLookupAutoClusterFailover.java)) serves as a direct reference.

## Impact

The C++ client is the foundation for the Node.js client binding. Once `SameAuthParamsLookupAutoClusterFailover` is available in C++, it can be surfaced to Node.js consumers as well — a client language that currently has no automatic failover support at all.

This would bring C++ and Node.js deployments to parity with Java on the most important `AutoClusterFailover` reliability fix for proxy-fronted geo-replication clusters.

## References

- apache/pulsar#23129 — original Java implementation and motivation
- `include/pulsar/ServiceInfoProvider.h` — existing C++ interface
- `lib/AutoClusterFailover.cc` — existing C++ `AutoClusterFailover` implementation (reference for structure)

贡献指南

打开贡献指南

调研方向

从 lib/AutoClusterFailover.cc 和 include/pulsar/ServiceInfoProvider.h 开始,了解现有的 C++ 结构和接口契约,然后将它们与 SameAuthParamsLookupAutoClusterFailover.java 进行比较。当 C++ 客户端提供所请求的 topic-lookup 健康探测、分别用于 failover 和恢复的阈值,以及共享的身份验证参数行为时,即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
cpp, java
领域
distributed-systems
Issue 类型
功能
难度
4/5
预计耗时
3-5 天
活跃度
冷清
描述清晰度
基本清楚
新手友好度
58/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。