Nice one Tristan! Would love to take a look at the code at some point. My comments in
line.
On 8 Sep 2010, at 11:03, Tristan Tarrant wrote:
Dear all,
I am new here and I (would like to) bring gifts :)
First of all thanks for the great work you have been doing on Infinispan. I was
introduced to Infinispan by Sanne, with whom I have collaborated in the past (hi Sanne!).
Over the last few days I have been writing a CacheStore implementation for Apache
Cassandra, but I have a few unanswered questions I would like to submit to you before I
proceed.
I have written my code by taking inspiration from other CacheStore providers, namely the
JDBM and Hibernate stores.
I hash the key of an entry to produce an appropriate key for Cassandra. I then store the
marshalled value in a Column named "entry" within a ColumnFamily named
"Infinispan". If the entry has an expiration I create another Column within the
"Infinispan" ColumnFamily using the following pattern:
"expiration"+"0paddedtimestamp" containg a placeholder value.
When purgeInternal is invoked I delete all rows which have a column in the range
"Infinispan:expiration0000000000000000" to
"Infinispan:expiration0paddednowtimestamp".
Is this efficient from a Cassandra perspective? Would this not involve a lot of String
comparisons?
I have noticed that the JDBM CacheStore keeps expiration entries in
an internal LinkedHashMap: is that just for performance reasons ?
Also, Cassandra doesn't support transactional operations, but merely batched
operations: within the applyModifications() method I just send all operations in one batch
invocation. Is this ok ? I guess that Infinispan manages the transactional side of things.
Yes Infinispan takes care of transactional atomicity.
I am currently developing in my own private Subversion repository and
using my own package name and Junit+mockito in place of testng+easymock. Would such an
object be worthy of potential inclusion within Infinispan itself (and so should I refactor
everything around the org.infinispan package and integrate nicely with the rest of the
tree?). Should I submit a patch to the current Infinispan trunk ?
If you want to include this in Infinispan, I recommend switching your test framework to
TestNG + EasyMock. You should also refer to the unit test guidelines for Infinispan, as
we use a highly multithreaded parallel testing environment and your tests need to play
nice with this framework. Details here:
http://community.jboss.org/wiki/InfinispanQuickStartGuideforDevelopers
http://community.jboss.org/wiki/ParallelTestSuite
If you do wish to include this in Infinispan, we'd need you to
1) Sign the contributor agreement
2) Package the maven module under cachestores/ (similar to the way the JDBM cache store is
packaged)
3) Send us a ZIP file containing the module for us to review before we give you commit
access to commit the module
4) Document the new CacheStore here:
http://community.jboss.org/docs/DOC-14893?uniqueTitle=false
Cheers
Manik
--
Manik Surtani
manik(a)jboss.org
Lead, Infinispan
Lead, JBoss Cache
http://www.infinispan.org
http://www.jbosscache.org