> 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