Agree,+1

Regards
Jiwei Guo (Tboy)

On Thu, Feb 9, 2023 at 7:07 PM Jiuming Tao
<jm...@streamnative.io.invalid> wrote:
>
>
> It makes sense
>
> Thanks,
> Tao Jiuming
>
>
> > 2023年2月9日 15:44,Baodi Shi <ba...@apache.org> 写道:
> >
> > 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