Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PIP-183: Reduce unnecessary REST call in broker #16422

Open
AnonHxy opened this issue Jul 6, 2022 · 4 comments
Open

PIP-183: Reduce unnecessary REST call in broker #16422

AnonHxy opened this issue Jul 6, 2022 · 4 comments

Comments

@AnonHxy
Copy link
Contributor

AnonHxy commented Jul 6, 2022

Motivation

The design of admin API now is such that: when handle a partitioned topic request, the broker will query the topic's partition meta, and then use the internal admin client to query all the non-partitioned topics (I.e. the suffix of the topic name is -partition-),
even if the non-partitioned topic is owned by the broker, which will cause unnecessary REST call in the broker.

we can call the methods directlly, who handle the non-partitioned topic, to reduce the unnecessary REST call.

Goal

  • Try to call the methods directlly if the non-partitioned topic is owned by the broker

Implementation

  • We need to check all the place where org.apache.pulsar.broker.PulsarService#getAdminClient is invoked in org.apache.pulsar.broker.admin.impl.PersistentTopicsBase

  • take internalGetPartitionedStats for example:

    • Original:
   for (int i = 0; i < partitionMetadata.partitions; i++) {
                try {
                    topicStatsFutureList
                            .add(pulsar().getAdminClient().topics().getStatsAsync(
                                    (topicName.getPartition(i).toString()), getPreciseBacklog, subscriptionBacklogSize,
                                    getEarliestTimeInBacklog));
                } catch (PulsarServerException e) {
                    asyncResponse.resume(new RestException(e));
                    return;
                }
            }
  • Suggest to do like this:
for (int i = 0; i < partitionMetadata.partitions; i++) {
             TopicName topicNamePartition = topicName.getPartition(i);
             topicStatsFutureList.add(
                 pulsar().getNamespaceService().isServiceUnitOwnedAsync(topicName)
                     .thenCompose(owned -> {
                         if (owned) {
                             // local call
                             return getTopicReferenceAsync(topicNamePartition)
                                 .thenCompose(topic ->
                                     topic.asyncGetStats(getPreciseBacklog, subscriptionBacklogSize,
                                         getEarliestTimeInBacklog));
                         } else {
                             // call from admin client
                             try {
                                 pulsar().getAdminClient().topics().getStatsAsync(topicNamePartition.toString()),
                                     getPreciseBacklog, subscriptionBacklogSize, getEarliestTimeInBacklog)
                             } catch (PulsarServerException e) {
                                 throw new RestException(e);
                             }
                         }
                     })
             );
@AnonHxy AnonHxy changed the title PIP-181: Reduce unnecessary REST call between brokers PIP-181: Reduce unnecessary REST call in broker Jul 6, 2022
@HQebupt
Copy link
Contributor

HQebupt commented Jul 7, 2022

@AnonHxy We have a conflict in the PIP number here. Could you please change the number ?
#16274
#16250

@Jason918 Jason918 changed the title PIP-181: Reduce unnecessary REST call in broker PIP-183: Reduce unnecessary REST call in broker Jul 7, 2022
@Jason918
Copy link
Contributor

Jason918 commented Jul 7, 2022

@AnonHxy changed to 183

@AnonHxy
Copy link
Contributor Author

AnonHxy commented Jul 7, 2022

Thanks @Jason918 @HQebupt

@github-actions
Copy link

github-actions bot commented Aug 7, 2022

The issue had no activity for 30 days, mark with Stale label.

@github-actions github-actions bot added the Stale label Aug 7, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants