Even more fine grained than that, any 2 txs should be allowed to complete in parallel (if
they competed for locks, one would block on the other in the LockManager and wouldn't
progress in parallel anyway). This is the logic that allows us to use OOB for sync calls.
The hard part is, how do we encode this information into a scope ID. AIUI, scope is a
String? And you use simple string matching? In which case Bloom filters won't work
...
On 31 Jan 2011, at 13:39, Bela Ban wrote:
Let's take a step back and ask ourselves what it is that we want to
scope ? Off of the top of my head the following things come to mind:
- HTTP sessions. I guess they're independent, so we can have a scope per
session. Do you guys currently use 1 Cache per session ? Then Galder's
suggestion below makes sense
- SFSBs: do we have 1 scope per bean ? What if bean X has a ref to bean
Y ? Would they have to have the same scope ?
- Hibernate 2LC: scope per entity ? I don't know how entities are broken
into tuples in the 2LC.
On 1/31/11 2:19 PM, Galder ZamarreƱo wrote:
> Hmmmm, not sure about adding a method to IC, cos that would lead to code like this
which is very verbose:
>
>
cache.getAdvancedCache().getInvocationContextContainer().getInvocationContext().setScope("X")
>
> As a user, I'd prefer something like:
>
> cache.getAdvancedCache().withScope("X")
>
> However, this would only be used to attach a particular scope. I envision a global,
cache manager level configuration such as that marks all caches in that cache manager to
be scoped by the cache name. That way, HTTP session repl code would need no changing at
all and with a single flag, they could make each individual cache to act in its own scope.
The code above would allow two caches to share the same scope for those situations where
we want sequential calls for the two caches, i.e.:
>
> cache1.getAdvancedCache().withScope("X")
> cache1.put()
> cache2.getAdvancedCache().withScope("X")
> cache2.put()
>
> By the way, I don't understand your comment of "refine this scope by adding
GlobalTransaction and so on". If we take the cache1/cache2 example and imagine that
these two would be called within a transaction, I'd imagine that the transaction
itself would act as a scope and so would not need for a particular scope definition? i.e.
>
> tx.begin()
> cache1.put()
> cache2.put()
> tx.commit()
>
> At first glance, 5.0 would be the perfect target for this, but we'd need to take
in account for any requirements coming from Paul since HTTP session repl could greatly
benefit from it.
>
> As far as 2LC is concerned, within a deployment multiple txs will be operating on
same caches so scoping could not be used. However different deployments could benefit from
deployment level scoping so that messages for different caches can be sent in parallel. In
AS environment different deployments could share the same 2LC cache manager and so the
configuration option above would not work, but I'd need a deployment level scope that
I'd use with cache.withScope().
>
> Cheers,
>
> On Jan 28, 2011, at 8:54 PM, Vladimir Blagojevic wrote:
>
>> Forgot to mention that scopes require addition of SCOPE protocol to the
>> stack. So we can probably do this on 5.0 branch only.
>> On 11-01-28 4:52 PM, Vladimir Blagojevic wrote:
>>> Hey,
>>>
>>> JGroups scopes [1] have been implemented for a while now and we should
>>> think about using them in Infinispan. I looked around a bit to see how
>>> we can use scope and satisfy requirements Manik outlined [2]. I think a
>>> good idea would be to introduce scope method in InvocationContext? We
>>> can start by implementing scope to return hash of cache name where
>>> invocation originated and subsequently refine this scope by adding
>>> GlobalTransaction and so on. Users, if they really need to scope their
>>> calls could do so by attaching additional markers to InvocationContext
--
Bela Ban
Lead JGroups / Clustering Team
JBoss
_______________________________________________
infinispan-dev mailing list
infinispan-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev