dev@shoal.java.net

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

From: Bongjae Chang <carryel_at_korea.com>
Date: Sat, 14 Jun 2008 00:37:37 +0900

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
  To: 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
      To: 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
        To: 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
            To: 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
      For additional commands, e-mail: 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
    For additional commands, e-mail: dev-help_at_shoal.dev.java.net