+1 non-binding
-- 
Best Regards!
crossoverJie

Tao Jiuming <[email protected]> 于2026年10月29日周四 20:51写道:

> +1
>
> Hang Chen <[email protected]> 于2026年10月29日周四 12:45写道:
>
> > Hi Pulsar community,
> >
> > I'd like to start a discussion on PIP-500: Get all topic-level
> > policies with a single admin call.
> >
> > PIP PR: https://github.com/apache/pulsar/pull/27174
> >
> > Problem
> > -------
> > Today there is no way to read all the policies set on a topic in one
> > call. The admin
> > interface has 28 distinct topic-policy getters, so reading a topic's
> > full configuration takes
> > about 28 REST requests, and the results are not a consistent snapshot.
> > At namespace level
> > this already exists ("pulsar-admin namespaces policies"), and for
> > topics there is already
> > "topicPolicies delete", which removes all policies of a topic, but
> > nothing that reads them.
> > This makes debugging, auditing, cloning a topic's configuration and
> > external metadata
> > catalogs/scrapers harder than necessary.
> >
> > Proposal
> > --------
> > * REST: GET
> > /admin/v2/persistent/{tenant}/{namespace}/{topic}/policies?isGlobal=...
> >   This pairs with the existing DELETE on the same path. It returns the
> > policies explicitly
> >   set on the topic for the local or the global scope (an empty object
> > if none are set).
> > * Admin API: TopicPolicies#getTopicPolicies(topic) and
> > getTopicPoliciesAsync(topic).
> > * CLI: pulsar-admin topicPolicies get <topic> [-g], pairing with the
> > existing "delete".
> > * Authorization: READ on PolicyName.ALL, the same as "namespaces
> > policies". It has the same
> >   validation as the existing per-policy getters (405 if topic-level
> > policies are disabled,
> >   412 for a partition name, 404 for a missing topic, redirect to the
> > owning broker).
> > * No metrics, configuration or binary protocol changes. The change is
> > additive. An older
> >   broker returns 405 for the new call.
> >
> > Two points I'd especially like feedback on
> > ------------------------------------------
> > 1. --applied is left out of the first version. "Applied" is
> > implemented separately in each
> >    REST handler (for example retention falls back topic -> namespace
> > -> broker default), 6 of
> >    the 28 getters have no applied variant at all, and
> > HierarchyTopicPolicies only covers part
> >    of the policies and only inside a loaded topic. An applied view
> > also needs a response
> >    model that says where each value came from, because TopicPolicies
> > uses null to mean "not
> >    set on the topic". The effective value stays available per policy with
> >    "get-xxx --applied". The PIP lists the alternatives and the cost of
> > each.
> > 2. The Java admin API returns an untyped Map<String, Object>. The
> > broker's TopicPolicies
> >    class lives in pulsar-common, which pulsar-client-admin-api cannot
> > depend on (it also
> >    uses the CommandSubscribe.SubType protocol enum), so the admin API
> > cannot return it
> >    directly. A map keeps the API small and returns new policies
> > without an API change. A
> >    typed accessor could be added later under a different name. The PIP
> > discusses the
> >    alternatives (an interface in the admin API implemented by
> > TopicPolicies, or returning a
> >    JSON string).
> >
> > An implementation is ready for review in a separate PR:
> > https://github.com/apache/pulsar/pull/27175
> >
> > Please share your thoughts, concerns and suggestions.
> >
> > Best,
> > Hang
> >
>

Reply via email to