On Dec 13, 2013, at 3:11 PM, Radim Vansa <rva...@redhat.com> wrote:

> On 12/13/2013 02:44 PM, Galder Zamarreño wrote:
>> On Dec 6, 2013, at 10:45 AM, Radim Vansa <rva...@redhat.com> wrote:
>> 
>>> Hi,
>>> 
>>> 1) IMO, filtering for specific key is a very important use case. 
>>> Registering a filterId is a very powerful feature, but as long as you don't 
>>> provide runtime parameter for this filter, you cannot implement one-key 
>>> filtering.
>> What do you mean by runtime parameter exactly? Can you give a concrete 
>> example of what you want to achieve that is not possible with what I've 
>> written up?
> 
> As I stressed, if the client wants to listen for events on key_123456, then 
> you can deploy a filter matching key_{number} (and additional constraints) 
> but the 123456 is not known at deployment time.

True, that's a limitation of the current approach, but I don't see it crucial 
as long as we have some static filtering in place. The feature itself is 
already pretty large, so I'd consider this (dynamic filtering) at a later point.

> 
>> 
>>> 2) setting ack/no ack in listener, and then configuring server-wise whether 
>>> you should ack each / only last event sounds weird. I'd replace the boolean 
>>> with enum { NO_ACK, ACK_EACH, ACK_LAST }.
>> Makes a lot of sense, +1.
>> 
>>> 3) should the client provide source id when registering listener or when 
>>> starting RemoteCacheManager? No API for that.
>> Every operation will require a source ID from now on, so clients must 
>> provide it from first operation sent to the server. From a Java client 
>> perspective, you'd have this from the start via the configuration.
>> 
>>> 4) clustered events design does not specify any means to replicating the 
>>> clustered event listener - all it does is that you register the listener on 
>>> one node and the other nodes then route events to this node, until the node 
>>> dies/deregisters the listener. No replication. Please specify, how should 
>>> it piggyback on clustered events, and how should the listener list be 
>>> replicated.
>> In clustered listeners, the other nodes you talk about are gonna need to 
>> know about the clustered listeners so that they route events. Some kind of 
>> information about these clustered listeners will need to be sent around the 
>> cluster. The exact details are probably implementation details but we have a 
>> clustered registry already in place for this kind of things. In any case, 
>> it'd make a lot of sense that both use cases reuse as much as logic in this 
>> area.
> 
> OK, this is probably the desired behaviour, it just is not covered by the 
> Clustered Events design draft. Probably something to add - I'll ping Mircea 
> about that. And you're right that it would make a lot of sense to have shared 
> structure for the listeners, and two implementations of the delivery boy (one 
> to the node where a clustered event has been registered and second to local 
> component handling HotRod clients).
> 
>> 
>>> 5) non-acked events: how exactly do you expect the ack data to be 
>>> replicated, and updated? I see three options:
>>> A) Let non-acked list be a part of the listener record in replicated cache, 
>>> and the primary owner which executes the event should update these via 
>>> delta messages. I guess for proper reliability it should add operation 
>>> record synchronously before confirming the operation to the originator, and 
>>> then it might asynchronously remove it after the ack from client. When a 
>>> node becomes primary owner, it should send events to client for all 
>>> non-acked events.
>>> B) Having the non-acked list attached directly to cache entry (updating it 
>>> together with regular backup), and then asynchronously updating the non-ack 
>>> list after ack comes
>>> C) Separate cache for acks by entry keys, similar to B, consistent hash 
>>> synced with the main entry cache
>> Definitely not B. I don't wanna tie the internal cache entry to the ACKs. 
>> The two should be independent. Either C or A. For C, you'd wished to have a 
>> single cache for all listeners+caches, but you'd have to think about the 
>> keys and to have the same consistent hash, you'd have to have same keys. A 
>> might be better, but you certainly don't want this ACK info in a replicated 
>> structure. You'd want ACKs in a distributed cache preferably, and clustered 
>> listener info in the clustered replicated registry.
> There already is some CH implementation which aims at sharing the same 
> distribution for all caches, SyncConsistentHash. Is there some problem with C 
> and forcing this for the caches? Dan?
> 
> Radim


--
Galder Zamarreño
gal...@redhat.com
twitter.com/galderz

Project Lead, Escalante
http://escalante.io

Engineer, Infinispan
http://infinispan.org


_______________________________________________
infinispan-dev mailing list
infinispan-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev

Reply via email to