users@shoal.java.net

Re: [Shoal-Users] Re: send message after join

From: Shreedhar Ganapathy <Shreedhar.Ganapathy_at_Sun.COM>
Date: Thu, 18 Jun 2009 21:40:59 -0700

Jerry Raj wrote:
> Joseph Fialli wrote:
>
>> Jerry Raj wrote:
>>
>>> Any suggestions?
>>> Or at least a way to check whether join is complete before calling send?
>>>
>>>
>> Jerry,
>>
>> It is not that join is not complete for the sender, the sender is
>> definitely part of the group when join returns.
>>
> OK.
>
>> It could be the other members of the group probably have not joined yet.
>>
> I have only two members in the group. Both run identical code. The first one
> starts up, joins the group and sends a message (which goes nowhere, but thats
> ok). Now I start the second one. When the second member sends a message, it
> should be received by the first one, but that does not happen. Unless I add a
> delay between join() and send() calls.
>
Do you see a view change with the two members in it ?
If your send() is around the same time as the time the view change
happens then you will have message loss.
Also, with Shoal 1.1 we have made a lot of synchronization improvements
for correctness, which may have cost somewhat at the time of startup of
members.

Could you try out the code snippet that Joe provided as a way to ensure
that message sending happens only when requisite memberships in the
group are in place ?

Thanks
Shreedhar

> The same identical code worked fine with Shoal 1.0.
>
> I hope this clarifies the use-case.
> -Jerry
>
>
>> However, there is not enough information in your original post to
>> confirm or deny this.
>>
>> You could delay sending a message to the group until there is certain
>> number of members joined or
>> you could wait for all members to have joined via JoinNotification event.
>>
>> Pull API:
>>
>> List<String> members = gms.getGroupHandle().getAllCurrentMembers();
>> <wait to send first message until all expected number of members have
>> joined>
>>
>> Event driven API:
>>
>> gms.addActionFactory( new JoinNotificationActionFactoryImpl( new
>> JoinNotificationCallBack( serverName ) ) );
>> gms.join();
>> <wait till all expected instances have joined before sending message;
>> use info calculated from JoinNotificationCallback>
>>
>> private class JoinNotificationCallBack implements CallBack {
>>
>> private String serverName;
>>
>> public JoinNotificationCallBack( String serverName ) {
>> this.serverName = serverName;
>> }
>>
>> // called for every instance joining the gms group.
>> public void processNotification( Signal notification ) {
>> <record instance has joined>;
>> }
>> }
>>
>> A non-coding way to check this out is to start all your receiving
>> clients first.
>> Wait 10 seconds (like your initial test).
>> Then start your sending gms client.
>> There is no need a sleep between the join and send since all the other
>> members
>> will have already joined. Hope this helps.
>>
>> -Joe
>>
>>> Thanks
>>> -Jerry
>>>
>>> Jerry Raj wrote:
>>>
>>>
>>>> Hello,
>>>> I have code like this:
>>>> <snip>
>>>> gms.join();
>>>> // Commented: Thread.sleep(10000);
>>>> GroupHandle gh = gms.getGroupHandle();
>>>>
>>>> gh.sendMessage(blah);
>>>>
>>>> </snip>
>>>>
>>>> This used to work fine in Shoal 1.0. The node would join the group
>>>> and the
>>>> message would be recd by other members in the group. But this does
>>>> not happen
>>>> with Shoal 1.1 unless I uncomment the sleep(10000) between join() and
>>>> send(). I
>>>> expect this is because the join operation has not completed
>>>> successfully when
>>>> send() is called. Is there a way to be notified when join is
>>>> complete? I tried
>>>> looking at JoinedAndReadyNotificationActionImpl but that does not
>>>> seem to work?
>>>>
>>>> I'm using Shoal 1.1 from the download link on the front page of the
>>>> Shoal website.
>>>>
>>>> -Jerry
>>>>
>>>>
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe_at_shoal.dev.java.net
>>> For additional commands, e-mail: users-help_at_shoal.dev.java.net
>>>
>>>
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe_at_shoal.dev.java.net
>> For additional commands, e-mail: users-help_at_shoal.dev.java.net
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_shoal.dev.java.net
> For additional commands, e-mail: users-help_at_shoal.dev.java.net
>
>