Hi Vinayak, yes. the criteria is queried against either IDEALSTATE or
EXTERNALVIEW. If no resource mapped, the instance will not be selected. A
work around in your case is sending messages to all live instances
directly. This is simple:

HelixDataAccessor accessor = adminManager.getHelixDataAccessor();

PropertyKey.Builder keyBuilder = accessor.keyBuilder();

List<String> liveInstances = accessor.getChildNames(keyBuilder
.liveInstances());

*for* (String liveInstance : liveInstances) {

  accessor.setProperty(keyBuilder.message(liveInstance, messageId), message
);

}


Thanks,

Jason


On Mon, Oct 7, 2013 at 11:16 PM, Vinayak Borkar <[email protected]> wrote:

> Ok. Here is what is going on. It looks like sending a message is connected
> with having resources in the cluster. Once a resource is created, the
> message seems to go to the one live instance in the cluster.
>
> The root cause of this behavior is that Criteria can only pick between
> EXTERNALVIEW and IDEALSTATES as data sources. So instances that do not have
> a resource mapped to it will never satisfy any criteria. Is this by design?
>
> If I wanted to send a message to every live instance, how would I go about
> doing that?
>
>
> Thanks,
> Vinayak
>
>
>
> On 10/7/13 10:30 PM, Zhen Zhang wrote:
>
>> Hi, could you try allParticipantsCriteria.**setSelfExcluded(false), by
>> default selfExcluded is true and maybe you are sending from the only
>> liveInstance in the cluster, so no liveInstance matches the criteria.
>>
>> Thanks,
>> Jason
>>
>>
>> On Mon, Oct 7, 2013 at 9:30 PM, Vinayak Borkar <[email protected]>
>> wrote:
>>
>>  Hi Kishore,
>>>
>>>
>>> As suspected, not setting resource and partition did not help. Any other
>>> ideas?
>>>
>>> Thanks,
>>>
>>> Vinayak
>>>
>>>
>>> On 10/7/13 7:04 PM, kishore g wrote:
>>>
>>>  Hi Vinayak,
>>>>
>>>> Why is resource and partition empty string? if you want to send all live
>>>> instances irrespective what resource/partition they do not set it.
>>>>
>>>> Criteria allParticipantsCriteria = new Criteria();
>>>> allParticipantsCriteria.******setInstanceName("%");
>>>> allParticipantsCriteria.******setRecipientInstanceType(******
>>>> InstanceTyp
>>>>
>>>> e.PARTICIPANT);
>>>>
>>>> can you try this
>>>>
>>>> Thanks,
>>>> Kishore G
>>>>
>>>>
>>>> On Mon, Oct 7, 2013 at 6:58 PM, Vinayak Borkar <[email protected]>
>>>> wrote:
>>>>
>>>>   Hi,
>>>>
>>>>>
>>>>>
>>>>> I need to send a message to all live instances in a Helix cluster. I
>>>>> set
>>>>> the Criteria as follows:
>>>>>
>>>>> Criteria allParticipantsCriteria = new Criteria();
>>>>> allParticipantsCriteria.******setInstanceName("%");
>>>>> allParticipantsCriteria.******setRecipientInstanceType(**
>>>>> InstanceType.PARTICIPANT);
>>>>> allParticipantsCriteria.******setResource("");
>>>>> allParticipantsCriteria.******setPartition("");
>>>>>
>>>>>
>>>>>
>>>>> However, the number of recipients turns out to be 0. I also tried
>>>>> changing
>>>>> the datasource in the criteria to be IDEALSTATES using the code below:
>>>>>
>>>>> allParticipantsCriteria.******setDataSource(DataSource.******
>>>>> IDEALSTATES);
>>>>>
>>>>>
>>>>>
>>>>> But no joy.
>>>>>
>>>>> Please note that I connect to Helix using an administrator role. When
>>>>> listing the live instances using the helix-admin client script I do see
>>>>> one
>>>>> live instance.
>>>>>
>>>>> Any ideas on what could be going wrong?
>>>>>
>>>>> Thanks,
>>>>> Vinayak
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>

Reply via email to