My team is in the process of evaluating JCR implementations. Our evaluation is broken into three sections: 1. Feature set 2. Performance 3. Market acceptance
I'm at the tail end of evaluating ModeShape (version 2.7.0-Final) with an eval report due by the end of the week. Very impressed with its rich feature set and flexibility.
For the performance part of our JCR evals, we put together the following tests.
Test 1 - Populate an empty repository with a small subset of production data (~50 files) sourced from a JackRabbit repo. Run a multi-threaded read/write test against data. Test done over WebDAV.
- Each thread is assigned a file, reads the file content from the repo, and writes the file content out to a new node (<filename>.copy), rinse and repeat 50 times with a small break in between iterations. Measure min/max/avg read and write times per file.
- The test is executed for 1-150 threads in 10 thread increments (1, 10, 20, ...)
Test 2 - Populate an empty repository with 100 directories (nodes) and 1,000 small files (2K) of varying content in each, for a total of 100,000. Measure time it takes to populate. Population done over WebDAV. Run a multi-threaded read/write test against data (same as test 1). Test done over WebDAV.
Unfortunately, I cannot complete either test without an apparent deadlock occurring during the multi-theaded part of the test. I've attempted with various repository sources (Disk, MySQL via JPA, Infinispan w/MySQL cache loader, Infinispan w/Cassandra cache loader) with the same results.
Due to ModeShape's robust feature set, we were given a bit more time to re-test against an in-process instance to try and isolate the problem. We just did this, and got the same result.
I've attached my config file, and the thread dump of test 2 run against an in-process instance when the deadlock occurs.
Any assistance or guidance would be appreciated as ModeShape looks to be very promising from a feature perspective.
I'd be happy to strip down our test to provide a test case, but I need to write up the report with our current status first, so this may come late this week.
I know this question will be asked, so I will pre-emtpively answer it: Each thread contains a unique Session instance. No Session sharing across threads.
Thanks in advance,