We currently think this was a bad idea! It's hard to write a true cleanup() when you can't know whether some other part of the data structure has been locked.
[x] An abort() during the lock() phase doesn't leave the txn system borked
[ ] Check equality of read_version()s when installing a new read version over an item that already has one; otherwise we risk issues if, e.g., a txn checks value equality for read values
This is not necessary for opaque reads
I think we can't ever check value equality; the predicate system is designed to fix this problem
[ ] Should Sto::check_in_progress() be an assertion?
[ ] New-style opacity check (GP7 or whatever?…)
[ ] Try-lock?
[x] Vector uses conflictingly-typed keys (Vector* this vs. int), all keys should be same type
[x] predicate changes
[x] check_predicate
[x] Call cleanup only if has_write
Final version
[ ] Boosting comparison with hash tables—Nate
[ ] Boosting comparison with red-black trees—lower prio—Nate
[ ] Relationship between boosting and STM
[x] Fine-grained locking for red-black trees; red-black tree comparison vs. TL2—lower prio—Yihe
[x] Checking Silo/Masstree for bugs—Jeevana
[ ] Predicate experiment—Jeevana
[ ] Code cleanup—Eddie
[ ] GV6/7 more scalable opacity check
[ ] Try-lock for deadlock detection
[ ] Avoid commit protocol for read-only transactions
[ ] versioned_value_struct leaks memory
[x] Predicate recheck if opacity fails!!
[ ] Get rid of code in check_reads()?
Transactional versions
[x] Opacity relationship with TransactionTid/TVersion
Suggest a TVersion type which encapsulates a version number
Suggest we override add_read(TVersion) to automatically handle opacity
[ ] How does PriorityQueue::empty_key work? Is that actually a predicate?
[ ] Hate comments like (list.hh) “check_item() is not const, but the way we’re using it is” :(
[ ] Do we need both List and List1?
[ ] GenericSTM is not correct wrt opacity
[ ] Boosting + RBtree
[ ] Terminology: “poisoned” objects (rather than “try-lock”)
Eric Koskinen
Does boosting have fine-grained or coarse-grained locking?
cleanup()
when you can't know whether some other part of the data structure has been locked.Sto::check_in_progress()
be an assertion?Vector
uses conflictingly-typed keys (Vector* this vs. int), all keys should be same typecheck_predicate
cleanup
only ifhas_write
Final version
versioned_value_struct
leaks memoryTransactional versions
TVersion
type which encapsulates a version numberadd_read(TVersion)
to automatically handle opacityPriorityQueue::empty_key
work? Is that actually a predicate?Eric Koskinen
PLDI paper