Hi dev,

I would like to discuss this change with the community.

Motivation:
By this BlueGreenClusterMigration PIP-188(
https://github.com/apache/pulsar/pull/17962), `redirectedClusterURI` member
var has been introduced in the pulsar client to hold the new cluster's
endpoint. Accordingly, pulsar client also added a state of a map of
LookupService to lookup the migrated clusters. If redirectedClusterURI is
not null, then clients look up the mapped,
redirectedClusterURI->LookupService, when clients connect to migrated
brokers.

Proposal:
In fact, this logic can be simplified by directly updating the
existing lookup service's service url. Then, we don't need to track the new
lookup services in a separate map and remove `redirectedClusterURI`,
either.

Hers is the sample code for this proposal:
https://github.com/heesung-sn/pulsar/pull/59/

Pros:
- The removal of redirectedClusterURI and the lookup service map can
simplify the client code
- It works better with other logics: Bundle Transfer and
AutoClusterFailover, as these features currently only use the original
lookup service.

Cons:
- To consume backlog from the blue (old) cluster, new clients need to be
created with the old service url(pointing to the old cluster) because the
existing clients' lookup service will be already updated, pointing to the
new cluster.

However, I think this(requiring a new client with old service url, old
cluster) makes sense because all of the existing pub/sub will anyway be
reconnected to the new clusters as per the broker's close commands. So, to
consume the backlog from the old cluster, new client applications need to
start with the old service url anyway.

Example:
https://github.com/heesung-sn/pulsar/pull/59/files#diff-3c745333eaeae9e8a87e92495fbf97b7c952c034b8c18ca92156f07cd5b1f5afR308-R312

Thanks,
Heesung

Reply via email to