[elephant-devel] patches for 1.0

Ian Eslick eslick at media.mit.edu
Fri Feb 6 15:50:31 UTC 2009


Pushed to elephant-1.0.  -Ian

On Feb 6, 2009, at 6:49 AM, Alex Mizrahi wrote:

> ;; gmane was eating message with patch attached without forwarding  
> it to mailing list, so
> ;; i'm now trying with email
>
> here's bunch of patches for 1.0:
>
> * postmodern documentation update
>
> i've updated documentation in postmodern-backend.texinfo.
> i'm not really good at texinfo, so it might be not pretty, but at  
> least it
> covers important aspects.
> upgrade is not yet documented.
>
> by the way, i've noticed that postmodern-backend.texinfo is not  
> included
> into documentation, and neither does sql-backend.texinfo, by the  
> way, so
> this stuff is not included into documentation. weird.
> i did not fix it because i'm not sure what were intentions of having
> different pieces of documentation. (and also i'm not sure how to  
> cope with
> links).
>
> also i've found i cannot build documentation on my machine, includes
> directory is empty, and makeinfo complains, is it ok?
>
> * db-postmodern: proper transaction handling
>
> *current-transaction* was not bound properly in execute-transaction
>
> * db-postmodern: dup btree value type
>  there were some issues with value types in dup btrees..
>
> * db-postmodern: btree upgrade handling, btree wrappers. WARNING:
> incompatible store format!
> * tests for mixed-type btrees
>  tests for former patch
> * db-postmodern: hardened type handling
>  there was some mess with types where db-postmodern could accept some
> values where it should not.
>  now it's pretty strict with this, but it might signal errors if you  
> were
> using it in messy
>  way (like looking for a string where all values are integers), be
> careful.
> * db-postmodern: cursor semantics
>  cursor-delete now does not close cursor
>
> -----
>
>
>
> btree upgrade handling is what i was fighting with. the thing is  
> that in
> db-postmodern btree keys and values are (separately) typed, key-type  
> can be
> one of four values:
> * nil -- btree is empty
> * integer -- all keys are integers
> * string -- all keys are strings
> * object -- keys are stored indirectly and can be of any type (in  
> this case
> ranged queries and sorting do not work).
>
> sometimes btree key type might need to be upgraded -- from nil to  
> integer or
> string or object, and from integer or string to object. second type of
> upgrades were not working at all, but after i've fixed that, i've  
> found out
> there are more problems..
>
> the main problem is that state of btree (its table, queries and  
> types) is
> loaded only when btree is loaded and never updated in process. this  
> is a
> problem if multiple processes are connected -- one process could  
> upgrade
> btree, and another would not know about it. this got fixed via  
> catching
> errors in execute-prepared-statement function and updating btree  
> state when
> errors of certain type are detected. (there are some more subtleties  
> in
> this.)
>
> another problem is that btree state is shared by all threads in  
> process, and
> if one thread tries to update state, other might be confused. i've  
> solved
> this problem like this -- now btree states are recorded per  
> connection (that
> is associated with thread) rather than globally, so it is ok to  
> update this
> state.
>
> unfortunately, to implement this correctly i had to change store  
> format a
> bit -- now metatree table has additional bt_oid column.
> it should be easy to upgrade from old format to new with a few SQL
> statements, but i dunno if anybody needs this, so i did not
> bother checking this so far.
>
> there were lots of changes and there are lots of different cases in  
> this
> issues, so i'd appreciate if somebody helps testing this.
> particularly it would be great to test btree upgrades -- that is,  
> you create
> btrees in one process and write some values of different
> types into it, while other processes/threads load these btrees and  
> try to
> use it in various way.. stuff like this.
> or it would be at least nice to know that new changes did not broke  
> some
> functionality -- it passes all tests, but who knows.
> <patchbundle.hunks.gz>_______________________________________________
> elephant-devel site list
> elephant-devel at common-lisp.net
> http://common-lisp.net/mailman/listinfo/elephant-devel





More information about the elephant-devel mailing list