apache / apache/pulsar-client-cpp

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

Aberta
#571 0 comentários 0 reações 0 responsáveis Ver no GitHub
Linguagem predominante
C++
Estrelas
71
Forks
91
Merge médio
2h 33min
PRs com merge (30d)
3

Descrição

## 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)

Guia de contribuição

Abrir o guia de contribuição

Direção de pesquisa

Comece por lib/AutoClusterFailover.cc e include/pulsar/ServiceInfoProvider.h para entender a estrutura C++ existente e o contrato da interface; em seguida, compare-os com SameAuthParamsLookupAutoClusterFailover.java. O trabalho estará concluído quando o cliente C++ fornecer a sondagem de integridade solicitada para a consulta de tópicos, limites separados para failover e recuperação e um comportamento compartilhado para os parâmetros de autenticação.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
cpp, java
Domínio
distributed-systems
Tipo de issue
Funcionalidade
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Pouca atividade
Clareza
Razoavelmente clara
Facilidade para iniciantes
58/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.