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