As discussed offline, added service lookups for CoordinatedActivity in the org.wso2.carbon.core.internal.CarbonCoreServiceComponent and used setter methods to add the different coordinated activities into a list in the org.wso2.carbon.core.internal.CarbonCoreDataHolder. Therefore the above mentioned DataHolder is not used directly and private package is not used.
With this change, I checked the cache invalidation in a GREG cluster and it works perfectly. When a coordinator goes down, another node immediately becomes coordinator and the cache invalidation works thereafter too. Shazni Nazeer Senior Software Engineer Mob : +94 715 440 607 LinkedIn : http://lk.linkedin.com/in/shazninazeer Blog : http://shazninazeer.blogspot.com On Fri, May 23, 2014 at 4:47 PM, Afkham Azeez <[email protected]> wrote: > > > > On Fri, May 23, 2014 at 3:25 PM, Shazni Nazeer <[email protected]> wrote: > >> Hi All, >> >> With the above mentioned code block in HazelcastClusteringAgent and >> adding List<CoordinatedActivity> to the >> org.wso2.carbon.clustering.internal.DataHolder (which isn't yet >> implemented), I could get the cache invalidation work properly in a GREG >> cluster in two domains. I also could check when the coordinator goes down, >> another node becomes the coordinator with the above code block mentioned by >> Azeez. The coordinated activity also needs to be added when the >> CacheInvalidationPublisher is created, which will eventually be added to >> List<CoordinatedActivity> in the DataHolder. >> >> @Azeez : The org.wso2.carbon.clustering.internal.DataHolder is an >> internal package and is not getting exported. >> > > internal packages are not supposed to be exported. Those are private > packages that are visible only within the scope of the bundle. > > >> Above code block uses it. I could only get this to work by exporting this >> package. >> How can we cope up with this? >> >> >> Shazni Nazeer >> >> Senior Software Engineer >> >> Mob : +94 715 440 607 >> LinkedIn : http://lk.linkedin.com/in/shazninazeer >> Blog : http://shazninazeer.blogspot.com >> >> >> On Wed, May 21, 2014 at 8:35 PM, Afkham Azeez <[email protected]> wrote: >> >>> When clustering is initialized, it spawns a thread, which tries to >>> acquire the coordinator lock. The relevant code segment from >>> HazelcastClusteringAgent is as follows: >>> >>> // Try to acquire the coordinator lock for the cluster >>> new Thread("cluster-coordinator") { >>> >>> @Override >>> public void run() { >>> >>> *hazelcastInstance.getLock("$$cluster#coordinator$#lock").lock(); >>> // code will block here until lock is acquired* >>> isCoordinator = true; >>> logger.info("Local member is the coordinator"); >>> // Notify all OSGi services which are waiting for this >>> member to become the coordinator >>> List<CoordinatedActivity> coordinatedActivities = >>> DataHolder.getInstance().getCoordinatedActivities(); >>> *for (CoordinatedActivity coordinatedActivity : >>> coordinatedActivities) {* >>> * coordinatedActivity.execute();* >>> * }* >>> } >>> }.start(); >>> >>> >>> Pay special attention to the bold lines above. This thread will block if >>> it cannot acquire the lock. Only one member in the entire cluster will be >>> able to acquire this distributed lock, and will become the coordinator. All >>> others will block at the first line in the run method. Suppose the >>> coordinator dies, then another member will acquire the lock, and it will >>> unblock from that line, and then go on to call all CoordinatedActivity OSGi >>> services. >>> >>> So, in your code that relies on doing things if you are the coordinator, >>> first you need to do a ClusteringAgent.isCoordinator check and execute the >>> relevant code, when your bundle gets activated. You also need to implement >>> a CoordinatedActivity so that you can get notified if the original >>> coordinator dies, and another member becomes the coordinator. >>> >>> HTH >>> Azeez >>> >>> >>> On Wed, May 21, 2014 at 5:47 PM, Amal Gunatilake <[email protected]> wrote: >>> >>>> Hi Azeez, >>>> >>>> Since now we have done the implementation based on the >>>> CoordinatedActivity interface >>>> [1]<https://github.com/wso2/carbon-kernel/blob/development/modules/clustering/src/main/java/org/wso2/carbon/clustering/api/CoordinatedActivity.java>, >>>> Please enlighten us on how, the execute() method triggering mechanism work? >>>> Has it been implemented and committed to git hub? Please let us know the >>>> code snippet location which triggers the execute() method. >>>> >>>> Then we can debug the code to check whether the notification mechanism >>>> works properly to auto subscribe the cache invalidation bundle. >>>> >>>> [1] >>>> https://github.com/wso2/carbon-kernel/blob/development/modules/clustering/src/main/java/org/wso2/carbon/clustering/api/CoordinatedActivity.java >>>> >>>> Thank you & Best regards, >>>> >>>> *Amal Gunatilake* >>>> Software Engineer >>>> WSO2 Inc.; http://wso2.com >>>> lean.enterprise.middleware >>>> >>> >>> >>> >>> -- >>> *Afkham Azeez* >>> Director of Architecture; WSO2, Inc.; http://wso2.com >>> Member; Apache Software Foundation; http://www.apache.org/ >>> * <http://www.apache.org/>* >>> *email: **[email protected]* <[email protected]> >>> * cell: +94 77 3320919 <%2B94%2077%203320919> blog: * >>> *http://blog.afkham.org* <http://blog.afkham.org> >>> *twitter: >>> **http://twitter.com/afkham_azeez*<http://twitter.com/afkham_azeez> >>> * linked-in: **http://lk.linkedin.com/in/afkhamazeez >>> <http://lk.linkedin.com/in/afkhamazeez>* >>> >>> *Lean . Enterprise . Middleware* >>> >> >> > > > -- > *Afkham Azeez* > Director of Architecture; WSO2, Inc.; http://wso2.com > Member; Apache Software Foundation; http://www.apache.org/ > * <http://www.apache.org/>* > *email: **[email protected]* <[email protected]> > * cell: +94 77 3320919 <%2B94%2077%203320919> blog: * > *http://blog.afkham.org* <http://blog.afkham.org> > *twitter: **http://twitter.com/afkham_azeez*<http://twitter.com/afkham_azeez> > * linked-in: **http://lk.linkedin.com/in/afkhamazeez > <http://lk.linkedin.com/in/afkhamazeez>* > > *Lean . Enterprise . Middleware* >
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
