[infinispan-dev] Functionality based on configuration

Dan Berindei dan.berindei at gmail.com
Mon Nov 24 06:44:22 EST 2014


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.

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.

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.

Cheers
Dan


On Fri, Nov 21, 2014 at 12:38 PM, Radim Vansa <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>
> JBoss DataGrid QA
>
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/infinispan-dev/attachments/20141124/efdf940f/attachment-0001.html 


More information about the infinispan-dev mailing list