pulsarAdmin.topicPolicies().setOffloadPolicies 方法设置 topic 级别分层存储策略异常

设置分层存储 topic 级别策略时,服务端进行处理的时候会更新每个分区的 manager 配置,在更新之前会去校验当前分区所在的 bundle 是否属于当前 broker,这里就有个问题,因为多 broker 集群中不是所有 topic 分区都在一个 broker 上,所以在校验时就必然会出现下面的异常:

org.apache.pulsar.broker.service.BrokerServiceException$ServiceUnitNotReadyException: Namespace bundle for topic (persistent://ys/ys1/topic1-partition-1) not served by this instance. Please redo the lookup. Request is denied: namespace=ys/ys1

我之前设置offload策略时,是设置在namespace级别的,pulsar-admin的命令看在namespaces上可以设置offload-threshhold, topic级别应该还不支持。

$ bin/pulsar-admin namespaces |grep offload
    get-offload-threshold      Get offloadThreshold for a namespace
      Usage: get-offload-threshold tenant/namespace
    set-offload-threshold      Set offloadThreshold for a namespace
      Usage: set-offload-threshold [options] tenant/namespace
            before data will start being automatically offloaded to longterm
            namespace default. Negative values disable automatic offload. 0
            triggers offloading as soon as possible.

[quote=“xiaoshuoyou, post:3, topic:381”]
我是直接调接口设置的,现在已经确定pusarAdmin.topicPolicies().setOffloadPolicies()方法设置分层存储策略是有bug的。下图圈出来的部分,在更新分区级的策略时候会去校验所有分区是否是当前broker管理的,对于分区分布在不同broker上的topic来说,这里一定就会出现异常: org.apache.pulsar.broker.service.BrokerServiceException$ServiceUnitNotReadyException: Namespace bundle for topic (persistent://ys/ys1/topic1-partition-1) not served by this instance. Please redo the lookup. Request is denied: namespace=ys/ys1

@xiaoshuoyou 明确 BUG 也能定位到原因,可以直接在代码仓库上起个 issue 或者直接 PR :smiley: