On Oct 17, 2013, at 2:10 PM, Sanne Grinovero <sa...@infinispan.org> wrote:

> It looks like that this discussion is based on what's more convenient
> for you all to code, but the decision should be made based on what
> users need, and frankly I think there are lots of good reasons to
> expect the event to happen in the scope of the same transaction, and
> even had the capability to fail the transaction.
> 
> For example a strong use case for these events is data validation: I'm
> looking forward for an integration with Bean Validation, and when that
> happens I'm pretty sure we'll want to rollback the transaction in case
> of validation failures.

^ You could do that with an interceptor, as opposed to a listener.

> BTW I still don't like the need to invoke "isPre()". IMO you should
> provide a way to register the Listener to happen only after or before;
> the isPre method can stay where it is for convenience but it bothers
> me that you have to call it on each invocation, it should be optional,
> for example for those cases in which I need two different operations
> to happen before/after and I'm too lazy to code two different
> listener.
> 
> Sanne
> 
> 
> On 17 October 2013 11:10, Radim Vansa <rva...@redhat.com> wrote:
>> On 10/17/2013 09:36 AM, Galder Zamarreño wrote:
>>> On Oct 11, 2013, at 11:30 AM, Pedro Ruivo <pe...@infinispan.org> wrote:
>>> 
>>>> Hi guys.
>>>> 
>>>> Re: https://issues.jboss.org/browse/ISPN-2090
>>>> 
>>>> Summary: in tx caches, when @listener(sync = true), the callback is done
>>>> by the same thread as the transaction. However, most of the events may
>>>> not cause any problem, some of them are trigger when the transaction is
>>>> in the state that cannot attach more commands.
>>>> 
>>>> So, I want to discuss here what would be the correct behaviour/logic for
>>>> the callback (note this only affects tx caches) assuming that the
>>>> callback invokes some operation (get/put/etc.) over the cache.
>>>> 
>>>> IMO, all the synchronous events should suspend the transaction. This
>>>> way, we ensure that the operation is not attached to the transaction,
>>>> the callback has the same behaviour if sync=true and sync=false and also
>>>> with the events triggered in remote nodes (you will never read any
>>>> non-committed data from a remote transaction neither attach the operation).
>>> ^ I think it makes sense, but this would break code that's based around the 
>>> current assumptions, and given how late we are in the 6.0 release, I would 
>>> not add this right now, and when added it needs to be properly documented 
>>> to indicate the differences.
>>> 
>>>> Mircea suggestion is the following:
>>> <- missing something here?
>>> 
>>>> I think the correct logic should be:
>>>> 
>>>> * if isPre() then the value should not be seen when reading the cache
>>>> * if !isPre() then value should be seen. Not totally sure, but the
>>>> transaction as return by TransactionManager.getTransaction should not be
>>>> visible (i.e. suspend it before notifying the listener), as this would
>>>> result in different behavior on local/remote nodes that get notified.
>>> ^ I'm not sure how you can achieve for data to be seen when !is.Pre(), 
>>> assuming you mean data that's accessible via the cache interface and not 
>>> data that comes as part of the event. I'd say that both isPre and !isPre 
>>> should not allow on-going transaction data when accessing via the cache. Of 
>>> course, event parameters should carry the data that the user might need.
>> Carrying the data in parameter might not be enough if you allow the
>> event listener to do writes, IMO. Let's have A=1, B=1 in cache and
>> application constraint that A >= B. Let's set A to 2 - that would fire
>> an event in which you would like to set B to 2, and B's event listener
>> would like to know value of A - getting A = 1 will break the constraint.
>> And there's no way to get A's value besides reading it directly from cache.
>> 
>> 
>> Radim
>> 
>> --
>> Radim Vansa <rva...@redhat.com>
>> JBoss DataGrid QA
>> 
>> _______________________________________________
>> infinispan-dev mailing list
>> infinispan-dev@lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/infinispan-dev
> 
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev


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