> How about set `isDurable = false` when create `NonPersistentSubscription`?

We could directly delete the `isDurable` in this constructor. There
will be no durable subscriptions on the non-persistent topic anymore.

>  When the topic is non-persistent and uses durable to subscribe, print warns 
> logs: “non-persistent not support durable subscribe will use non-durable to 
> subscribe.”

Printing warn log makes sense to me.

Thanks,
Zike Yang

On Thu, Feb 9, 2023 at 3:44 PM Baodi Shi <ba...@apache.org> wrote:
>
> Agree, and we can add verification on the client side. When the topic is
> non-persistent and uses durable to subscribe, print warns logs:
> “non-persistent not support durable subscribe will use non-durable to
> subscribe.”
>
>
>
> Thanks,
> Baodi Shi
>
> 在 2023年2月9日 15:10:12 上,Jiuming Tao <jm...@streamnative.io.invalid> 写道:
>
> > Agree. But we need to take care of the compatibility. How do we handle
> >
> > this compatibility?
> >
> >
> > How about set `isDurable = false` when create `NonPersistentSubscription`?
> >
> > In `NonPersistentSubscription`, we can change the constructor from
> > ```
> >    public NonPersistentSubscription(NonPersistentTopic topic, String
> > subscriptionName, boolean isDurable,
> >    Map<String, String> properties) {
> >        this.topic = topic;
> >        this.topicName = topic.getName();
> >        this.subName = subscriptionName;
> >        this.fullName = MoreObjects.toStringHelper(this).add("topic",
> > topicName).add("name", subName).toString();
> >        IS_FENCED_UPDATER.set(this, FALSE);
> >        this.lastActive = System.currentTimeMillis();
> >        this.isDurable = isDurable;
> >        this.subscriptionProperties = properties != null
> >                ? Collections.unmodifiableMap(properties) :
> > Collections.emptyMap();
> >    }
> >
> > ```
> >
> > to:
> >
> > ```
> >    public NonPersistentSubscription(NonPersistentTopic topic, String
> > subscriptionName,
> >    Map<String, String> properties) {
> >        this.topic = topic;
> >        this.topicName = topic.getName();
> >        this.subName = subscriptionName;
> >        this.fullName = MoreObjects.toStringHelper(this).add("topic",
> > topicName).add("name", subName).toString();
> >        IS_FENCED_UPDATER.set(this, FALSE);
> >        this.lastActive = System.currentTimeMillis();
> >        this.isDurable = false;
> >        this.subscriptionProperties = properties != null
> >                ? Collections.unmodifiableMap(properties) :
> > Collections.emptyMap();
> >    }
> >
> > ```
> >
> > In the broker side, for non-persistent topic, there is no durable
> > subscriptions.
> > In the client side, users don’t need to change their code.
> >
> > Thanks,
> > Tao Jiuming
> >
> > 2023年2月9日 15:01,Zike Yang <z...@apache.org> 写道:
> >
> >
> > > It makes sense, for non-persistent topic, it should not create a durable
> > subscription.
> >
> >
> > Agree. But we need to take care of the compatibility. How do we handle
> >
> > this compatibility?
> >
> >
> > BR,
> >
> > Zike Yang
> >
> >
> > On Thu, Feb 9, 2023 at 2:43 PM Jiuming Tao
> >
> > <jm...@streamnative.io.invalid> wrote:
> >
> > >
> >
> > >> We can add validation to inform the user that a durable subscription on
> > a
> >
> > >> non-persistent topic is invalid.
> >
> > >
> >
> > > It makes sense, for non-persistent topic, it should not create a durable
> > subscription.
> >
> > >
> >
> > > Thanks,
> >
> > > Tao Jiuming
> >
> > >
> >
> > >> 2023年2月8日 23:06,Baodi Shi <ba...@apache.org> 写道:
> >
> > >>
> >
> > >>>
> >
> > >>> But it seems that currently all Durable subscriptions on
> >
> > >>>
> >
> > >> non-persistent topics are NonDurable, and I wonder if that confuses
> >
> > >>> users.
> >
> > >>>
> >
> > >>
> >
> > >> We can add validation to inform the user that a durable subscription on
> > a
> >
> > >> non-persistent topic is invalid.
> >
> > >>
> >
> > >>
> >
> > >> Thanks,
> >
> > >> Baodi Shi
> >
> > >>
> >
> > >>
> >
> > >> 在 2023年2月8日 10:48:32 上,Zike Yang <z...@apache.org> 写道:
> >
> > >>
> >
> > >>> I agree to remove all subscriptions when there're no consumers on the
> >
> > >>> non-persistent topic. The configuration
> >
> > >>> `subscriptionExpirationTimeMinutes ` should not take effect on the
> >
> > >>> non-persistent topic.
> >
> > >>>
> >
> > >>> But it seems that currently all Durable subscriptions on
> >
> > >>> non-persistent topics are NonDurable, and I wonder if that confuses
> >
> > >>> users.
> >
> > >>>
> >
> > >>>> But for `NonPersistentDispatcherMultipleConsumers`,
> >
> > >>> `NonPersistentStickyKeyDispatcherMultipleConsumers`, I’m not sure that
> >
> > >>> if it matters when  we auto delete the subscriptions which has no
> >
> > >>> consumers connected.
> >
> > >>>
> >
> > >>> It doesn't matter IMO.
> >
> > >>>
> >
> > >>> Thanks,
> >
> > >>> Zike Yang
> >
> > >>>
> >
> > >>>
> >
> > >>>
> >
> > >>> Zike Yang
> >
> > >>>
> >
> > >>> On Tue, Feb 7, 2023 at 9:22 PM Jiuming Tao
> >
> > >>> <jm...@streamnative.io.invalid> wrote:
> >
> > >>>
> >
> > >>>
> >
> > >>>> I think we are talking about the durable subscription of the
> >
> > >>> non-persistent
> >
> > >>>
> >
> > >>>> topic, right?
> >
> > >>>
> >
> > >>>
> >
> > >>> Yes, non-durable subscriptions created by Reader, if the reader
> >
> > >>> disconnected, the subscription will be deleted automatically.
> >
> > >>>
> >
> > >>>
> >
> > >>>
> >
> > >>> For `NonPersistentDispatcher`, it has the following implementations:
> >
> > >>>
> >
> > >>> 1. NonPersistentDispatcherMultipleConsumers
> >
> > >>>
> >
> > >>> 2. NonPersistentDispatcherSingleActiveConsumer
> >
> > >>>
> >
> > >>> 3. NonPersistentStickyKeyDispatcherMultipleConsumers
> >
> > >>>
> >
> > >>>
> >
> > >>> For `NonPersistentDispatcherSingleActiveConsumer`, auto delete the
> >
> > >>> subscription when there isn’t consumer connected affect nothing.
> >
> > >>>
> >
> > >>>
> >
> > >>> But for `NonPersistentDispatcherMultipleConsumers`,
> >
> > >>> `NonPersistentStickyKeyDispatcherMultipleConsumers`, I’m not sure that
> > if
> >
> > >>> it matters when  we auto delete the subscriptions which has no
> > consumers
> >
> > >>> connected.
> >
> > >>>
> >
> > >>>
> >
> > >>> If it doesn’t matter, I agree with you.
> >
> > >>>
> >
> > >>>
> >
> > >>> Auto delete the durable subscriptions when there aren’t consumers
> >
> > >>> connected to the non-persistent topic.
> >
> > >>>
> >
> > >>>
> >
> > >>>
> >
> > >>> Thanks,
> >
> > >>>
> >
> > >>> Tao Jiuming
> >
> > >>>
> >
> > >>>
> >
> > >>>
> >
> > >>>> 2023年2月7日 19:58,PengHui Li <peng...@apache.org <mailto:
> >
> > >>> peng...@apache.org>> 写道:
> >
> > >>>
> >
> > >>>>
> >
> > >>>
> >
> > >>>> I think we are talking about the durable subscription of the
> >
> > >>> non-persistent
> >
> > >>>
> >
> > >>>> topic, right? For the Reader API (non-durable subscription), the
> >
> > >>>
> >
> > >>>> subscription will be
> >
> > >>>
> >
> > >>>> removed after the reader disconnects. If not, it should be BUG.
> >
> > >>>
> >
> > >>>>
> >
> > >>>
> >
> > >>>> IMO, we should remove the subscription automatically if all the
> > consumers
> >
> > >>>
> >
> > >>>> are disconnected for the non-persistent topic. The consumers can only
> > get
> >
> > >>>
> >
> > >>>> the new incoming messages after they connect to the non-persistent
> > topic.
> >
> > >>>
> >
> > >>>> It looks like even if we leave the subscription there; it will
> >
> > >>>
> >
> > >>>> help nothing.
> >
> > >>>
> >
> > >>>> The behavior should be the same as creating a new subscription with
> > the
> >
> > >>>
> >
> > >>>> same subscription name.
> >
> > >>>
> >
> > >>>>
> >
> > >>>
> >
> > >>>> For subscription management, users are not able to disable the
> >
> > >>> subscription
> >
> > >>>
> >
> > >>>> auto-creation of the non-persistent topic? We don't have any metadata
> >
> > >>>
> >
> > >>>> persist
> >
> > >>>
> >
> > >>>> in the metadata store. After the broker restarts, we will lose
> >
> > >>> everything.
> >
> > >>>
> >
> > >>>>
> >
> > >>>
> >
> > >>>> So I think we don't need to introduce a new configuration. Instead, we
> >
> > >>>
> >
> > >>>> should
> >
> > >>>
> >
> > >>>> figure out if there is a strong reason to leave the durable
> > subscription
> >
> > >>>
> >
> > >>>> after
> >
> > >>>
> >
> > >>>> all the consumers are disconnected. If there is no strong reason, I
> > tend
> >
> > >>> to
> >
> > >>>
> >
> > >>>> fix
> >
> > >>>
> >
> > >>>> incorrect behavior directly.
> >
> > >>>
> >
> > >>>>
> >
> > >>>
> >
> > >>>> Best,
> >
> > >>>
> >
> > >>>> Penghui
> >
> > >>>
> >
> > >>>>
> >
> > >>>
> >
> > >>>>
> >
> > >>>
> >
> > >>>>
> >
> > >>>
> >
> > >>>>
> >
> > >>>
> >
> > >>>> On Tue, Feb 7, 2023 at 4:14 PM Jiuming Tao
> > <jm...@streamnative.io.invalid
> >
> > >>> <mailto:jm...@streamnative.io.invalid>>
> >
> > >>>
> >
> > >>>> wrote:
> >
> > >>>
> >
> > >>>>
> >
> > >>>
> >
> > >>>>> Hi,
> >
> > >>>
> >
> > >>>>>
> >
> > >>>
> >
> > >>>>> I’ve opened a new PIP to discuss:
> >
> > >>>
> >
> > >>>>>
> >
> > >>>
> >
> > >>>>> Currently, in Pulsar, we have a configuration named
> >
> > >>>
> >
> > >>>>> `subscriptionExpirationTimeMinutes` to manage the subscription
> >
> > >>> expiration
> >
> > >>>
> >
> > >>>>> of `PersistentTopic` and `NonPersistentTopic`.
> >
> > >>>
> >
> > >>>>>
> >
> > >>>
> >
> > >>>>> When we set a value which is greater than 0 to
> >
> > >>>
> >
> > >>>>> `subscriptionExpirationTimeMinutes`, it will affect both
> >
> > >>> `PersistentTopic`
> >
> > >>>
> >
> > >>>>> and `NonPersistentTopic`. Their inactive subscriptions will get
> > expired
> >
> > >>> and
> >
> > >>>
> >
> > >>>>> will clean automatically.
> >
> > >>>
> >
> > >>>>>
> >
> > >>>
> >
> > >>>>> For `NonPersistentTopic`, its subscriptions can be clean because we
> >
> > >>> don't
> >
> > >>>
> >
> > >>>>> guarantee its data integrity. But for `PersistentTopic`, if we clean
> > its
> >
> > >>>
> >
> > >>>>> subscriptions automatically may lead to data loss.
> >
> > >>>
> >
> > >>>>>
> >
> > >>>
> >
> > >>>>> However, their subscription expiration is managed by the same
> >
> > >>>
> >
> > >>>>> configuration(`subscriptionExpirationTimeMinutes`), we can't manage
> >
> > >>> their
> >
> > >>>
> >
> > >>>>> subscription expiration independently.
> >
> > >>>
> >
> > >>>>>
> >
> > >>>
> >
> > >>>>> So I want to introduce a new configuration named
> >
> > >>>
> >
> > >>>>> `nonPersistentSubscriptionExpirationTimeMinutes` to manage
> >
> > >>>
> >
> > >>>>> `NonPersistentTopic`'s subscription expiration.
> >
> > >>>
> >
> > >>>>>
> >
> > >>>
> >
> > >>>>>
> >
> > >>>
> >
> > >>>>> Please feel free to leave your comments, the PIP link:
> >
> > >>>
> >
> > >>>>> https://github.com/apache/pulsar/issues/19448 <
> >
> > >>> https://github.com/apache/pulsar/issues/19448> <
> >
> > >>>
> >
> > >>>>> https://github.com/apache/pulsar/issues/19448 <
> >
> > >>> https://github.com/apache/pulsar/issues/19448>>
> >
> > >>>
> >
> > >>>>>
> >
> > >>>
> >
> > >>>>>
> >
> > >>>
> >
> > >>>>> Thanks,
> >
> > >>>
> >
> > >>>>> Tao Jiuming
> >
> > >>>
> >
> > >>>
> >
> > >>>
> >
> > >
> >
> >
> >

Reply via email to