Thanks. The updated version is changed as follows: 1. The only code change I would suggest, ask about really, is the live-ness determination in TimelyResource#prune(). - No change yet. Will look at that again tomorrow. 2. I would also like to see a handful of tests around what is in the directory tree, shutdown and recovery where multiple versions were present, and the (lack of) MVVs in writes to trees created in the same transaction. - I believe these cases are covered by new tests added to TreeTransactionalLifetimeTest. 3. TimelyResource: - JavaDoc fixed. I believe there are no broke links in the Javadoc - if you find some, please let me know. - getVersionCount() - reduced to package private - delete() - check for null and throw IllegalStateException. Fixed a test that relied on lenient behavior. Exchange - Why was assertCorrectThread() removed - in every case removed I determined there was another call made by a subordinate method. The removed calls were redundant. - checkThread(boolean) - I believe the implementations are identical except that the new one does not set _thread to t when it is known already to be t. Since _thread is volatile this may reduce memory contention. (Actually, I'm not sure if it matters.) - throttle() - a new helper, as suggested.. - doMVCC && (spareValue.isDefined() || !tree.isTransactionPrivate()). This is an attempted optimization. In particular, it might be helpful when building a new index within a transaction by avoiding the need to write and prune MVVs. A rollback range-deletes the entire tree, so no value written inside the tree can ever become visible, even though it was written as primordial. There was an error related to different steps - that's fixed with the rather arcane new boolean argument of isTransactionPrivate(boolean). (I thought about two methods with different names but lacked the imagination to name them.) The main point is that in the case where the tree is unknown to any other transaction and there are no step-py things going on, we can simply write a primordial value since (a) no other transaction can see the transaction, and (b) any step that could see the tree must be later than the step that writes the primordial value. To answer your specific question, I believe doMVCC is true whenever a transaction writes a value to a key that did not previously exist. Tree - Javadoc issues: fixed - version() now throws a subclass of RuntimeException and does not have a TODO - isValue && !isDeleted() is now computed by helper isLive() VolumeStructure - removeTree() is now properly void TimelyResourceTest - Append withTransactions - done - doConcurrentTransaction() - reworked to use ConcurrentUtil. Note that I modified ConcurrentUtil extensively to expose more options for use. This was done to allow doConcurrentTransactions to replace threads during execution. I now fully understand the elegance of ConcurrentUtil (which I had not previously paid much attention to) and will endeavor to replace lots of cases in unit tests that created and join background threads with it. - assert - fixed TreeTransactionLifetimeTest - simplePruning() sleep - fixed - I'd like to see new tests - added 16 test cases with createRemoveByStep(). This was valuable because I found and fixed several problems in handling of steps, and an outstanding issue in which a recycled Exchange could have an incorrect value for _isDirectoryExchange. - The TExec helper - still exists, but extends ThrowingRunnable and relies on ConcurrentUtil.