Can we fail the client if they choose NonDurable subscription mode on a
non-persistent topic, instead of writing WARN log messages?


On Mon, Feb 13, 2023 at 4:26 AM guo jiwei <techno...@apache.org> wrote:

> 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