Hi All,
We have implemented it with following PR's[1][2] using newly introduced
methods by HasithaH.

Following subscription removing scenarios will be covered with the fix.
1. Remove non-durable subscriptions during startup and shuting down the
server for it's node id.
2. Remove non-durable subscriptions when member removed for it's node id
(by coordinator node).

[1] https://github.com/wso2/andes/pull/288
[2] https://github.com/wso2/andes/pull/286

Thanks,
Pumudu

On Mon, Aug 24, 2015 at 9:40 AM, Hasitha Hiranya <hasit...@wso2.com> wrote:

> Hi Pumudu,
>
> LocalSubscriptions are local to the node. You can deliver messages only to
> the Localsubscriptions. Clustersubscription is the object carrying basic
> info about subscriptions which does not have an actual channel associated
> with it.
>
> To solve the problem I have introduce a method to get a mock local
> subscription using the cluster subscription.
>
> Thanks
>
> On Tue, Aug 18, 2015 at 6:22 PM, Pumudu Ruhunage <pum...@wso2.com> wrote:
>
>> Adding some info to first question.
>> As I understood there are two types of andes subscriptions for cluster
>> and local. When I try to call removeLocalSubscription() inside
>> createDisconnectOrRemoveClusterSubscription() to remove subscriptions from
>> local database i'm getting following exception[1].
>> This prevents removing redundant subscriptions from database during
>> startup while initializing in cluster mode.
>>
>> Why do we need two type of andes subscriptions? can't we keep same
>> subscription type for both cluster and local in MB?
>>
>>
>>
>> [1] Caused by: java.lang.ClassCastException:
>> org.wso2.andes.subscription.BasicSubscription cannot be cast to
>> org.wso2.andes.kernel.LocalSubscription
>>
>> at
>> org.wso2.andes.subscription.SubscriptionStore.removeLocalSubscription(SubscriptionStore.java:645)
>>
>> at
>> org.wso2.andes.subscription.SubscriptionStore.createDisconnectOrRemoveClusterSubscription(SubscriptionStore.java:487)
>>
>> at
>> org.wso2.andes.kernel.AndesSubscriptionManager.updateClusterSubscriptionMaps(AndesSubscriptionManager.java:234)
>>
>> at
>> org.wso2.andes.server.cluster.coordination.ClusterCoordinationHandler.handleClusterSubscriptionsChanged(ClusterCoordinationHandler.java:134)
>>
>> at
>> org.wso2.andes.kernel.AndesSubscriptionManager.notifyClusterSubscriptionHasChanged(AndesSubscriptionManager.java:298)
>>
>> at
>> org.wso2.andes.kernel.AndesSubscriptionManager.reloadSubscriptionsFromStorage(AndesSubscriptionManager.java:275)
>>
>> at
>> org.wso2.andes.kernel.AndesRecoveryTask.reloadSubscriptions(AndesRecoveryTask.java:188)
>>
>> at
>> org.wso2.andes.kernel.AndesRecoveryTask.recoverExchangesQueuesBindingsSubscriptions(AndesRecoveryTask.java:94)
>>
>> at
>> org.wso2.andes.kernel.AndesKernelBoot.syncNodeWithClusterState(AndesKernelBoot.java:443)
>>
>> at
>> org.wso2.andes.kernel.AndesKernelBoot.bootAndesKernel(AndesKernelBoot.java:116)
>>
>> at org.wso2.andes.server.Broker.startupImpl(Broker.java:290)
>>
>>
>>
>> Thanks,
>> Pumudu
>>
>> On Tue, Aug 18, 2015 at 4:43 PM, Pumudu Ruhunage <pum...@wso2.com> wrote:
>>
>>> Hi All,
>>>
>>> I faced two issues while fixing this.
>>>
>>> 1. There is a method for clear cluster subscriptions
>>> ('closeAllClusterSubscriptionsOfNode()' in 'andesSubscriptionManager')
>>> while initializing a cluster node. But it dosen't clean up database when
>>> executed. Is there a specific reason not to delete non-durable
>>> subscriptions from database when call this method?
>>>
>>> 2. Currently all subscriptions(durable/non-durable) are stored in
>>> MB_DURABLE_SUBSCRIPTION table. Is there a reason for this? Can't we change
>>> this table name to something meaningful if we continue to keep all
>>> subscriptions in same table?
>>>
>>> WDYT?
>>>
>>> Thanks,
>>> Pumudu
>>>
>>> On Thu, Aug 13, 2015 at 2:41 PM, Pumudu Ruhunage <pum...@wso2.com>
>>> wrote:
>>>
>>>> Hi All,
>>>>
>>>> Thanks for the inputs. +1 for implementing both cases.
>>>> will do both implementations.
>>>>
>>>> Regards,
>>>> Pumudu
>>>>
>>>> On Thu, Aug 13, 2015 at 11:40 AM, Hemika Kodikara <hem...@wso2.com>
>>>> wrote:
>>>>
>>>>> Hi All,
>>>>>
>>>>> We have already done a similar implementation for durable topics on
>>>>> member removed.
>>>>>
>>>>> +1 for Asanka's suggestion to remove non-topic subscriptions on both
>>>>> occasions.
>>>>>
>>>>> Regards,
>>>>> Hemika
>>>>>
>>>>> Hemika Kodikara
>>>>> Software Engineer
>>>>> WSO2 Inc.
>>>>> lean . enterprise . middleware
>>>>> http://wso2.com
>>>>>
>>>>> Mobile : +94777688882
>>>>>
>>>>> On Thu, Aug 13, 2015 at 11:09 AM, Asitha Nanayakkara <asi...@wso2.com>
>>>>> wrote:
>>>>>
>>>>>>
>>>>>> On Thu, Aug 13, 2015 at 3:17 PM, Asanka Abeyweera <asank...@wso2.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi Asitha,
>>>>>>>
>>>>>>> I don't think we can achieve this by only doing the cleanup at the
>>>>>>> coordinator selection point. We have to clean the topic subscriptions 
>>>>>>> for a
>>>>>>> non-coordinator node when it leaves (In this case a new coordinator will
>>>>>>> not be elected).
>>>>>>>
>>>>>>> Oh! yes agreed!
>>>>>>
>>>>>>>
>>>>>>> On Thu, Aug 13, 2015 at 5:04 AM, Asitha Nanayakkara <asi...@wso2.com
>>>>>>> > wrote:
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Wed, Aug 12, 2015 at 10:53 PM, Asanka Abeyweera <
>>>>>>>> asank...@wso2.com> wrote:
>>>>>>>>
>>>>>>>>> Hi Pumudu,
>>>>>>>>>
>>>>>>>>> I think we have to do the clean up in both places. Case 1 is
>>>>>>>>> required when the only node in the cluster leaves and come back. Case 
>>>>>>>>> 2 is
>>>>>>>>> required when a single node leaves in a multi node cluster.
>>>>>>>>>
>>>>>>>>> On Wed, Aug 12, 2015 at 5:38 PM, Pumudu Ruhunage <pum...@wso2.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> Currently if MB node got killed unexpectedly non-durable topic
>>>>>>>>>> subscriptions bind to that node will remain in cluster. This can 
>>>>>>>>>> cause
>>>>>>>>>> unexpected behaviors in cluster since that node has already removed.
>>>>>>>>>>
>>>>>>>>>> IMO these topic subscriptions can clean up in two methods.
>>>>>>>>>>
>>>>>>>>>> 1. During each MB node start up, remove all non-durable topic
>>>>>>>>>> subscriptions for it's local node id. (This will ensure newly 
>>>>>>>>>> started node
>>>>>>>>>> won't receive any non-durable topic messages related to previously 
>>>>>>>>>> killed
>>>>>>>>>> MB node with same node id)
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I think  we can do this in org.wso2.andes.kernel.AndesKernelBoot
>>>>>>>>> or in a similar class. May be we can do this similar to the way we do 
>>>>>>>>> the
>>>>>>>>> slot recovery task.
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> 2. Cluster coordinator should remove all non-durable topic
>>>>>>>>>> subscriptions when a member left from cluster. (This can be a 
>>>>>>>>>> problem if
>>>>>>>>>> coordinator node killed. If there's a method to get previous 
>>>>>>>>>> coordinator
>>>>>>>>>> node id by newly elected coordinator this method can be implemented)
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> For this case we can do the clean up in
>>>>>>>>> org.wso2.andes.server.cluster.ClusterManager#memberRemoved method 
>>>>>>>>> after
>>>>>>>>> checking if the current node is the coordinator. This will work even 
>>>>>>>>> if the
>>>>>>>>> coordinator node get killed.
>>>>>>>>>
>>>>>>>>
>>>>>>>> When a new coordinator is elected can't we let that newly elected
>>>>>>>> coordinator do this ? Even at startup there is a coordinator election
>>>>>>>> right? if that's the case we can cover both scenarios IMO?
>>>>>>>>
>>>>>>>>
>>>>>>>>>>
>>>>>>>>> How should we do the clean up. WDYT?
>>>>>>>>>>
>>>>>>>>>> Regards,
>>>>>>>>>> Pumudu
>>>>>>>>>> --
>>>>>>>>>> Pumudu Ruhunage
>>>>>>>>>> Associate Software Engineer | WSO2 Inc
>>>>>>>>>> M: +94 779 664493  | http://wso2.com
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Dev mailing list
>>>>>>>>>> Dev@wso2.org
>>>>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Asanka Abeyweera
>>>>>>>>> Software Engineer
>>>>>>>>> WSO2 Inc.
>>>>>>>>>
>>>>>>>>> Phone: +94 712228648
>>>>>>>>> Blog: a5anka.github.io
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Dev mailing list
>>>>>>>>> Dev@wso2.org
>>>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> *Asitha Nanayakkara*
>>>>>>>> Software Engineer
>>>>>>>> WSO2, Inc. http://wso2.com/
>>>>>>>> Mob: + 94 77 85 30 682
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Asanka Abeyweera
>>>>>>> Software Engineer
>>>>>>> WSO2 Inc.
>>>>>>>
>>>>>>> Phone: +94 712228648
>>>>>>> Blog: a5anka.github.io
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> *Asitha Nanayakkara*
>>>>>> Software Engineer
>>>>>> WSO2, Inc. http://wso2.com/
>>>>>> Mob: + 94 77 85 30 682
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Dev mailing list
>>>>>> Dev@wso2.org
>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Dev mailing list
>>>>> Dev@wso2.org
>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Pumudu Ruhunage
>>>> Associate Software Engineer | WSO2 Inc
>>>> M: +94 779 664493  | http://wso2.com
>>>>
>>>
>>>
>>>
>>> --
>>> Pumudu Ruhunage
>>> Associate Software Engineer | WSO2 Inc
>>> M: +94 779 664493  | http://wso2.com
>>>
>>
>>
>>
>> --
>> Pumudu Ruhunage
>> Associate Software Engineer | WSO2 Inc
>> M: +94 779 664493  | http://wso2.com
>>
>
>
>
> --
> *Hasitha Abeykoon*
> Senior Software Engineer; WSO2, Inc.; http://wso2.com
> *cell:* *+94 719363063*
> *blog: **abeykoon.blogspot.com* <http://abeykoon.blogspot.com>
>
>


-- 
Pumudu Ruhunage
Associate Software Engineer | WSO2 Inc
M: +94 779 664493  | http://wso2.com
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to