[infinispan-dev] Functionality based on configuration
Radim Vansa
rvansa at redhat.com
Mon Nov 24 08:07:55 EST 2014
On 11/24/2014 12:44 PM, Dan Berindei wrote:
> Hi Radim
>
> First of all, I don't think this is feasible. For example,
> read-committed vs repeatable read changes how the entries are stored
> in the transaction context, so you can't have a repeatable-read get()
> in the same transaction after a read-committed get. Write skew check
> also requires versions, so you couldn't skip updating the version in
> any optimistic cache just in case some transaction might need it in
> the future.
The isolation level is a property of transaction, not single operation:
you should specify this ahead in the transactional context before doing
any operations (I would imagine API like
AdvancedCache.getTxCache(LockingMode.OPTIMISTIC,
IsolationLevel.REPEATABLE_READ)).
>
> We also can't mix non-transactional, transactional asynchronous, and
> transactional synchronous operations on the same cache, as they would
> break each other's consistency. In fact, Infinispan 4.x allowed both
> transactional and non-transactional operations on the same cache, but
> at some point we realized that there's no way to ensure the
> consistency of transactions if there are overlapping with
> non-transactional operations.
Just out of curiosity - Hazelcast allows mixing transactional and
non-transactional code, do you know how they do it? Coherence has also
all transactions API-wise (but I was not able to get them working). But
I agree that allowing both tx and non-tx operations could complicate
things a lot (the number of cases that need to be designed and tested
grows exponentially with each option).
>
> I agree that the configuration is very tightly coupled with the code
> that uses it, so settings that can break the application should be
> more obvious. We should discuss how we can improve this at the
> clustering meeting in Berlin.
>
> But I think forgetting to add a flag in some part of the application
> is just as likely as the administrator making a mistake in the
> configuration, and having different consistency models in the same
> cache can also make code harder to understand. So instead of allowing
> flags to control consistency, I would rather add methods for the user
> to assert that the cache has certain properties.
IMO the probability that two people (programmer who did not write
documentation and administrator who did not read the code) make a
mistake because of configuration is still larger than the one of single
person.
Thanks for comments
Radim
>
> Cheers
> Dan
>
>
> On Fri, Nov 21, 2014 at 12:38 PM, Radim Vansa <rvansa at redhat.com
> <mailto:rvansa at redhat.com>> wrote:
>
> Hi,
>
> when thinking about strong/eventual consistency and ease of
> configuration, I was considering whether cache configuration should
> affect results of operations at all (one example could be read
> committed/repeatable read, or write skew check).
>
> It would seem to me that the configuration would be simpler, and user
> options more rich if those options that change the result of operation
> would be purely API-wise (based on flags or method arguments) and the
> configuration could only change the performance (defining cache store
> will slow down some operations) or availability of these
> operations (you
> cannot start a transaction when the manager is not defined), not the
> outcome.
>
> E.g. is there really a point to be able to change sync/async
> configuration of the cache when the code expects strong
> consistency? If
> it can handle that, it should grab cache.withFlags(FORCE_ASYNCHRONOUS)
> and work on that.
> Another example is in the strong/eventual consistency - if I want
> to see
> the cache as strongly consistent, I can't read from backup owners [1].
> Currently there is no option to force reading from primary owner,
> therefore, I was wondering whether it should be configurable (together
> with staggered gets policy - not that this would be implemented) or
> whether that should be specified as a flag - and it seems to me
> that it
> should not be configurable as the administrator could remove the flag
> from the config (and see increased performance) but eventually a race
> could occur where this flag matters and the application will behave
> incorrectly.
>
> WDYT? This question is obviously rather for changes on the roadmap
> (I'd
> say along with leaving ConcurrentMap interface) than any immediate
> actions in versions 7.x or 8.x.
>
> Radim
>
> [1] https://issues.jboss.org/browse/ISPN-4995
>
> --
> Radim Vansa <rvansa at redhat.com <mailto:rvansa at redhat.com>>
> JBoss DataGrid QA
>
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev at lists.jboss.org <mailto:infinispan-dev at lists.jboss.org>
> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>
>
>
>
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev
--
Radim Vansa <rvansa at redhat.com>
JBoss DataGrid QA
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/infinispan-dev/attachments/20141124/2d77419d/attachment.html
More information about the infinispan-dev
mailing list