dev@shoal.java.net

Re: [Shoal-Dev] Strange behavior about join notifications.

From: Shreedhar Ganapathy <Shreedhar.Ganapathy_at_Sun.COM>
Date: Sun, 29 Jun 2008 08:11:18 -0700

Hi Bongjae
Could you merge Patch A with the recent checkin and let us know what the
impact is?
Ideally I would like checkins to be incremental. Your patch B not only
had changes wrt GroupLeadershipSignal and Join Notification related
stuff but also Joined And Ready semantics which I did not think work
well. I would like to get the Join Notif signal related fixes from Patch
A checked in unless your patch B has something related to this which
makes it better.

May I ask you to once again send in an updated Patch A which covers the
Join Notification issues ?
Separately, I sent you and a few others a note on changing the first
master change event as a join/add event since it what that is and
post-discovery the master change event is fired. This subtle change will
help make remove redundant join notifications as well.

Thanks
Shreedhar

Bongjae Chang wrote:
> Hi Shreedhar.
>
> First of all, thank you for reviewing my patch.
>
> Before I check in my patch(A) which I sent to this alias originally, I would like to clear up two points.
>
> 1. Maybe my patch already resolved issue #66 but I know you checked in some logic yesterday (https://shoal.dev.java.net/source/browse/shoal/gms/src/java/com/sun/enterprise/ee/cms/impl/jxta/ViewWindow.java?r1=1.24&r2=1.25)
> I think that my patch(A) can have side-effect about your patch.
> So I don't know whether I have to ignore your patch or not. Or I don't know whether I have to merge current changes in my patch(A) or not.
>
> Another patch(B) which I sent recently offline which combined these fixes along with GroupLeadershipSignal feature is similar to your current patch.
> So I wanted to check in another patch(B) and ignore this patch(A) which I sent to this alias originally. :-)
>
> Another choice is that I can edit the patch(B) which I sent recently offline which combined these fixes along with GroupLeadershipSignal feature.
> So I can only remove GroupLeadershipSignal feature from another patch(B) and send new patch(B') to this alias and you can review it.
>
> Please advice me.
>
>
> 2.
> Shreedhar wrote:
> "Also in my view the joined and ready related changes are not good and its best to let it remain the way it is now in Shoal. So your patch checkin should only contain fix for issue 61"
>
> I don't know what joined and ready related changes are? Do you mean the following words(a)?
>
> Bongjae wrote:
> PS) members receive JOINED_AND_READY_EVENT from MasterNode.processChangeEvent() except master. Though there is no changes in view, master uses only VIEW_CHANGE_EVENT for sending members JOINED_AND_READY_EVENT. I think this is some strange.
>
> I think that this patch(A) doesn't have changes about joined and ready event. Is it right? If this patch(A) has changes about joined and ready event and I am not being aware of it, please point out it.
>
> Or do you mean the following mail(b)?
> https://shoal.dev.java.net/servlets/ReadMsg?list=dev&msgNo=80
>
> Or do you mean my another patch(B) which I sent recently offline which combined these fixes along with GroupLeadershipSignal feature(c)?
> This patch(B) only has comments about joined and ready event.
>
> Please let me know which case you mean.
>
> Thanks.
>
> --
> Bongjae Chang
>
>
> ----- Original Message -----
> From: "Shreedhar Ganapathy" <Shreedhar.Ganapathy_at_Sun.COM>
> To: <dev_at_shoal.dev.java.net>
> Sent: Saturday, June 28, 2008 6:07 AM
> Subject: Re: [Shoal-Dev] Strange behavior about join notifications.
>
>
>
>> Also in my view the joined and ready related changes are not good and
>> its best to let it remain the way it is now in Shoal. So your patch
>> checkin should only contain fix for issue 61.
>>
>> Shreedhar Ganapathy wrote:
>>
>>> Hi Bongjae
>>> I am referring to the patch you sent to this alias originally and not
>>> the you sent recently offline which combined these fixes along with
>>> GroupLeadershipSignal feature. It would be preferable to check in
>>> incrementally so that if we ever need to roll back any check in then
>>> it can be done so.
>>>
>>> Cheers.
>>> Shreedhar
>>>
>>> Shreedhar Ganapathy wrote:
>>>
>>>> Hi Bongjae
>>>> I just reviewed your patch related to concurrent startup and join
>>>> notifications not being sent on certain cases. Your patch looks good.
>>>> We have created a separate branch for our Sailfin related deliverable
>>>> so you can go ahead and check in this patch to the trunk assuming it
>>>> does not have any other side effect.
>>>> Let me know if it does and see how that can be solved.
>>>>
>>>> Thanks
>>>> Shreedhar
>>>>
>>>> Bongjae Chang wrote:
>>>>
>>>>> Hi Mohamed and Shreedhar.
>>>>> Thanks for reviewing my patch.
>>>>> As Shreedhar's advice, I will wait for Sheetal to confirm this patch.
>>>>> Thanks.
>>>>>
>>>>> --
>>>>> Bongjae Chang
>>>>>
>>>>>
>>>>> ----- Original Message ----- From: "Shreedhar Ganapathy"
>>>>> <Shreedhar.Ganapathy_at_Sun.COM>
>>>>> To: <dev_at_shoal.dev.java.net>
>>>>> Sent: Tuesday, June 17, 2008 12:40 AM
>>>>> Subject: Re: [Shoal-Dev] Strange behavior about join notifications.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>> Hi Bongjae
>>>>>> Lets wait for Sheetal to confirm this patch on our test harness. We
>>>>>> usually do run each such checkin through the test in order to
>>>>>> confirm that there no other side effects.
>>>>>> We are currently gate keeping checkins until we create a branch
>>>>>> that is needed for a Sailfin related interim release.
>>>>>> Please wait for Sheetal's email on this.
>>>>>>
>>>>>> Cheers
>>>>>> Shreedhar
>>>>>>
>>>>>> Mohamed Abdelaziz wrote:
>>>>>>
>>>>>>
>>>>>>> Bongjae,
>>>>>>>
>>>>>>> Thank you for the detailed response. Please commit your changes
>>>>>>> when you get the time.
>>>>>>>
>>>>>>>
>>>>>>> Regards,
>>>>>>> Mohamed
>>>>>>>
>>>>>>>
>>>>>>> Bongjae Chang wrote:
>>>>>>>
>>>>>>>
>>>>>>>> Hi Mohamed.
>>>>>>>> Please see the following descriptions.
>>>>>>>>
>>>>>>>> 1. Testing scenarios
>>>>>>>> Testing scenarios are simple. Shoal(with Jxta) don't support
>>>>>>>> multiple members becoming part of the same group from the same JVM.
>>>>>>>> So, each member should join the group with separate process(JVM).
>>>>>>>> You can test this manually with executing "SimpleJoinTest" I
>>>>>>>> attached ago.
>>>>>>>> Whenever you execute "SimpleJoinTest", new member(node) can join
>>>>>>>> the "TestGroup".
>>>>>>>>
>>>>>>>> I tested this with creating multiple "SimpleJoinTest"s. You maybe
>>>>>>>> need 3 or 4 "SimpleJoinTest"'s processes.
>>>>>>>> a) In the beginning, there is no member and no group.
>>>>>>>> b) I executed multiple "SimpleJoinTest"s in the separate
>>>>>>>> process(JVM) concurrently.
>>>>>>>> c) I saw each log. I observed "Signal.getMemberToken()"
>>>>>>>> particularly. ex) "****JoinNotification received: GroupLeader =
>>>>>>>> false, Signal.getMemberToken() =
>>>>>>>> e9d80499-0f8b-4e2d-8856-3f31dcc25f96, ServerName =
>>>>>>>> a2ed5cb6-3cc7-4060-91d6-3fc8b6854049, Leader =
>>>>>>>> e9d80499-0f8b-4e2d-8856-3f31dcc25f96"
>>>>>>>>
>>>>>>>> Strictly speaking, we can't execute multiple processes
>>>>>>>> simultaneously. But because each member has the discovery
>>>>>>>> timeout, this is an acceptable error range.
>>>>>>>> In other words, if you execute "SimpleJoinTest" when other
>>>>>>>> "SimpleJoinTest"s are waiting for the discovery timeout, you can
>>>>>>>> reproduce strange results.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> 2. How does the new code behave during the discovery phase?
>>>>>>>> I also made an effort to preserve original logic and codes if
>>>>>>>> possible.
>>>>>>>> Before I expain how the new code behave during the discovery
>>>>>>>> phase, I want to explain my patch.
>>>>>>>>
>>>>>>>> Assume "A", "B" and "C" will become members of the group.
>>>>>>>> In my scenario, "A", "B" and "C" will wait for the discovery
>>>>>>>> timeout because there is no master in the group.
>>>>>>>> Before they enter discovery phase, they first set the master
>>>>>>>> advertisement as own advertisement. But masterAssigned is mostly
>>>>>>>> false at this time.
>>>>>>>> Mostly masterAssigned can be set as true by the following method:
>>>>>>>> - In MasterNode.appointMasterNode()
>>>>>>>> - In MasterNode.processMasterNodeResponse()
>>>>>>>> - In MasterNode.processMasterNodeAnnouncement()
>>>>>>>>
>>>>>>>> a) In MasterNode.appointMasterNode()
>>>>>>>> This case is that master is not assigned after the discovery
>>>>>>>> timeout. ex) there is no master in the group.
>>>>>>>> Then we use the discovery view which has other members if other
>>>>>>>> members sent any messages to me in order to put up a cadidate as
>>>>>>>> master.
>>>>>>>> Of course, because the discovery view always has own
>>>>>>>> advertisement, own advertisement can become the candidate.
>>>>>>>>
>>>>>>>> a-1) when own advertisement becomes the master
>>>>>>>> First, if the cadidate is own advertisement and the discovery
>>>>>>>> view has other members, clusterViewManager.setMaster() is called
>>>>>>>> with discovery view's snapshot.
>>>>>>>> This is edited. Original code call clusterViewManager.setMaster()
>>>>>>>> with only own view snapshot. But because the master was already
>>>>>>>> determined as own advertisement, I think that calling
>>>>>>>> clusterViewManager.setMaster() with discovery view's snapshot is
>>>>>>>> better than with only own view's snapshot. Of course, Calling
>>>>>>>> clusterViewManager.setMaster() without discovery view's snapshot
>>>>>>>> has no problem because when other members receive
>>>>>>>> processMasterNodeAnnouncement() by master's announceMaster(),
>>>>>>>> they can call sendSelfNodeAdvertisement(). But if discovery view
>>>>>>>> has them and setMaster() is called with discovery view,
>>>>>>>> sendSelfNodeAdvertisement() is unnecessary at this case because
>>>>>>>> master view already has them. So they can set the master directly
>>>>>>>> without sendSelfNodeAdvertisement().
>>>>>>>>
>>>>>>>> And I edited another code about calling announceMaster().
>>>>>>>> -----------------------------------------------------
>>>>>>>> [original appointMasterNode() in MasterNode.java]
>>>>>>>> ...
>>>>>>>> if (madv.getID().equals(localNodeID)) {
>>>>>>>> ...
>>>>>>>> if(clusterViewManager.getViewSize() > 1) {
>>>>>>>> announceMaster(manager.getSystemAdvertisement());
>>>>>>>> }
>>>>>>>> ...
>>>>>>>> }
>>>>>>>> -----------------------------------------------------
>>>>>>>>
>>>>>>>> I edited this as the following code
>>>>>>>> -----------------------------------------------------
>>>>>>>> if (madv.getID().equals(localNodeID)) {
>>>>>>>> ...
>>>>>>>> //if(clusterViewManager.getViewSize() > 1) {
>>>>>>>> announceMaster(manager.getSystemAdvertisement());
>>>>>>>> //}
>>>>>>>> ...
>>>>>>>> }
>>>>>>>> -----------------------------------------------------
>>>>>>>> In other words, if own advertisement becomes the master,
>>>>>>>> announceMaster() is always called. When I am debuging this,
>>>>>>>> though one more member joined the group, sometimes
>>>>>>>> clusterViewManager.getViewSize() could be equal to 1 in a short
>>>>>>>> time. So for safety I edited it. Though announceMaster() is
>>>>>>>> called when clusterViewManager.getViewSize() is equal to 1, it is
>>>>>>>> no problem because we don't receive own message.
>>>>>>>>
>>>>>>>> a-2) when other member's advertisement becomes the master
>>>>>>>> Original code always set the master without notification. Then
>>>>>>>> sometimes master's view can't be updated. see the following code.
>>>>>>>> -----------------------------------------------------
>>>>>>>> [appointMasterNode() method in MasterNode.java]
>>>>>>>> ...
>>>>>>>> clusterViewManager.setMaster(madv, false);
>>>>>>>> ...
>>>>>>>> -----------------------------------------------------
>>>>>>>>
>>>>>>>> -----------------------------------------------------
>>>>>>>> [setMaster(advertisement, notify) method in ClusterViewManager.java]
>>>>>>>>
>>>>>>>> if ( !advertisement.equals(masterAdvertisement)) {
>>>>>>>> ...
>>>>>>>> // notify
>>>>>>>> }
>>>>>>>> ----------------------------------------------------- As you see,
>>>>>>>> if current member already set the master, notify is not called.
>>>>>>>> If first we already called setMaster(advertisement, false) in
>>>>>>>> MasterNode.appointMasterNode(), when master sends new view to me
>>>>>>>> later and I receive the view through
>>>>>>>> processMasterNodeAnnouncement() or processMasterNodeResponse(),
>>>>>>>> notifying new view is not called, though setMaster() can be
>>>>>>>> called with new view because current masterAdvertisement is
>>>>>>>> already same to master's advertisement.
>>>>>>>> So I edited it. If cadidate is other member, I don't call
>>>>>>>> setMaster(advertisement, false). Though we don't set the master
>>>>>>>> now, we can receive the master change event through
>>>>>>>> processMasterNodeAnnouncement() or processMasterNodeResponse()
>>>>>>>> later.
>>>>>>>>
>>>>>>>> b) In MasterNode.processMasterNodeResponse():
>>>>>>>> MASTER_CHANGE_EVENT is notified with master view's snapshot by
>>>>>>>> Issue #60(https://shoal.dev.java.net/issues/show_bug.cgi?id=60)
>>>>>>>> Additional patch is that when sendSelfNodeAdvertisement() is
>>>>>>>> called, MASTER_CHANGE_EVENT also is notified with master view's
>>>>>>>> snapshot.
>>>>>>>>
>>>>>>>> c) In MasterNode.processMasterNodeAnnouncement(): This is very
>>>>>>>> similar to above b). Like b) I edited this method.
>>>>>>>>
>>>>>>>>
>>>>>>>> So now I want to describe how the new code behaves during the
>>>>>>>> discovery phase.
>>>>>>>> Actually, new code behaves like old code's original purpose.
>>>>>>>> There is no big changes.
>>>>>>>>
>>>>>>>> 1) If "A", "B" and "C" joined the group concurrently and when all
>>>>>>>> member are waiting for the discovery timeout.
>>>>>>>>
>>>>>>>> 1-1) If all members receive no other member's message and
>>>>>>>> discovery view doesn't have any members, all members try to
>>>>>>>> become the master.
>>>>>>>> So all members call announceMaster(). Then All members receive
>>>>>>>> master's announcements and become aware of master's collision
>>>>>>>> through checkMaster().
>>>>>>>> Master's collision can be resolved by ID. When the member affirms
>>>>>>>> master node role or resign master node role, the member notify
>>>>>>>> MASTER_CHANGE_EVENT.
>>>>>>>> Though original code didn't notify MASTER_CHANGE_EVENT when the
>>>>>>>> member affirms master node role, I edited it. Above a-1) though
>>>>>>>> the member already called setMaster() and notified
>>>>>>>> MASTER_CHANGE_EVENT and master was not changed, we should notify
>>>>>>>> MASTER_CHANGE_EVENT because master's view already was changed by
>>>>>>>> collision. If we don't notify the event, we can't become aware
>>>>>>>> of view changes quickly in the collision case. Of course, if
>>>>>>>> another event will be occurred later, this member(master) can
>>>>>>>> become aware of view changes. But I think view changes should be
>>>>>>>> applied as soon as possible. So I edited it.
>>>>>>>>
>>>>>>>> 1-2) If all members receive each other member's message and
>>>>>>>> discovery view has all members, candidate is selected from
>>>>>>>> discovery view by TreeMap's ordering sort.
>>>>>>>> If all members select the same cadidate, the cadidate member will
>>>>>>>> send master announcement. other members will process
>>>>>>>> processMasterNodeAnnouncement() and set the master with current
>>>>>>>> master's view snapshot.
>>>>>>>>
>>>>>>>> If some members receive each other member's message and some
>>>>>>>> members don't receive, 1-1) and 1-2) are mixing.
>>>>>>>>
>>>>>>>> 2) If some nodes joined the group late
>>>>>>>> If some members join the group and there is already master, new
>>>>>>>> members will send master node query to all members and the master
>>>>>>>> node will process processMasterNodeQuery(). Then the master node
>>>>>>>> will send master response with master view's snapshot and new
>>>>>>>> members will process processMasterNodeResponse() and set the
>>>>>>>> master with current master's view.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> 3. How the code behaves when a node is shutdown and :
>>>>>>>> I think my patch don't have an effect on shutdown algorithm. I
>>>>>>>> know shutdown and failure case are connected with HealthMonitor.
>>>>>>>> I think I didn't edit codes lead to controversy about original
>>>>>>>> HealthMonitor logic.
>>>>>>>> But I edited some code about startup in HealthMonitor. When node
>>>>>>>> is starting and HealthMonitor is started, MasterNode.probeNode()
>>>>>>>> can be called by HealthMonitor.
>>>>>>>> In "1-1) If all members receive no other member's message and
>>>>>>>> discovery view doesn't have any members, all members try to
>>>>>>>> become the master"'s case and master collision case,
>>>>>>>> if MasterNode.probeNode() is called by HealthMonitor,
>>>>>>>> processMasterNodeResponse() can be processed. Because
>>>>>>>> processMasterNodeResponse() doesn't assume collision case,
>>>>>>>> sometime unexpected results can be occurred in the master
>>>>>>>> selection algorithm.
>>>>>>>> So I edited some code in HealthMonitor. The change is that health
>>>>>>>> monitor can only start after master discovery was finished.
>>>>>>>> So this change don't have an effect on shutdown.
>>>>>>>>
>>>>>>>> When a node which is not mater restarted before it is determined
>>>>>>>> to be failed, master's view is same. So members which already
>>>>>>>> joined the group don't receive any changes.
>>>>>>>> The node which restarted receives all members' join notifications
>>>>>>>> by master's response.
>>>>>>>> When a node which is not master restared after it has been
>>>>>>>> ejected from the cluster, master's view is changed. So members
>>>>>>>> which already joined the group only receive failed node's join
>>>>>>>> notification because master already removed the node from
>>>>>>>> master's view . The node which restarted receives all members'
>>>>>>>> join notifications by master's response.
>>>>>>>>
>>>>>>>> When a node which is master restarted before it is determined to
>>>>>>>> be failed, the node which was master sends discovery messages to
>>>>>>>> all members and waits for the discovery timeout.
>>>>>>>> Maybe because other members are not master, the master node don't
>>>>>>>> receive any messages. So the master node sends master
>>>>>>>> announcement included only own advertisement to members. Then
>>>>>>>> because members know that master's view only has master
>>>>>>>> advertisement, members call sendSelfNodeAdvertisement(). Then
>>>>>>>> master can become aware of existing members through
>>>>>>>> processNodeResponse(). The master node can receive join
>>>>>>>> notifications of all members. Other members don't receive any
>>>>>>>> changes because they first call sendSelfNodeAdvertisement() and
>>>>>>>> return before setMaster().
>>>>>>>>
>>>>>>>> When a node which is master restarted after it has been ejected
>>>>>>>> from the cluster, members already elected new master. When master
>>>>>>>> was failed and new master was elected, because members' view had
>>>>>>>> no additional member, members don't receive any join events. But
>>>>>>>> when a node which was master restarted, the node sends master
>>>>>>>> discovery message and receives new master's response. So the node
>>>>>>>> receives all existing members' join notifications from new master
>>>>>>>> and other members receives only failed member's join notification.
>>>>>>>>
>>>>>>>> That's all. :-)
>>>>>>>>
>>>>>>>> I am caring about my reply whether you are satisfied with my
>>>>>>>> descriptions or not.
>>>>>>>>
>>>>>>>>
>>>>>>> Yes it has.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> If you find any ambiguous descriptions or errors, please point
>>>>>>>> out it.
>>>>>>>> And if I misunderstood your questions, please expalin questions
>>>>>>>> again.
>>>>>>>>
>>>>>>>> Thanks
>>>>>>>> --
>>>>>>>> Bongjae Chang
>>>>>>>>
>>>>>>>>
>>>>>>>> ----- Original Message ----- From: "Mohamed Abdelaziz"
>>>>>>>> <Mohamed.Abdelaziz_at_Sun.COM>
>>>>>>>> To: <dev_at_shoal.dev.java.net>
>>>>>>>> Sent: Saturday, June 14, 2008 1:59 AM
>>>>>>>> Subject: Re: [Shoal-Dev] Strange behavior about join notifications.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> Thanks for patch Bongjae. The changes are ok. Can you describe
>>>>>>>>> your testing scenarios?
>>>>>>>>>
>>>>>>>>> I am interested in finding how the new code behaves during the
>>>>>>>>> discovery phase where :
>>>>>>>>> - Nodes are started at the time
>>>>>>>>> - Nodes start time varies, but with the discovery timeout
>>>>>>>>> - Late (after discovery phase) startup for some nodes
>>>>>>>>>
>>>>>>>>> Also how the code behaves when a node is shutdown and :
>>>>>>>>> - restarted before it is determined to be failed
>>>>>>>>> - restated after it has been ejected from the cluster
>>>>>>>>> - and finally, the same as above, for the master node
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Mohamed
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Bongjae Chang wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> Hi Sheetal.
>>>>>>>>>> I changed a litle code, so if possible, I want you to review
>>>>>>>>>> these newly later.
>>>>>>>>>> I am very sorry for sending patches again.
>>>>>>>>>>
>>>>>>>>>> changed code is only "void addToView()" in
>>>>>>>>>> ClusterViewManager.java. See the following comment.
>>>>>>>>>> ---------------------------------------------------------------
>>>>>>>>>> void addToView(final List<SystemAdvertisement> newView,
>>>>>>>>>> final boolean authoritative,
>>>>>>>>>> final ClusterViewEvent cvEvent) {
>>>>>>>>>> //TODO: need to review the use cases of the callers of
>>>>>>>>>> method
>>>>>>>>>> if (cvEvent == null) {
>>>>>>>>>> return;
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> if (authoritative) {
>>>>>>>>>> // 2008.06.13, edited by carryel
>>>>>>>>>> // this addToView() method can be called with no
>>>>>>>>>> changes of view by MasterNode.processChangeEvent() method
>>>>>>>>>> // if we only notify listeners when there are
>>>>>>>>>> changes, sometimes some events can be missed.
>>>>>>>>>> // ex) members should receive
>>>>>>>>>> JOINED_AND_READY_EVENT though there are not changes.
>>>>>>>>>> // though we always notify listeners regardless of
>>>>>>>>>> changes, notification's duplication can be checked in ViewWindow
>>>>>>>>>> // ex) ADD_EVENT
>>>>>>>>>> addToView( newView );
>>>>>>>>>> notifyListeners( cvEvent );
>>>>>>>>>> /*
>>>>>>>>>> boolean changed = addToView( newView );
>>>>>>>>>> if (changed) {
>>>>>>>>>> //only if there are changes that we notify
>>>>>>>>>> notifyListeners(cvEvent);
>>>>>>>>>> }
>>>>>>>>>> */
>>>>>>>>>> }
>>>>>>>>>> }
>>>>>>>>>> ---------------------------------------------------------------
>>>>>>>>>>
>>>>>>>>>> Original code(not my patch) had no problems about
>>>>>>>>>> JOINED_AND_READY_EVENT notification.
>>>>>>>>>> Of course, original code had problems about other
>>>>>>>>>> notifications. ex) ADD_EVENT can be duplicated
>>>>>>>>>>
>>>>>>>>>> Original code's intension is "only if there are changes, we
>>>>>>>>>> notify listeners". But the logic of detecting changes was
>>>>>>>>>> strange. The following is original code.
>>>>>>>>>> ---------------------------------------------------------------
>>>>>>>>>> In addToView() method
>>>>>>>>>>
>>>>>>>>>> boolean changed = false;
>>>>>>>>>> reset();
>>>>>>>>>> viewLock.lock();
>>>>>>>>>> ...
>>>>>>>>>> for( SystemAdvertisement elem : new View ) {
>>>>>>>>>> if( !view.containsKey( elem.getID().toString() ) ) {
>>>>>>>>>> changed = true;
>>>>>>>>>> }
>>>>>>>>>> ...
>>>>>>>>>> }
>>>>>>>>>> ---------------------------------------------------------------
>>>>>>>>>> if we call reset() before detecting changes, the result will
>>>>>>>>>> always be "change = true" because reset() method will clear
>>>>>>>>>> TreeMap.
>>>>>>>>>>
>>>>>>>>>> So I edited this. The following is my code.
>>>>>>>>>> ---------------------------------------------------------------
>>>>>>>>>> private boolean addToView( final List<SystemAdvertisement>
>>>>>>>>>> newView ) {
>>>>>>>>>> boolean changed = false;
>>>>>>>>>> // 2008.06.10, removed and edited by carryel
>>>>>>>>>> // We need old view's snapshot for becoming aware of
>>>>>>>>>> changes before reset()
>>>>>>>>>> // Though reset() also uses viewLock for view.clear(),
>>>>>>>>>> // if reset() is called before addToView() acquires the
>>>>>>>>>> viewLock, view can be changed in a short time
>>>>>>>>>> // If view was changed in a short time, unexpected
>>>>>>>>>> result occurred in becoming aware of changes
>>>>>>>>>> // So for safety, if we need to become aware of real
>>>>>>>>>> changes, snapshooting and view.clear() should be called in
>>>>>>>>>> addToView()'s viewLock
>>>>>>>>>> //LOG.log( Level.FINER, "Resetting View" );
>>>>>>>>>> //reset();
>>>>>>>>>> lockLog( "addToView()" );
>>>>>>>>>> viewLock.lock();
>>>>>>>>>> // old view's snapshot
>>>>>>>>>> TreeMap oldView = (TreeMap)view.clone();
>>>>>>>>>> // we should clear view after old view's snapshot
>>>>>>>>>> view.clear();
>>>>>>>>>> view.put(advertisement.getID().toString(), advertisement);
>>>>>>>>>> try {
>>>>>>>>>> // 2008.06.10, commented by carryel, we don't need
>>>>>>>>>> put manager.getSystemAdvertisement(). this operation is maybe
>>>>>>>>>> duplicated. if( !newView.contains(
>>>>>>>>>> manager.getSystemAdvertisement() ) ) {
>>>>>>>>>> view.put(
>>>>>>>>>> manager.getSystemAdvertisement().getID().toString(),
>>>>>>>>>> manager.getSystemAdvertisement() );
>>>>>>>>>> }
>>>>>>>>>> for( SystemAdvertisement elem : newView ) {
>>>>>>>>>> LOG.log( Level.FINER,
>>>>>>>>>> new StringBuffer().append( "Adding " )
>>>>>>>>>> .append( elem.getID()
>>>>>>>>>> ).append( " to view" )
>>>>>>>>>> .toString() );
>>>>>>>>>> if( !changed && !oldView.containsKey(
>>>>>>>>>> elem.getID().toString() ) ) {
>>>>>>>>>> //if( !changed && !view.containsKey(
>>>>>>>>>> elem.getID().toString() ) ) {
>>>>>>>>>> changed = true;
>>>>>>>>>> }
>>>>>>>>>> // Always add the wire version of the adv
>>>>>>>>>> view.put( elem.getID().toString(), elem );
>>>>>>>>>> }
>>>>>>>>>> } finally {
>>>>>>>>>> viewLock.unlock();
>>>>>>>>>> }
>>>>>>>>>> return changed;
>>>>>>>>>> }
>>>>>>>>>> ---------------------------------------------------------------
>>>>>>>>>> This code works well in detecting changes. But there was
>>>>>>>>>> side-effect as I explained above. So I changed a little. :-)
>>>>>>>>>>
>>>>>>>>>> PS) members receive JOINED_AND_READY_EVENT from
>>>>>>>>>> MasterNode.processChangeEvent() except master.
>>>>>>>>>> Though there is no changes in view, master uses only
>>>>>>>>>> VIEW_CHANGE_EVENT for sending members JOINED_AND_READY_EVENT. I
>>>>>>>>>> think this is some strange.
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Bongjae Chang
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> ----- Original Message -----
>>>>>>>>>> *From:* Sheetal Vartak <mailto:Sheetal.Vartak_at_Sun.COM>
>>>>>>>>>> *To:* dev_at_shoal.dev.java.net <mailto:dev_at_shoal.dev.java.net>
>>>>>>>>>> *Sent:* Wednesday, June 11, 2008 4:25 AM
>>>>>>>>>> *Subject:* Re: [Shoal-Dev] Strange behavior about join
>>>>>>>>>> notifications.
>>>>>>>>>>
>>>>>>>>>> Hi Bongjae,
>>>>>>>>>>
>>>>>>>>>> Thanks for looking into this. Your previous code
>>>>>>>>>> changes look good and can be checked in. But
>>>>>>>>>> please wait for now since I am in the middle of integrating
>>>>>>>>>> the
>>>>>>>>>> Shoal code into Glassfish. Once I am done, I will let you know
>>>>>>>>>> when you can check in your changes.
>>>>>>>>>> For the new changes that you sent today, I will need
>>>>>>>>>> sometime to
>>>>>>>>>> review them due to some other issues I am looking at.
>>>>>>>>>>
>>>>>>>>>> Thanks a bunch for contributing.
>>>>>>>>>> Sheetal
>>>>>>>>>>
>>>>>>>>>> On Jun 10, 2008, at 8:32 AM, Bongjae Chang wrote:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> Hi Shreedhar.
>>>>>>>>>>> I also try to test members for a join notification in
>>>>>>>>>>> the
>>>>>>>>>>> concurrent case.
>>>>>>>>>>> In other words, when "A" and "B" joined the group
>>>>>>>>>>> concurrently ,
>>>>>>>>>>> some problems also occurred.
>>>>>>>>>>> (a) sometimes, join notifications are duplicated
>>>>>>>>>>> (b) sometimes, any member as well as group leader didn't
>>>>>>>>>>> receive
>>>>>>>>>>> some join notifications.
>>>>>>>>>>> The following is error log.
>>>>>>>>>>> ["A"'s log]
>>>>>>>>>>>
>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 11:04:58
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> runSimpleSample
>>>>>>>>>>> 정보: Starting SimpleJoinTest....
>>>>>>>>>>> 2008. 6. 10 오후 11:04:58
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> initializeGMS
>>>>>>>>>>> 정보: Initializing Shoal for member:
>>>>>>>>>>> a2ed5cb6-3cc7-4060-91d6-3fc8b6854049 group:TestGroup
>>>>>>>>>>> 2008. 6. 10 오후 11:04:58
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> runSimpleSample
>>>>>>>>>>> 정보: Registering for group event notifications
>>>>>>>>>>> 2008. 6. 10 오후 11:04:58
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> runSimpleSample
>>>>>>>>>>> 정보: Joining Group TestGroup
>>>>>>>>>>> 2008. 6. 10 오후 11:04:59
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> getMemberTokens
>>>>>>>>>>> 정보: GMS View Change Received for group TestGroup :
>>>>>>>>>>> Members in
>>>>>>>>>>> view for (before change analysis) are :
>>>>>>>>>>> 1: MemberId: a2ed5cb6-3cc7-4060-91d6-3fc8b6854049,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEC3B82201E1B545DB8E9ECF621244468F03
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 11:04:59
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> newViewObserved
>>>>>>>>>>> 정보: Analyzing new membership snapshot received as part
>>>>>>>>>>> of event
>>>>>>>>>>> : MASTER_CHANGE_EVENT
>>>>>>>>>>> 2008. 6. 10 오후 11:05:10
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> getMemberTokens
>>>>>>>>>>> 정보: GMS View Change Received for group TestGroup :
>>>>>>>>>>> Members in
>>>>>>>>>>> view for (before change analysis) are :
>>>>>>>>>>> 1: MemberId: e9d80499-0f8b-4e2d-8856-3f31dcc25f96,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE2E6E148CC1DB479EA7D0C6A0AF50B5A103
>>>>>>>>>>>
>>>>>>>>>>> 2: MemberId: a2ed5cb6-3cc7-4060-91d6-3fc8b6854049,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEC3B82201E1B545DB8E9ECF621244468F03
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 11:05:10
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> newViewObserved
>>>>>>>>>>> 정보: Analyzing new membership snapshot received as part
>>>>>>>>>>> of event
>>>>>>>>>>> : MASTER_CHANGE_EVENT
>>>>>>>>>>> 2008. 6. 10 오후 11:05:10
>>>>>>>>>>>
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>
>>>>>>>>>>> processNotification
>>>>>>>>>>> 정보: ****JoinNotification received: GroupLeader = false,
>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>> e9d80499-0f8b-4e2d-8856-3f31dcc25f96,
>>>>>>>>>>> ServerName = a2ed5cb6-3cc7-4060-91d6-3fc8b6854049, Leader =
>>>>>>>>>>> e9d80499-0f8b-4e2d-8856-3f31dcc25f96
>>>>>>>>>>> *2008. 6. 10 오후 11:05:10
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> getMemberTokens
>>>>>>>>>>> 정보: GMS View Change Received for group TestGroup :
>>>>>>>>>>> Members in
>>>>>>>>>>> view for (before change analysis) are :
>>>>>>>>>>> 1: MemberId: e9d80499-0f8b-4e2d-8856-3f31dcc25f96,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE2E6E148CC1DB479EA7D0C6A0AF50B5A103
>>>>>>>>>>>
>>>>>>>>>>> 2: MemberId: a2ed5cb6-3cc7-4060-91d6-3fc8b6854049,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEC3B82201E1B545DB8E9ECF621244468F03
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 11:05:10
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> newViewObserved
>>>>>>>>>>> 정보: Analyzing new membership snapshot received as part
>>>>>>>>>>> of event
>>>>>>>>>>> : ADD_EVENT
>>>>>>>>>>> 2008. 6. 10 오후 11:05:10
>>>>>>>>>>>
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>
>>>>>>>>>>> processNotification
>>>>>>>>>>> 정보: ****JoinNotification received: GroupLeader = false,
>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>> a2ed5cb6-3cc7-4060-91d6-3fc8b6854049,
>>>>>>>>>>> ServerName = a2ed5cb6-3cc7-4060-91d6-3fc8b6854049, Leader =
>>>>>>>>>>> e9d80499-0f8b-4e2d-8856-3f31dcc25f96
>>>>>>>>>>> *2008. 6. 10 오후 11:05:10
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> getMemberTokens
>>>>>>>>>>> 정보: GMS View Change Received for group TestGroup :
>>>>>>>>>>> Members in
>>>>>>>>>>> view for (before change analysis) are :
>>>>>>>>>>> 1: MemberId: e9d80499-0f8b-4e2d-8856-3f31dcc25f96,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE2E6E148CC1DB479EA7D0C6A0AF50B5A103
>>>>>>>>>>>
>>>>>>>>>>> 2: MemberId: a2ed5cb6-3cc7-4060-91d6-3fc8b6854049,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEC3B82201E1B545DB8E9ECF621244468F03
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 11:05:10
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> newViewObserved
>>>>>>>>>>> 정보: Analyzing new membership snapshot received as part
>>>>>>>>>>> of event
>>>>>>>>>>> : ADD_EVENT
>>>>>>>>>>> 2008. 6. 10 오후 11:05:10
>>>>>>>>>>>
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>
>>>>>>>>>>> processNotification
>>>>>>>>>>> 정보: ****JoinNotification received: GroupLeader = false,
>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>> a2ed5cb6-3cc7-4060-91d6-3fc8b6854049,
>>>>>>>>>>> ServerName = a2ed5cb6-3cc7-4060-91d6-3fc8b6854049, Leader =
>>>>>>>>>>> e9d80499-0f8b-4e2d-8856-3f31dcc25f96*
>>>>>>>>>>>
>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>
>>>>>>>>>>> "A" received duplicated
>>>>>>>>>>> JoinNotifications(a2ed5cb6-3cc7-4060-91d6-3fc8b6854049).
>>>>>>>>>>> ["B"'s log]
>>>>>>>>>>>
>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 11:04:54
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> runSimpleSample
>>>>>>>>>>> 정보: Starting SimpleJoinTest....
>>>>>>>>>>> 2008. 6. 10 오후 11:04:54
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> initializeGMS
>>>>>>>>>>> 정보: Initializing Shoal for member:
>>>>>>>>>>> e9d80499-0f8b-4e2d-8856-3f31dcc25f96 group:TestGroup
>>>>>>>>>>> 2008. 6. 10 오후 11:04:55
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> runSimpleSample
>>>>>>>>>>> 정보: Registering for group event notifications
>>>>>>>>>>> 2008. 6. 10 오후 11:04:55
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> runSimpleSample
>>>>>>>>>>> 정보: Joining Group TestGroup
>>>>>>>>>>> 2008. 6. 10 오후 11:04:56
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> getMemberTokens
>>>>>>>>>>> 정보: GMS View Change Received for group TestGroup :
>>>>>>>>>>> Members in
>>>>>>>>>>> view for (before change analysis) are :
>>>>>>>>>>> 1: MemberId: e9d80499-0f8b-4e2d-8856-3f31dcc25f96,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE2E6E148CC1DB479EA7D0C6A0AF50B5A103
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 11:04:56
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> newViewObserved
>>>>>>>>>>> 정보: Analyzing new membership snapshot received as part
>>>>>>>>>>> of event
>>>>>>>>>>> : MASTER_CHANGE_EVENT
>>>>>>>>>>> 2008. 6. 10 오후 11:05:01
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> getMemberTokens
>>>>>>>>>>> 정보: GMS View Change Received for group TestGroup :
>>>>>>>>>>> Members in
>>>>>>>>>>> view for (before change analysis) are :
>>>>>>>>>>> 1: MemberId: e9d80499-0f8b-4e2d-8856-3f31dcc25f96,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE2E6E148CC1DB479EA7D0C6A0AF50B5A103
>>>>>>>>>>>
>>>>>>>>>>> 2: MemberId: a2ed5cb6-3cc7-4060-91d6-3fc8b6854049,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEC3B82201E1B545DB8E9ECF621244468F03
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 11:05:01
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> newViewObserved
>>>>>>>>>>> 정보: Analyzing new membership snapshot received as part
>>>>>>>>>>> of event
>>>>>>>>>>> : MASTER_CHANGE_EVENT
>>>>>>>>>>> 2008. 6. 10 오후 11:05:04
>>>>>>>>>>>
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>
>>>>>>>>>>> processNotification
>>>>>>>>>>> 정보: ****JoinNotification received: GroupLeader = true,
>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>> a2ed5cb6-3cc7-4060-91d6-3fc8b6854049,
>>>>>>>>>>> ServerName = e9d80499-0f8b-4e2d-8856-3f31dcc25f96, Leader =
>>>>>>>>>>> e9d80499-0f8b-4e2d-8856-3f31dcc25f96
>>>>>>>>>>> *2008. 6. 10 오후 11:05:09
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> getMemberTokens
>>>>>>>>>>> 정보: GMS View Change Received for group TestGroup :
>>>>>>>>>>> Members in
>>>>>>>>>>> view for (before change analysis) are :
>>>>>>>>>>> 1: MemberId: e9d80499-0f8b-4e2d-8856-3f31dcc25f96,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE2E6E148CC1DB479EA7D0C6A0AF50B5A103
>>>>>>>>>>>
>>>>>>>>>>> 2: MemberId: a2ed5cb6-3cc7-4060-91d6-3fc8b6854049,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEC3B82201E1B545DB8E9ECF621244468F03
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 11:05:09
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> newViewObserved
>>>>>>>>>>> 정보: Analyzing new membership snapshot received as part
>>>>>>>>>>> of event
>>>>>>>>>>> : ADD_EVENT
>>>>>>>>>>> 2008. 6. 10 오후 11:05:12
>>>>>>>>>>>
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>
>>>>>>>>>>> processNotification
>>>>>>>>>>> 정보: ****JoinNotification received: GroupLeader = true,
>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>> a2ed5cb6-3cc7-4060-91d6-3fc8b6854049,
>>>>>>>>>>> ServerName = e9d80499-0f8b-4e2d-8856-3f31dcc25f96, Leader =
>>>>>>>>>>> e9d80499-0f8b-4e2d-8856-3f31dcc25f96
>>>>>>>>>>> *2008. 6. 10 오후 11:05:12
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> getMemberTokens
>>>>>>>>>>> 정보: GMS View Change Received for group TestGroup :
>>>>>>>>>>> Members in
>>>>>>>>>>> view for (before change analysis) are :
>>>>>>>>>>> 1: MemberId: e9d80499-0f8b-4e2d-8856-3f31dcc25f96,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE2E6E148CC1DB479EA7D0C6A0AF50B5A103
>>>>>>>>>>>
>>>>>>>>>>> 2: MemberId: a2ed5cb6-3cc7-4060-91d6-3fc8b6854049,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEC3B82201E1B545DB8E9ECF621244468F03
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 11:05:12
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> newViewObserved
>>>>>>>>>>> 정보: Analyzing new membership snapshot received as part
>>>>>>>>>>> of event
>>>>>>>>>>> : ADD_EVENT
>>>>>>>>>>> 2008. 6. 10 오후 11:05:15
>>>>>>>>>>>
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>
>>>>>>>>>>> processNotification
>>>>>>>>>>> 정보: ****JoinNotification received: GroupLeader = true,
>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>> a2ed5cb6-3cc7-4060-91d6-3fc8b6854049,
>>>>>>>>>>> ServerName = e9d80499-0f8b-4e2d-8856-3f31dcc25f96, Leader =
>>>>>>>>>>> e9d80499-0f8b-4e2d-8856-3f31dcc25f96
>>>>>>>>>>> *
>>>>>>>>>>>
>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>
>>>>>>>>>>> "B" also received duplicated
>>>>>>>>>>> JoinNotifications(a2ed5cb6-3cc7-4060-91d6-3fc8b6854049).
>>>>>>>>>>> And because "B" is group leader, "B" don't receive own join
>>>>>>>>>>> notification as I reported before.
>>>>>>>>>>> When "A", "B" and "C" joined the group
>>>>>>>>>>> concurrently, the
>>>>>>>>>>> following is error log
>>>>>>>>>>> ["A"'s log]
>>>>>>>>>>>
>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 10:17:41
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> runSimpleSample
>>>>>>>>>>> 정보: Starting SimpleJoinTest....
>>>>>>>>>>> 2008. 6. 10 오후 10:17:41
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> initializeGMS
>>>>>>>>>>> 정보: Initializing Shoal for member:
>>>>>>>>>>> 197c66d7-f56c-4119-8b1e-18dc330e39d3 group:TestGroup
>>>>>>>>>>> 2008. 6. 10 오후 10:17:41
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> runSimpleSample
>>>>>>>>>>> 정보: Registering for group event notifications
>>>>>>>>>>> 2008. 6. 10 오후 10:17:41
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> runSimpleSample
>>>>>>>>>>> 정보: Joining Group TestGroup
>>>>>>>>>>> 2008. 6. 10 오후 10:17:42
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> getMemberTokens
>>>>>>>>>>> 정보: GMS View Change Received for group TestGroup :
>>>>>>>>>>> Members in
>>>>>>>>>>> view for (before change analysis) are :
>>>>>>>>>>> 1: MemberId: 197c66d7-f56c-4119-8b1e-18dc330e39d3,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE7D33395A50CC479CAA67ACEEEBD3BDDC03
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 10:17:42
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> newViewObserved
>>>>>>>>>>> 정보: Analyzing new membership snapshot received as part
>>>>>>>>>>> of event
>>>>>>>>>>> : MASTER_CHANGE_EVENT
>>>>>>>>>>> 2008. 6. 10 오후 10:17:47
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> getMemberTokens
>>>>>>>>>>> 정보: GMS View Change Received for group TestGroup :
>>>>>>>>>>> Members in
>>>>>>>>>>> view for (before change analysis) are :
>>>>>>>>>>> 1: MemberId: 197c66d7-f56c-4119-8b1e-18dc330e39d3,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE7D33395A50CC479CAA67ACEEEBD3BDDC03
>>>>>>>>>>>
>>>>>>>>>>> 2: MemberId: 0c3c5b33-9a7d-4d85-ba1d-7a09a52d4e4b,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE9D818A456DA94CB5B53CB024FD26DA8B03
>>>>>>>>>>>
>>>>>>>>>>> 3: MemberId: 468996ee-2d54-4c58-af46-72d903154e31,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEBCDB7FE3F44D47DE944388A09B8081BE03
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 10:17:47
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> newViewObserved
>>>>>>>>>>> 정보: Analyzing new membership snapshot received as part
>>>>>>>>>>> of event
>>>>>>>>>>> : MASTER_CHANGE_EVENT
>>>>>>>>>>> 2008. 6. 10 오후 10:17:53
>>>>>>>>>>>
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>
>>>>>>>>>>> processNotification
>>>>>>>>>>> 정보: ****JoinNotification received: GroupLeader = true,
>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>> 0c3c5b33-9a7d-4d85-ba1d-7a09a52d4e4b,
>>>>>>>>>>> ServerName = 197c66d7-f56c-4119-8b1e-18dc330e39d3, Leader =
>>>>>>>>>>> 197c66d7-f56c-4119-8b1e-18dc330e39d3
>>>>>>>>>>> *2008. 6. 10 오후 10:17:53
>>>>>>>>>>>
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>
>>>>>>>>>>> processNotification
>>>>>>>>>>> 정보: ****JoinNotification received: GroupLeader = true,
>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>> 468996ee-2d54-4c58-af46-72d903154e31,
>>>>>>>>>>> ServerName = 197c66d7-f56c-4119-8b1e-18dc330e39d3, Leader =
>>>>>>>>>>> 197c66d7-f56c-4119-8b1e-18dc330e39d3
>>>>>>>>>>>
>>>>>>>>>>> *------------------------------------------------------------------------
>>>>>>>>>>>
>>>>>>>>>>> ["B"'s log]
>>>>>>>>>>>
>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 10:17:41
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> runSimpleSample
>>>>>>>>>>> 정보: Starting SimpleJoinTest....
>>>>>>>>>>> 2008. 6. 10 오후 10:17:41
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> initializeGMS
>>>>>>>>>>> 정보: Initializing Shoal for member:
>>>>>>>>>>> 0c3c5b33-9a7d-4d85-ba1d-7a09a52d4e4b group:TestGroup
>>>>>>>>>>> 2008. 6. 10 오후 10:17:41
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> runSimpleSample
>>>>>>>>>>> 정보: Registering for group event notifications
>>>>>>>>>>> 2008. 6. 10 오후 10:17:41
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> runSimpleSample
>>>>>>>>>>> 정보: Joining Group TestGroup
>>>>>>>>>>> 2008. 6. 10 오후 10:17:42
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> getMemberTokens
>>>>>>>>>>> 정보: GMS View Change Received for group TestGroup :
>>>>>>>>>>> Members in
>>>>>>>>>>> view for (before change analysis) are :
>>>>>>>>>>> 1: MemberId: 0c3c5b33-9a7d-4d85-ba1d-7a09a52d4e4b,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE9D818A456DA94CB5B53CB024FD26DA8B03
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 10:17:42
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> newViewObserved
>>>>>>>>>>> 정보: Analyzing new membership snapshot received as part
>>>>>>>>>>> of event
>>>>>>>>>>> : MASTER_CHANGE_EVENT
>>>>>>>>>>> 2008. 6. 10 오후 10:17:47
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> getMemberTokens
>>>>>>>>>>> 정보: GMS View Change Received for group TestGroup :
>>>>>>>>>>> Members in
>>>>>>>>>>> view for (before change analysis) are :
>>>>>>>>>>> 1: MemberId: 197c66d7-f56c-4119-8b1e-18dc330e39d3,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE7D33395A50CC479CAA67ACEEEBD3BDDC03
>>>>>>>>>>>
>>>>>>>>>>> 2: MemberId: 0c3c5b33-9a7d-4d85-ba1d-7a09a52d4e4b,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE9D818A456DA94CB5B53CB024FD26DA8B03
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 10:17:47
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> newViewObserved
>>>>>>>>>>> 정보: Analyzing new membership snapshot received as part
>>>>>>>>>>> of event
>>>>>>>>>>> : MASTER_CHANGE_EVENT
>>>>>>>>>>> 2008. 6. 10 오후 10:17:47
>>>>>>>>>>>
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>
>>>>>>>>>>> processNotification
>>>>>>>>>>> 정보: ****JoinNotification received: GroupLeader = false,
>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>> 197c66d7-f56c-4119-8b1e-18dc330e39d3,
>>>>>>>>>>> ServerName = 0c3c5b33-9a7d-4d85-ba1d-7a09a52d4e4b, Leader =
>>>>>>>>>>> 197c66d7-f56c-4119-8b1e-18dc330e39d3
>>>>>>>>>>> *2008. 6. 10 오후 10:17:47
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> getMemberTokens
>>>>>>>>>>> 정보: GMS View Change Received for group TestGroup :
>>>>>>>>>>> Members in
>>>>>>>>>>> view for (before change analysis) are :
>>>>>>>>>>> 1: MemberId: 197c66d7-f56c-4119-8b1e-18dc330e39d3,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE7D33395A50CC479CAA67ACEEEBD3BDDC03
>>>>>>>>>>>
>>>>>>>>>>> 2: MemberId: 0c3c5b33-9a7d-4d85-ba1d-7a09a52d4e4b,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE9D818A456DA94CB5B53CB024FD26DA8B03
>>>>>>>>>>>
>>>>>>>>>>> 3: MemberId: 468996ee-2d54-4c58-af46-72d903154e31,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEBCDB7FE3F44D47DE944388A09B8081BE03
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 10:17:47
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> newViewObserved
>>>>>>>>>>> 정보: Analyzing new membership snapshot received as part
>>>>>>>>>>> of event
>>>>>>>>>>> : MASTER_CHANGE_EVENT
>>>>>>>>>>> 2008. 6. 10 오후 10:17:47
>>>>>>>>>>>
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>
>>>>>>>>>>> processNotification
>>>>>>>>>>> 정보: ****JoinNotification received: GroupLeader = false,
>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>> 468996ee-2d54-4c58-af46-72d903154e31,
>>>>>>>>>>> ServerName = 0c3c5b33-9a7d-4d85-ba1d-7a09a52d4e4b, Leader =
>>>>>>>>>>> 197c66d7-f56c-4119-8b1e-18dc330e39d3*
>>>>>>>>>>>
>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>
>>>>>>>>>>> ["C"'s log]
>>>>>>>>>>>
>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 10:17:42
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> runSimpleSample
>>>>>>>>>>> 정보: Starting SimpleJoinTest....
>>>>>>>>>>> 2008. 6. 10 오후 10:17:42
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> initializeGMS
>>>>>>>>>>> 정보: Initializing Shoal for member:
>>>>>>>>>>> 468996ee-2d54-4c58-af46-72d903154e31 group:TestGroup
>>>>>>>>>>> 2008. 6. 10 오후 10:17:42
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> runSimpleSample
>>>>>>>>>>> 정보: Registering for group event notifications
>>>>>>>>>>> 2008. 6. 10 오후 10:17:42
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>> runSimpleSample
>>>>>>>>>>> 정보: Joining Group TestGroup
>>>>>>>>>>> 2008. 6. 10 오후 10:17:43
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> getMemberTokens
>>>>>>>>>>> 정보: GMS View Change Received for group TestGroup :
>>>>>>>>>>> Members in
>>>>>>>>>>> view for (before change analysis) are :
>>>>>>>>>>> 1: MemberId: 468996ee-2d54-4c58-af46-72d903154e31,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEBCDB7FE3F44D47DE944388A09B8081BE03
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 10:17:43
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> newViewObserved
>>>>>>>>>>> 정보: Analyzing new membership snapshot received as part
>>>>>>>>>>> of event
>>>>>>>>>>> : MASTER_CHANGE_EVENT
>>>>>>>>>>> 2008. 6. 10 오후 10:17:47
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> getMemberTokens
>>>>>>>>>>> 정보: GMS View Change Received for group TestGroup :
>>>>>>>>>>> Members in
>>>>>>>>>>> view for (before change analysis) are :
>>>>>>>>>>> 1: MemberId: 197c66d7-f56c-4119-8b1e-18dc330e39d3,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE7D33395A50CC479CAA67ACEEEBD3BDDC03
>>>>>>>>>>>
>>>>>>>>>>> 2: MemberId: 468996ee-2d54-4c58-af46-72d903154e31,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEBCDB7FE3F44D47DE944388A09B8081BE03
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 10:17:47
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> newViewObserved
>>>>>>>>>>> 정보: Analyzing new membership snapshot received as part
>>>>>>>>>>> of event
>>>>>>>>>>> : MASTER_CHANGE_EVENT
>>>>>>>>>>> 2008. 6. 10 오후 10:17:47
>>>>>>>>>>>
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>
>>>>>>>>>>> processNotification
>>>>>>>>>>> 정보: ****JoinNotification received: GroupLeader = false,
>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>> 197c66d7-f56c-4119-8b1e-18dc330e39d3,
>>>>>>>>>>> ServerName = 468996ee-2d54-4c58-af46-72d903154e31, Leader =
>>>>>>>>>>> 197c66d7-f56c-4119-8b1e-18dc330e39d3
>>>>>>>>>>> *2008. 6. 10 오후 10:17:47
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> getMemberTokens
>>>>>>>>>>> 정보: GMS View Change Received for group TestGroup :
>>>>>>>>>>> Members in
>>>>>>>>>>> view for (before change analysis) are :
>>>>>>>>>>> 1: MemberId: 197c66d7-f56c-4119-8b1e-18dc330e39d3,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE7D33395A50CC479CAA67ACEEEBD3BDDC03
>>>>>>>>>>>
>>>>>>>>>>> 2: MemberId: 0c3c5b33-9a7d-4d85-ba1d-7a09a52d4e4b,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE9D818A456DA94CB5B53CB024FD26DA8B03
>>>>>>>>>>>
>>>>>>>>>>> 3: MemberId: 468996ee-2d54-4c58-af46-72d903154e31,
>>>>>>>>>>> MemberType:
>>>>>>>>>>> CORE, Address:
>>>>>>>>>>>
>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEBCDB7FE3F44D47DE944388A09B8081BE03
>>>>>>>>>>>
>>>>>>>>>>> 2008. 6. 10 오후 10:17:47
>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>> newViewObserved
>>>>>>>>>>> 정보: Analyzing new membership snapshot received as part
>>>>>>>>>>> of event
>>>>>>>>>>> : MASTER_CHANGE_EVENT
>>>>>>>>>>> 2008. 6. 10 오후 10:17:47
>>>>>>>>>>>
>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>
>>>>>>>>>>> processNotification
>>>>>>>>>>> 정보: ****JoinNotification received: GroupLeader = false,
>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>> 0c3c5b33-9a7d-4d85-ba1d-7a09a52d4e4b,
>>>>>>>>>>> ServerName = 468996ee-2d54-4c58-af46-72d903154e31, Leader =
>>>>>>>>>>> 197c66d7-f56c-4119-8b1e-18dc330e39d3
>>>>>>>>>>>
>>>>>>>>>>> *------------------------------------------------------------------------
>>>>>>>>>>>
>>>>>>>>>>> All members missed some join notification.
>>>>>>>>>>> I also tried to fix these problems.
>>>>>>>>>>> I think it is so difficult that I explain all contents in
>>>>>>>>>>> detail
>>>>>>>>>>> about solutions.
>>>>>>>>>>> So I attached patch codes included comments. When I
>>>>>>>>>>> try to test it, it seems that all problems which I
>>>>>>>>>>> reported till now are fixed.
>>>>>>>>>>> If you can afford to review these codes, please point
>>>>>>>>>>> out my
>>>>>>>>>>> mistakes.
>>>>>>>>>>> I hope this patch will be of a little help and I am looking
>>>>>>>>>>> forward to your feedback.
>>>>>>>>>>> Thanks.
>>>>>>>>>>> --
>>>>>>>>>>> Bongjae Chang
>>>>>>>>>>> ----- Original Message -----
>>>>>>>>>>> *From:* Bongjae Chang <mailto:carryel_at_korea.com>
>>>>>>>>>>> *To:* dev_at_shoal.dev.java.net
>>>>>>>>>>> <mailto:dev_at_shoal.dev.java.net>
>>>>>>>>>>> *Sent:* Friday, June 06, 2008 1:07 AM
>>>>>>>>>>> *Subject:* Re: [Shoal-Dev] Strange behavior about join
>>>>>>>>>>> notifications.
>>>>>>>>>>>
>>>>>>>>>>> Hi Shreedhar.
>>>>>>>>>>> I attached my patch. Attached files are
>>>>>>>>>>> MasterNode.java and
>>>>>>>>>>> ClusterViewManager.java
>>>>>>>>>>> In MasterNode.java, only
>>>>>>>>>>> /processMasterNodeResponse()/
>>>>>>>>>>> method changed.
>>>>>>>>>>> In ClusterViewManager.java, /setMaster( List ,
>>>>>>>>>>> SystemAdvertisement)/ and /addToView( List )/ method
>>>>>>>>>>> added newly.
>>>>>>>>>>> I made effort to preserve original logic and
>>>>>>>>>>> codes if possible.
>>>>>>>>>>> Thanks.
>>>>>>>>>>> --
>>>>>>>>>>> Bongjae Chang
>>>>>>>>>>> ----- Original Message -----
>>>>>>>>>>> *From:* Shreedhar Ganapathy
>>>>>>>>>>> <mailto:Shreedhar.Ganapathy_at_Sun.COM>
>>>>>>>>>>> *To:* dev_at_shoal.dev.java.net
>>>>>>>>>>> <mailto:dev_at_shoal.dev.java.net>
>>>>>>>>>>> *Sent:* Thursday, June 05, 2008 11:32 PM
>>>>>>>>>>> *Subject:* Re: [Shoal-Dev] Strange behavior about
>>>>>>>>>>> join
>>>>>>>>>>> notifications.
>>>>>>>>>>>
>>>>>>>>>>> Excellent investigation!
>>>>>>>>>>> Solution sounds reasonably good.
>>>>>>>>>>> Could you send us a patch and we can try it out in
>>>>>>>>>>> our
>>>>>>>>>>> internal test setup?
>>>>>>>>>>>
>>>>>>>>>>> Bongjae Chang wrote:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>> I reviewed join notification's logic
>>>>>>>>>>>> about (b).
>>>>>>>>>>>> /(b) when new member joined, this
>>>>>>>>>>>> member don't receive
>>>>>>>>>>>> some members' join notifications.(In other words,
>>>>>>>>>>>> this
>>>>>>>>>>>> member receives only own notification and group
>>>>>>>>>>>> leader's
>>>>>>>>>>>> notification)/
>>>>>>>>>>>> This is normal case. e.g) member
>>>>>>>>>>>> "B"'s behavior
>>>>>>>>>>>> 1. When new member("C") joins the
>>>>>>>>>>>> group, the group
>>>>>>>>>>>> leader(master) sends MASTERNODERESPONSE to group
>>>>>>>>>>>> members
>>>>>>>>>>>> with ADD_EVENT(about "C") and own view's snapshot
>>>>>>>>>>>> finally.
>>>>>>>>>>>> 2. Members receive
>>>>>>>>>>>> MASTERNODERESPONSE and process
>>>>>>>>>>>> processMasterNodeResponse().
>>>>>>>>>>>> 3. In processMasterNodeResponse(),
>>>>>>>>>>>> ADD_EVENT notified
>>>>>>>>>>>> with master view's snapshot by ClusterViewManager.
>>>>>>>>>>>> 4. Then, ViewWindow analyzes the
>>>>>>>>>>>> event packet(ADD_EVENT).
>>>>>>>>>>>> 5. Finally, members receive a join
>>>>>>>>>>>> notification about
>>>>>>>>>>>> new member(about "C").
>>>>>>>>>>>> But In new
>>>>>>>>>>>> memeber("C"), some problem occurred. There is
>>>>>>>>>>>> no logic about notifying other members'
>>>>>>>>>>>> ADD_EVENT(about "B")
>>>>>>>>>>>> 1. When new member("C") joins the
>>>>>>>>>>>> group, the group
>>>>>>>>>>>> leader(master) sends MASTERNODERESPONSE to group
>>>>>>>>>>>> members
>>>>>>>>>>>> with ADD_EVENT and own view's snapshot
>>>>>>>>>>>> finally.[same above]
>>>>>>>>>>>> 2. "C" receive MASTERNODERESPONSE
>>>>>>>>>>>> and process
>>>>>>>>>>>> processMasterNodeResponse()[same above]
>>>>>>>>>>>> 3. In processMasterNodeResponse(),
>>>>>>>>>>>> MASTER_CHANGE_EVENT
>>>>>>>>>>>> notified *without master view's snapshot* because
>>>>>>>>>>>> current master is self.
>>>>>>>>>>>> 4. Then, ViewWindow analyzes the event
>>>>>>>>>>>> packet(MASTER_CHANGE_EVENT). Of course when
>>>>>>>>>>>> ViewWindow receives MASTER_CHANGE_EVENT, ViewWindow
>>>>>>>>>>>> notifies join notifications based on view history if
>>>>>>>>>>>> previous view doesn't have any members. Maybe
>>>>>>>>>>>> this is
>>>>>>>>>>>> the logic for notifying other members' join
>>>>>>>>>>>> notifications in new member("C"). But *current
>>>>>>>>>>>> view based on event packet(MASTER_CHANGE_EVENT)
>>>>>>>>>>>> is not
>>>>>>>>>>>> master view unfortunately*. Current view has only
>>>>>>>>>>>> "C"'s
>>>>>>>>>>>> local view(currently only master member and own
>>>>>>>>>>>> member
>>>>>>>>>>>> added). So only master's join notification occurred.
>>>>>>>>>>>> 5. In processMasterNodeResponse(), ADD_EVENT
>>>>>>>>>>>> notified
>>>>>>>>>>>> with master view's snapshot by
>>>>>>>>>>>> ClusterViewManager.[same
>>>>>>>>>>>> above]
>>>>>>>>>>>> 6. Then, ViewWindow analyzes the event
>>>>>>>>>>>> packet(ADD_EVENT).[same above]
>>>>>>>>>>>> 7. new member("C") receives own join
>>>>>>>>>>>> notification.[same
>>>>>>>>>>>> above]
>>>>>>>>>>>> So, I
>>>>>>>>>>>> think this problem can be fixed *if
>>>>>>>>>>>> MASTER_CHANGE_EVENT notified with master view's
>>>>>>>>>>>> snapshot
>>>>>>>>>>>> *above 3. Then above 4, ViewWindow can find that
>>>>>>>>>>>> previous view doesn't have other members as well as
>>>>>>>>>>>> master member. And then above 5, In
>>>>>>>>>>>> processMasterNode(),
>>>>>>>>>>>> ClusterViewManager can notifies only ADD_EVENT
>>>>>>>>>>>> without
>>>>>>>>>>>> master view's snapshot because MASTER_CHANGE_EVENT
>>>>>>>>>>>> included master view's snapshot already notified .
>>>>>>>>>>>> Actually, I tried to apply this
>>>>>>>>>>>> patch, I could verify
>>>>>>>>>>>> that this problem(b) is resolved.
>>>>>>>>>>>> If this issue(b) is indentified as a
>>>>>>>>>>>> bug and my
>>>>>>>>>>>> suggestion doesn't have a mistake or error
>>>>>>>>>>>> logically, I
>>>>>>>>>>>> will send the patch code to the dev alias.
>>>>>>>>>>>> Please point out mistakes and I ask
>>>>>>>>>>>> you for advice.
>>>>>>>>>>>> Thanks.
>>>>>>>>>>>> --
>>>>>>>>>>>> Bongjae Chang
>>>>>>>>>>>> ----- Original
>>>>>>>>>>>> Message -----
>>>>>>>>>>>> *From:* Bongjae Chang <mailto:carryel_at_korea.com>
>>>>>>>>>>>> *To:* dev_at_shoal.dev.java.net
>>>>>>>>>>>> <mailto:dev_at_shoal.dev.java.net>
>>>>>>>>>>>> *Sent:* Thursday, June 05, 2008 2:38 PM
>>>>>>>>>>>> *Subject:* [Shoal-Dev] Strange behavior about
>>>>>>>>>>>> join
>>>>>>>>>>>> notifications.
>>>>>>>>>>>>
>>>>>>>>>>>> Hi.
>>>>>>>>>>>> When I tried to test join notifications, I
>>>>>>>>>>>> found some problems.
>>>>>>>>>>>> Assuming that "A", "B" and
>>>>>>>>>>>> "C" are members in
>>>>>>>>>>>> "TestGroup". Sometimes when new member join,
>>>>>>>>>>>> this
>>>>>>>>>>>> member can't receive join notifications of
>>>>>>>>>>>> others
>>>>>>>>>>>> that already joined.
>>>>>>>>>>>> This scenario is following.
>>>>>>>>>>>> 1. First, "A" joined and became a group leader.
>>>>>>>>>>>> 2. after 1, "B" joined. Then "B" received
>>>>>>>>>>>> "A"'s a
>>>>>>>>>>>> join notification and own("C") join
>>>>>>>>>>>> notification in
>>>>>>>>>>>> "B". No problem.
>>>>>>>>>>>> 3. after 2, "C" joined. At this time, "C" must
>>>>>>>>>>>> receive "A", "B" and "C" join notifications
>>>>>>>>>>>> in "C".
>>>>>>>>>>>> But "C" didn't receive "B"'s a join
>>>>>>>>>>>> notification.
>>>>>>>>>>>> Like above, assuming that
>>>>>>>>>>>> "A", "B", "C" and "D" are
>>>>>>>>>>>> members in "TestGroup", "D" didn't receive
>>>>>>>>>>>> "B" and
>>>>>>>>>>>> "C"'s join notifications.
>>>>>>>>>>>> I think there are some bugs.
>>>>>>>>>>>> (a) above 1, the group leader don't receive
>>>>>>>>>>>> own join
>>>>>>>>>>>> notification.
>>>>>>>>>>>> (b) above 3, when new member joined, this member
>>>>>>>>>>>> don't receive some members' join
>>>>>>>>>>>> notifications.(In
>>>>>>>>>>>> other words, this member receives only own
>>>>>>>>>>>> notification and group leader's notification)
>>>>>>>>>>>> You can also see this result
>>>>>>>>>>>> from following logs.
>>>>>>>>>>>> /"A"(the group leader): member
>>>>>>>>>>>> id="6a92713c-d83e-49a8-8aaa-ad12046a1acb"/
>>>>>>>>>>>> /"B": member
>>>>>>>>>>>> id="77ff0a1c-b9a1-417a-b04c-0028ef6da921"/
>>>>>>>>>>>> /"C": member
>>>>>>>>>>>> id="6a8e7161-92ef-4b9e-a5e1-d9a8c7665b4a"/
>>>>>>>>>>>> /When memebers receive a join notification,
>>>>>>>>>>>> "***JoinNotification received: ServerName =
>>>>>>>>>>>> [MY_MEMBER_ID], Signal.getMemberToken() =
>>>>>>>>>>>> [MEMBER_ID]" printed./
>>>>>>>>>>>> ["A"'s log]
>>>>>>>>>>>>
>>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>>
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:17
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>>> runSimpleSample
>>>>>>>>>>>> 정보: Starting SimpleJoinTest....
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:18
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>>> initializeGMS
>>>>>>>>>>>> 정보: Initializing Shoal for member:
>>>>>>>>>>>> 6a92713c-d83e-49a8-8aaa-ad12046a1acb
>>>>>>>>>>>> group:TestGroup
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:18
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>>> runSimpleSample
>>>>>>>>>>>> 정보: Registering for group event notifications
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:18
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>>> runSimpleSample
>>>>>>>>>>>> 정보: Joining Group TestGroup
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:18
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> getMemberTokens
>>>>>>>>>>>> 정보: GMS View Change Received for group
>>>>>>>>>>>> TestGroup :
>>>>>>>>>>>> Members in view for (before change analysis)
>>>>>>>>>>>> are :
>>>>>>>>>>>> 1: MemberId:
>>>>>>>>>>>> 6a92713c-d83e-49a8-8aaa-ad12046a1acb,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE15F3706F0E794BF595FCEE9EEA90FCE103
>>>>>>>>>>>>
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:18
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> newViewObserved
>>>>>>>>>>>> 정보: Analyzing new membership snapshot
>>>>>>>>>>>> received as
>>>>>>>>>>>> part of event : MASTER_CHANGE_EVENT
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:41
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> getMemberTokens
>>>>>>>>>>>> 정보: GMS View Change Received for group
>>>>>>>>>>>> TestGroup :
>>>>>>>>>>>> Members in view for (before change analysis)
>>>>>>>>>>>> are :
>>>>>>>>>>>> 1: MemberId:
>>>>>>>>>>>> 6a92713c-d83e-49a8-8aaa-ad12046a1acb,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE15F3706F0E794BF595FCEE9EEA90FCE103
>>>>>>>>>>>>
>>>>>>>>>>>> 2: MemberId:
>>>>>>>>>>>> 77ff0a1c-b9a1-417a-b04c-0028ef6da921,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEC9482BF0C6A44D55B407E7E3A8D1339803
>>>>>>>>>>>>
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:41
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> newViewObserved
>>>>>>>>>>>> 정보: Analyzing new membership snapshot
>>>>>>>>>>>> received as
>>>>>>>>>>>> part of event : ADD_EVENT
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:44
>>>>>>>>>>>>
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>>
>>>>>>>>>>>> processNotification
>>>>>>>>>>>> *정보: ***JoinNotification received:
>>>>>>>>>>>> ServerName =
>>>>>>>>>>>> 6a92713c-d83e-49a8-8aaa-ad12046a1acb,
>>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>>> 77ff0a1c-b9a1-417a-b04c-0028ef6da921
>>>>>>>>>>>> *2008. 6. 5 오후 1:37:00
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> getMemberTokens
>>>>>>>>>>>> 정보: GMS View Change Received for group
>>>>>>>>>>>> TestGroup :
>>>>>>>>>>>> Members in view for (before change analysis)
>>>>>>>>>>>> are :
>>>>>>>>>>>> 1: MemberId:
>>>>>>>>>>>> 6a8e7161-92ef-4b9e-a5e1-d9a8c7665b4a,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE0F6B7D5CD8CC447180F2D059E273AD5103
>>>>>>>>>>>>
>>>>>>>>>>>> 2: MemberId:
>>>>>>>>>>>> 6a92713c-d83e-49a8-8aaa-ad12046a1acb,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE15F3706F0E794BF595FCEE9EEA90FCE103
>>>>>>>>>>>>
>>>>>>>>>>>> 3: MemberId:
>>>>>>>>>>>> 77ff0a1c-b9a1-417a-b04c-0028ef6da921,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEC9482BF0C6A44D55B407E7E3A8D1339803
>>>>>>>>>>>>
>>>>>>>>>>>> 2008. 6. 5 오후 1:37:00
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> newViewObserved
>>>>>>>>>>>> 정보: Analyzing new membership snapshot
>>>>>>>>>>>> received as
>>>>>>>>>>>> part of event : ADD_EVENT
>>>>>>>>>>>> 2008. 6. 5 오후 1:37:03
>>>>>>>>>>>>
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>>
>>>>>>>>>>>> processNotification
>>>>>>>>>>>> *정보: ***JoinNotification received:
>>>>>>>>>>>> ServerName =
>>>>>>>>>>>> 6a92713c-d83e-49a8-8aaa-ad12046a1acb,
>>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>>> 6a8e7161-92ef-4b9e-a5e1-d9a8c7665b4a*
>>>>>>>>>>>>
>>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>>
>>>>>>>>>>>> "A"'s log don't have own join
>>>>>>>>>>>>
>>>>>>>>>>>> notification(6a92713c-d83e-49a8-8aaa-ad12046a1acb).
>>>>>>>>>>>> ["B"'s log]
>>>>>>>>>>>>
>>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>>
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:40
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>>> runSimpleSample
>>>>>>>>>>>> 정보: Starting SimpleJoinTest....
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:40
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>>> initializeGMS
>>>>>>>>>>>> 정보: Initializing Shoal for member:
>>>>>>>>>>>> 77ff0a1c-b9a1-417a-b04c-0028ef6da921
>>>>>>>>>>>> group:TestGroup
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:40
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>>> runSimpleSample
>>>>>>>>>>>> 정보: Registering for group event notifications
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:40
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>>> runSimpleSample
>>>>>>>>>>>> 정보: Joining Group TestGroup
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:41
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> getMemberTokens
>>>>>>>>>>>> 정보: GMS View Change Received for group
>>>>>>>>>>>> TestGroup :
>>>>>>>>>>>> Members in view for (before change analysis)
>>>>>>>>>>>> are :
>>>>>>>>>>>> 1: MemberId:
>>>>>>>>>>>> 77ff0a1c-b9a1-417a-b04c-0028ef6da921,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEC9482BF0C6A44D55B407E7E3A8D1339803
>>>>>>>>>>>>
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:41
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> newViewObserved
>>>>>>>>>>>> 정보: Analyzing new membership snapshot
>>>>>>>>>>>> received as
>>>>>>>>>>>> part of event : MASTER_CHANGE_EVENT
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:41
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> getMemberTokens
>>>>>>>>>>>> 정보: GMS View Change Received for group
>>>>>>>>>>>> TestGroup :
>>>>>>>>>>>> Members in view for (before change analysis)
>>>>>>>>>>>> are :
>>>>>>>>>>>> 1: MemberId:
>>>>>>>>>>>> 6a92713c-d83e-49a8-8aaa-ad12046a1acb,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE15F3706F0E794BF595FCEE9EEA90FCE103
>>>>>>>>>>>>
>>>>>>>>>>>> 2: MemberId:
>>>>>>>>>>>> 77ff0a1c-b9a1-417a-b04c-0028ef6da921,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEC9482BF0C6A44D55B407E7E3A8D1339803
>>>>>>>>>>>>
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:41
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> newViewObserved
>>>>>>>>>>>> 정보: Analyzing new membership snapshot
>>>>>>>>>>>> received as
>>>>>>>>>>>> part of event : MASTER_CHANGE_EVENT
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:41
>>>>>>>>>>>>
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>>
>>>>>>>>>>>> processNotification
>>>>>>>>>>>> *정보: ***JoinNotification received:
>>>>>>>>>>>> ServerName =
>>>>>>>>>>>> 77ff0a1c-b9a1-417a-b04c-0028ef6da921,
>>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>>> 6a92713c-d83e-49a8-8aaa-ad12046a1acb
>>>>>>>>>>>> *2008. 6. 5 오후 1:36:41
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> getMemberTokens
>>>>>>>>>>>> 정보: GMS View Change Received for group
>>>>>>>>>>>> TestGroup :
>>>>>>>>>>>> Members in view for (before change analysis)
>>>>>>>>>>>> are :
>>>>>>>>>>>> 1: MemberId:
>>>>>>>>>>>> 6a92713c-d83e-49a8-8aaa-ad12046a1acb,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE15F3706F0E794BF595FCEE9EEA90FCE103
>>>>>>>>>>>>
>>>>>>>>>>>> 2: MemberId:
>>>>>>>>>>>> 77ff0a1c-b9a1-417a-b04c-0028ef6da921,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEC9482BF0C6A44D55B407E7E3A8D1339803
>>>>>>>>>>>>
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:41
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> newViewObserved
>>>>>>>>>>>> 정보: Analyzing new membership snapshot
>>>>>>>>>>>> received as
>>>>>>>>>>>> part of event : ADD_EVENT
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:41
>>>>>>>>>>>>
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>>
>>>>>>>>>>>> processNotification
>>>>>>>>>>>> *정보: ***JoinNotification received:
>>>>>>>>>>>> ServerName =
>>>>>>>>>>>> 77ff0a1c-b9a1-417a-b04c-0028ef6da921,
>>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>>> 77ff0a1c-b9a1-417a-b04c-0028ef6da921
>>>>>>>>>>>> *2008. 6. 5 오후 1:37:00
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> getMemberTokens
>>>>>>>>>>>> 정보: GMS View Change Received for group
>>>>>>>>>>>> TestGroup :
>>>>>>>>>>>> Members in view for (before change analysis)
>>>>>>>>>>>> are :
>>>>>>>>>>>> 1: MemberId:
>>>>>>>>>>>> 6a8e7161-92ef-4b9e-a5e1-d9a8c7665b4a,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE0F6B7D5CD8CC447180F2D059E273AD5103
>>>>>>>>>>>>
>>>>>>>>>>>> 2: MemberId:
>>>>>>>>>>>> 6a92713c-d83e-49a8-8aaa-ad12046a1acb,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE15F3706F0E794BF595FCEE9EEA90FCE103
>>>>>>>>>>>>
>>>>>>>>>>>> 3: MemberId:
>>>>>>>>>>>> 77ff0a1c-b9a1-417a-b04c-0028ef6da921,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEC9482BF0C6A44D55B407E7E3A8D1339803
>>>>>>>>>>>>
>>>>>>>>>>>> 2008. 6. 5 오후 1:37:00
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> newViewObserved
>>>>>>>>>>>> 정보: Analyzing new membership snapshot
>>>>>>>>>>>> received as
>>>>>>>>>>>> part of event : ADD_EVENT
>>>>>>>>>>>> 2008. 6. 5 오후 1:37:00
>>>>>>>>>>>>
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>>
>>>>>>>>>>>> processNotification
>>>>>>>>>>>> *정보: ***JoinNotification received:
>>>>>>>>>>>> ServerName =
>>>>>>>>>>>> 77ff0a1c-b9a1-417a-b04c-0028ef6da921,
>>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>>> 6a8e7161-92ef-4b9e-a5e1-d9a8c7665b4a*
>>>>>>>>>>>>
>>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>>
>>>>>>>>>>>> ["C"'s log]
>>>>>>>>>>>>
>>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>>
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:59
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>>> runSimpleSample
>>>>>>>>>>>> 정보: Starting SimpleJoinTest....
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:59
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>>> initializeGMS
>>>>>>>>>>>> 정보: Initializing Shoal for member:
>>>>>>>>>>>> 6a8e7161-92ef-4b9e-a5e1-d9a8c7665b4a
>>>>>>>>>>>> group:TestGroup
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:59
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>>> runSimpleSample
>>>>>>>>>>>> 정보: Registering for group event notifications
>>>>>>>>>>>> 2008. 6. 5 오후 1:36:59
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest
>>>>>>>>>>>> runSimpleSample
>>>>>>>>>>>> 정보: Joining Group TestGroup
>>>>>>>>>>>> 2008. 6. 5 오후 1:37:00
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> getMemberTokens
>>>>>>>>>>>> 정보: GMS View Change Received for group
>>>>>>>>>>>> TestGroup :
>>>>>>>>>>>> Members in view for (before change analysis)
>>>>>>>>>>>> are :
>>>>>>>>>>>> 1: MemberId:
>>>>>>>>>>>> 6a8e7161-92ef-4b9e-a5e1-d9a8c7665b4a,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE0F6B7D5CD8CC447180F2D059E273AD5103
>>>>>>>>>>>>
>>>>>>>>>>>> 2008. 6. 5 오후 1:37:00
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> newViewObserved
>>>>>>>>>>>> 정보: Analyzing new membership snapshot
>>>>>>>>>>>> received as
>>>>>>>>>>>> part of event : MASTER_CHANGE_EVENT
>>>>>>>>>>>> 2008. 6. 5 오후 1:37:00
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> getMemberTokens
>>>>>>>>>>>> 정보: GMS View Change Received for group
>>>>>>>>>>>> TestGroup :
>>>>>>>>>>>> Members in view for (before change analysis)
>>>>>>>>>>>> are :
>>>>>>>>>>>> 1: MemberId:
>>>>>>>>>>>> 6a8e7161-92ef-4b9e-a5e1-d9a8c7665b4a,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE0F6B7D5CD8CC447180F2D059E273AD5103
>>>>>>>>>>>>
>>>>>>>>>>>> 2: MemberId:
>>>>>>>>>>>> 6a92713c-d83e-49a8-8aaa-ad12046a1acb,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE15F3706F0E794BF595FCEE9EEA90FCE103
>>>>>>>>>>>>
>>>>>>>>>>>> 2008. 6. 5 오후 1:37:00
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> newViewObserved
>>>>>>>>>>>> 정보: Analyzing new membership snapshot
>>>>>>>>>>>> received as
>>>>>>>>>>>> part of event : MASTER_CHANGE_EVENT
>>>>>>>>>>>> 2008. 6. 5 오후 1:37:00
>>>>>>>>>>>>
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>>
>>>>>>>>>>>> processNotification
>>>>>>>>>>>> *정보: ***JoinNotification received:
>>>>>>>>>>>> ServerName =
>>>>>>>>>>>> 6a8e7161-92ef-4b9e-a5e1-d9a8c7665b4a,
>>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>>> 6a92713c-d83e-49a8-8aaa-ad12046a1acb
>>>>>>>>>>>> *2008. 6. 5 오후 1:37:00
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> getMemberTokens
>>>>>>>>>>>> 정보: GMS View Change Received for group
>>>>>>>>>>>> TestGroup :
>>>>>>>>>>>> Members in view for (before change analysis)
>>>>>>>>>>>> are :
>>>>>>>>>>>> 1: MemberId:
>>>>>>>>>>>> 6a8e7161-92ef-4b9e-a5e1-d9a8c7665b4a,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE0F6B7D5CD8CC447180F2D059E273AD5103
>>>>>>>>>>>>
>>>>>>>>>>>> 2: MemberId:
>>>>>>>>>>>> 6a92713c-d83e-49a8-8aaa-ad12046a1acb,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CE15F3706F0E794BF595FCEE9EEA90FCE103
>>>>>>>>>>>>
>>>>>>>>>>>> 3: MemberId:
>>>>>>>>>>>> 77ff0a1c-b9a1-417a-b04c-0028ef6da921,
>>>>>>>>>>>> MemberType: CORE, Address:
>>>>>>>>>>>>
>>>>>>>>>>>> urn:jxta:uuid-0836778E36C54F728D5B934A965395CEC9482BF0C6A44D55B407E7E3A8D1339803
>>>>>>>>>>>>
>>>>>>>>>>>> 2008. 6. 5 오후 1:37:00
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.ViewWindow
>>>>>>>>>>>> newViewObserved
>>>>>>>>>>>> 정보: Analyzing new membership snapshot
>>>>>>>>>>>> received as
>>>>>>>>>>>> part of event : ADD_EVENT
>>>>>>>>>>>> 2008. 6. 5 오후 1:37:00
>>>>>>>>>>>>
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest$JoinNotificationCallBack
>>>>>>>>>>>>
>>>>>>>>>>>> processNotification
>>>>>>>>>>>> *정보: ***JoinNotification received:
>>>>>>>>>>>> ServerName =
>>>>>>>>>>>> 6a8e7161-92ef-4b9e-a5e1-d9a8c7665b4a,
>>>>>>>>>>>> Signal.getMemberToken() =
>>>>>>>>>>>> 6a8e7161-92ef-4b9e-a5e1-d9a8c7665b4a*
>>>>>>>>>>>>
>>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>>
>>>>>>>>>>>> "C"'s log don't have "B"'s join
>>>>>>>>>>>>
>>>>>>>>>>>> notification(77ff0a1c-b9a1-417a-b04c-0028ef6da921).
>>>>>>>>>>>> And I attached a simple test
>>>>>>>>>>>> code.
>>>>>>>>>>>> PS) When I
>>>>>>>>>>>> call GMSFactory.startGMSModule()
>>>>>>>>>>>> without properties param(like null), simple NPE
>>>>>>>>>>>> occurred. The following is exception.
>>>>>>>>>>>>
>>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>>
>>>>>>>>>>>> Exception in thread "main"
>>>>>>>>>>>> java.lang.NullPointerException
>>>>>>>>>>>> at
>>>>>>>>>>>>
>>>>>>>>>>>> com.sun.enterprise.jxtamgmt.ClusterManager.<init>(ClusterManager.java:161)
>>>>>>>>>>>>
>>>>>>>>>>>> at
>>>>>>>>>>>>
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.GroupCommunicationProviderImpl.initializeGroupCommunicationProvider(GroupCommunicationProviderImpl.java:138)
>>>>>>>>>>>>
>>>>>>>>>>>> at
>>>>>>>>>>>>
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.jxta.GMSContext.join(GMSContext.java:122)
>>>>>>>>>>>>
>>>>>>>>>>>> at
>>>>>>>>>>>>
>>>>>>>>>>>> com.sun.enterprise.ee.cms.impl.common.GroupManagementServiceImpl.join(GroupManagementServiceImpl.java:331)
>>>>>>>>>>>>
>>>>>>>>>>>> at
>>>>>>>>>>>>
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest.runSimpleSample(SimpleJoinTest.java:40)
>>>>>>>>>>>>
>>>>>>>>>>>> at
>>>>>>>>>>>>
>>>>>>>>>>>> com.sun.enterprise.shoal.jointest.SimpleJoinTest.main(SimpleJoinTest.java:20)
>>>>>>>>>>>>
>>>>>>>>>>>> at
>>>>>>>>>>>>
>>>>>>>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>>>>>>>>>>>> Method)
>>>>>>>>>>>> at
>>>>>>>>>>>>
>>>>>>>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(Unknown
>>>>>>>>>>>> Source)
>>>>>>>>>>>> at
>>>>>>>>>>>>
>>>>>>>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
>>>>>>>>>>>> Source)
>>>>>>>>>>>> at java.lang.reflect.Method.invoke(Unknown
>>>>>>>>>>>> Source)
>>>>>>>>>>>> at
>>>>>>>>>>>>
>>>>>>>>>>>> com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>>
>>>>>>>>>>>> In
>>>>>>>>>>>> ClusterManager.java:161
>>>>>>>>>>>>
>>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>>
>>>>>>>>>>>> /this.bindInterfaceAddress =
>>>>>>>>>>>>
>>>>>>>>>>>> (String)props.get(JxtaConfigConstants.BIND_INTERFACE_ADDRESS.toString());/
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>>
>>>>>>>>>>>> Maybe, this is "Fix for the
>>>>>>>>>>>> power outage issue"'s
>>>>>>>>>>>> side-effect by sheetalv. :-)
>>>>>>>>>>>> --
>>>>>>>>>>>> Bongjae Chang
>>>>>>>>>>>>
>>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>>
>>>>>>>>>>>> To unsubscribe, e-mail:
>>>>>>>>>>>> dev-unsubscribe_at_shoal.dev.java.net
>>>>>>>>>>>> For additional commands, e-mail:
>>>>>>>>>>>> dev-help_at_shoal.dev.java.net
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>
>>>>>>>>>>> To unsubscribe, e-mail:
>>>>>>>>>>> dev-unsubscribe_at_shoal.dev.java.net
>>>>>>>>>>> <mailto:dev-unsubscribe_at_shoal.dev.java.net>
>>>>>>>>>>> For additional commands, e-mail:
>>>>>>>>>>> dev-help_at_shoal.dev.java.net
>>>>>>>>>>> <mailto:dev-help_at_shoal.dev.java.net>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> <HealthMonitor.java><MasterNode.java><ViewWindow.java><ClusterViewManager.java><SimpleJoinTest.java>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>
>>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_shoal.dev.java.net
>>>>>>>>>>> <mailto:dev-unsubscribe_at_shoal.dev.java.net>
>>>>>>>>>>> For additional commands, e-mail: dev-help_at_shoal.dev.java.net
>>>>>>>>>>> <mailto:dev-help_at_shoal.dev.java.net>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>> ------------------------------------------------------------------------
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>
>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_shoal.dev.java.net
>>>>>>>>>> For additional commands, e-mail: dev-help_at_shoal.dev.java.net
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>
>>>>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_shoal.dev.java.net
>>>>>>>>> For additional commands, e-mail: dev-help_at_shoal.dev.java.net
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_shoal.dev.java.net
>>>>>>> For additional commands, e-mail: dev-help_at_shoal.dev.java.net
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_shoal.dev.java.net
>>>>>> For additional commands, e-mail: dev-help_at_shoal.dev.java.net
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: dev-unsubscribe_at_shoal.dev.java.net
>>>> For additional commands, e-mail: dev-help_at_shoal.dev.java.net
>>>>
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscribe_at_shoal.dev.java.net
>>> For additional commands, e-mail: dev-help_at_shoal.dev.java.net
>>>
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe_at_shoal.dev.java.net
>> For additional commands, e-mail: dev-help_at_shoal.dev.java.net
>>
>>
>>
>>
>>