Update of /project/elephant/cvsroot/elephant In directory clnet:/tmp/cvs-serv17940
Modified Files: TODO Log Message: Further rethink of roadmap and TODO tasks
--- /project/elephant/cvsroot/elephant/TODO 2006/09/04 05:01:05 1.24 +++ /project/elephant/cvsroot/elephant/TODO 2006/09/04 05:42:43 1.25 @@ -8,28 +8,19 @@
Bugs or Observations:
-Multi-threading operation: -- Make elephant thread-bound variables dynamic and modifiable by backends -- Ensure serialization is multi-threaded -- Verify that operations such as indexing are thread safe - Stability: - Review all the NOTE comments in the code - Remove build gensym warnings in sleepycat -- Port elephant to closer-to-MOP to make it easier to support additional lisps (Both) -- (From Ben's e-mail) We are storing persistent objects incorrectly. They should be - stored only as OIDs, and we should have a separate OID->class table. This way - change-class can be handled correctly. This also non-trivially compresses storage - in the database as we only need to store oids rather than serialized class names. - [Ian comment: only problem with this is an extra access to oid table each time a - class is deserialized and overall storage is constant. Would make it easy to - invalidate objects though!] +- Remove sleepycat name. Change sleepycat to db-bdb to reflect oracle ownership and avoid + confusion for new users - Delete persistent slot values from the slot store with remove-kv to ensure that there's no data left lying around if you define then redefine a class and add back a persistent slot name that you thought was deleted and it gets the old value by default. +- Cleaner failure modes if operations are performed without repository or without + transaction or auto-commit (Both)
-Stores: +Store variables: - Think through default *store-controller* vs. explicit parameter passing referencing all over the APIs - Think about dynamic vs. object based store & transaction resolution? @@ -37,57 +28,74 @@ - Current store specific *current-transaction* stack - Throw condition when store spec is invalid, etc
-Transactionalism: -- Cleaner failure modes if operations are performed without repository or without - transaction or auto-commit (Both) +Multi-threading operation: +- Make elephant threads appropriately bind dynamic variables +- Verify that operations such as indexing are thread safe
BDB Features: +~ Automatically run db_deadlock when opening a bdb backend? Requires path to + functions and ability to launch shell command. Closing the store stops the + sub-process. +- Always support locks that timeout? Tradeoffs? +- Roll deprecation of *auto-commit* through code base so leaf functions stop referring to it - Trace all paths to db-put or db-delete and ensure that there is a check or a default with-transaction around the primitive components - write a document clarifying transaction design & assumptions in the backend] Add asserts if *auto-index* is false and we're not in a transaction to help users avoid lockups in bdb? Should be able to turn off for performance but it will help catch missing with-transaction statemetns in user code. (Both) -~ Automatically run db_deadlock when opening a bdb backend? Requires path to - functions and ability to launch shell command. Closing the store stops the - sub-process. -- Always support locks that timeout? Tradeoffs? +- Figure out how to compact a specific btree and/or key-range using optimize-storage. + Probably need to update keyword part of the API + +Indexing efficiency and policies: +- Add :inverse-reader to slot options to create a named method that indexes into objects + based on slot values. Is this a GF or defun? Do we dispatch on class name or bake it in? +- Reclaim table storage on index drop? It's nice to be able to reconnect sometimes! + Perhaps an API command that allows explicit dropping of tables for a class and a policy + parameter that determines if this is the default? +- Should we delete slot-values in the db when redefining classes, currently those values + stay around - probably indefinitely unless we GC
Performance: - Metering and understanding locking issues. Large transactions seem - to use a lot of locks. In general understanding how to use Sleepycat + to use a lot of locks. In general understanding how to use Berkeley DB efficiently seems like a good thing. (From Ben) - Add dependency information into secondary index callback functions so that we can more easily compute which indices need to be updated to avoid the global remove/add in order to maintain consistency (Ian) - Improve SQL serializer performance (Robert/Ian)
-Indexing features: -- Add :inverse-reader to slot options to create a named method that indexes into objects - based on slot values. Is this a GF or defun? Do we dispatch on class name or bake it in? - -Compliance and Efficiency: - - Update to support BDB 4.4 - - Add ability from within lisp to reclaim DB space after deleting btree key-value pairs - - Reclaim table storage on index drop - - Should we delete slot-values in the db when redefining classes, currently those values - stay around - probably indefinitely unless we GC +Test coverage: +- Test for optimize storage method (just add probe-file methods to get file size) +- Multi-threading stress tests? Ensure that there are conflicts and lots of serialization + happening concurrently to make sure that multi-threading is in good shape + +Documentation: +- Add notes about with-transaction usage (abort & commit behavior on exit) +- Add notes about optimize-storage +- Add notes about new BDB 4.4 *auto-commit* behavior. Default for entire store-controller, + will auto create a transaction if none is active if open with :auto-commit t or will + never auto-commit (regardless of operator flags) if it is not. Make sure open-store + defaults to auto-commit and there is a flag to turn it off.
0.6.1 - Features COMPLETED to date ---------------------------------- +x Ensure serialization is multi-threaded and efficient x Determine how to detect deadlock conditions as an optional run-safe mode? x BDB overwrite of values makes DB grow [So far I can only find that it grows on the 2nd write, but not after that...artifact of page allocation or caching of memory pools?] x FEATURE: Investigate BDB record size; it's 2x larger than expected? [Ditto above] +x Update to support BDB 4.4 + x Add ability from within lisp to reclaim DB space after deleting btree key-value pairs
-0.6.2 - Query & indexing expansion (Fall '06) + +0.6.2 - Advanded work, low-hanging fruit (Fall '06) -------------------------------------------------- - - Simple object query language (Ian - orthogonal, on main branch) - - Add needed support (if any) for persistent graph structures & queries (Ian on a branch) + - Port elephant to closer-to-MOP to make it easier to support additional lisps and to + seriously clean up metaclasses.lisp and classes.lisp protocols - A wrapper around migration that emulates a stop-and-copy GC - - Fast serializer port & upgrade strategy
0.6.3 - Documentation & Tools (Winter '06) -------------------------------------------------- @@ -99,21 +107,19 @@ - A guide to dealing with multiple open stores - A guide to performance - An overview of licensing issues... - - Repository browser (Ian - orthogonal, on main branch) - (a simple REPL tool to see what classes are in a repository and - what state they're in...useful for long-lived repositories)
-0.6.4 - Additional datastructures (?) +0.7.0: Fast In-Memory Database (Not backwards compatible) -------------------------------------------------- - - Native BDB persistent hashes (easy; can do on SQL backends?) - - Support for cheap persistent sets (medium? can do on SQL?) - -Some placeholders & dreams features below... :) - -0.7+: Major features (Winter '07) --------------------------------------------------- - - A native lisp backend controller (Ian) - - Integrate prevalence-like in-memory database system (Robert?) + - Integrate prevalence-like in-memory database system + - Fast serializer port w/ upgrade strategy and prevalence like storage solution + - Further improve SQL 64-bit serialization performance (if possible) + - (From Ben's e-mail) We are storing persistent objects incorrectly. They should be + stored only as OIDs, and we should have a separate OID->class table. This way + change-class can be handled correctly. This also non-trivially compresses storage + in the database as we only need to store oids rather than serialized class names. + [Ian comment: only problem with this is an extra access to oid table each time a + class is deserialized and overall storage is constant. Would make it easy to + invalidate objects though!] - Richer controller modes: - Single-user mode (cache values in instance slots for fast reads, write-through) - Prevalence mode (read/write to normal slots except on object creation or synch) @@ -122,6 +128,31 @@ - Concurrent mode (for backends that allow multiple processes to connect, current default) - Controller 'switches' - NoSynch - allow transactions to be lost on failure but maintains consistency instead of performance + - Usage model examples + +0.7.1 - Elephant/BDB/SQL Production Release +-------------------------------------------------- + - More work on testing, examples and documentation + - Intent is for this to be a major, long-term supported release prior + to work on the new backend + +0.7.2 - Additional Tools +-------------------------------------------------- + - Add needed support (if any) for persistent graph structures & queries (Ian on a branch) + - Simple object query language (Ian - orthogonal, on main branch) + - Repository browser (Ian - orthogonal, on main branch) + (a simple REPL tool to see what classes are in a repository and + what state they're in...useful for long-lived repositories) + +0.8.0 - Native Backend & Datastructure Library ( +-------------------------------------------------- + - A native lisp backend controller (Ian) + - Native BDB persistent hashes (easy; can do on SQL backends?) + - Support for cheap persistent sets (medium? can do on SQL?) + - Usage model examples + + +
======================================================== ========================================================