[infinispan-dev] Eviction overhaul

Manik Surtani manik at jboss.org
Fri Apr 3 06:24:12 EDT 2009


On 3 Apr 2009, at 10:15, Mircea Markus wrote:

> I see.
> Now, we have a data container in which we are assured (by  
> LockManager, right?) that we won't have concurrent writes on the  
> same key.
> I'm just thinking weather we need an CHM or something less (simple  
> HashMap?) for assuring consistency.

Well, like I said a regular HM will not allow concurrent modification  
to the structure.  Which is allowed by our LockManager as long as the  
keys are different.

>
> Cheers,
> Mircea
>
> Manik Surtani wrote:
>>
>> On 2 Apr 2009, at 09:10, Mircea Markus wrote:
>>
>>> Manik Surtani wrote:
>>>> Hello all.
>>>>
>>>> I have finished my work with the eviction code in Infinispan, here  
>>>> is a summary of what has happened.
>>>>
>>>> From a user perspective (including API and configuration) as well  
>>>> as a design overview, please have a look at
>>>> http://www.jboss.org/community/docs/DOC-13449
>>>>
>>>> From an implementation perspective, have a look at the srcs of  
>>>> FIFODataContainer and LRUDataContainer.  These two classes are  
>>>> where everything happens.  The javadocs should explain the  
>>>> details, but in a nutshell you can expect constant time  
>>>> operations for all puts, gets, removes, iterations.  :-)   
>>>> Feedback on the impls would be handy.  :-)
>>> I like to concept - it's nice and clear for users to grasp. Also  
>>> took a look at implementation, nice and complex, so I'd rather  
>>> have you and a white board to understand it completely :) .
>>> Some notes though: EvictionException is never used, same for  
>>> SpinLock.rl field.
>>
>> Good point, EvictionException was a carry-over from JBC which can  
>> go away.
>>
>> SpinLock.rl was something I used for debugging/tracking race  
>> conditions - it should go away now as well.
>>
>>> And a question:
>>> with this impl, we're doing locking twice for cache operations: on  
>>> LockInterceptor and on DataContainer itself. Why is this  
>>> necessary? I think this is needed so that eviction thread and user  
>>> threads not to conflict( am I right?).
>>
>> Well, the locking is done on a different level.  The  
>> LockingInterceptor locks a key.  So keep in mind that 2 threads may  
>> lock 2 separate keys concurrently, but these may map to the same  
>> hash bucket in the data container.  In which case, since the DC  
>> uses a CHM, this would mean that the same stripe is locked  
>> preventing concurrent reorganisation of the stripe.
>>
>>> Isn't it possible to use the same locking (i.e. LockManager) for  
>>> both these threads?
>>
>> Possible, but again not ideal, for example if you have TX 1 which  
>> writes to key K1.  The way this currently works, here is what  
>> happens:
>>
>> 1.  Acquire lock for key K1 in the lock manager
>> 2.  Write to K1
>> 3.  Sleep?
>> 4.  Commit:
>> 5.  Write changes to DC.  This will lock the stripe in the CHM for  
>> the duration of this step only.
>> 6.  Release lock acquired in 1
>>
>> Now if you have a concurrent write to K2, which *happens* to be in  
>> the same stripe as K1 in the CHM, this second thread will *not*  
>> block for TX 1 since TX 1 only locks the CHM stripe for a short  
>> duration (step 5 above).
>> Now if we used the same locks thoughout (e.g., step 1 *is* the lock  
>> stripe in the CHM) then you have far less concurrency.
>>
>> Of course, the above premise only holds true if you have enough  
>> shared locks for the lock manager such that K1 and K2 do not map to  
>> the same lock, even if they are in the same stripe in the CHM.   
>> Also holds true if lock striping is disabled and you have a lock  
>> per key.
>>
>>> (also, why are we using  ConcurrentHashMaps in default container -  
>>> isn't access to data guarded by the lock interceptor?
>>
>> See above.  :-)
>>
>> Cheers
>> Manik
>>
>> --
>> Manik Surtani
>> Lead, JBoss Cache
>> http://www.jbosscache.org
>> manik at jboss.org <mailto:manik at jboss.org>
>>
>>
>>
>>
>

--
Manik Surtani
Lead, JBoss Cache
http://www.jbosscache.org
manik at jboss.org




-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/infinispan-dev/attachments/20090403/1bd56cbe/attachment-0001.html 


More information about the infinispan-dev mailing list