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
>
>
>
>