Toru Maesaka wrote:
> Hi guys,
> 
> Letting you all know that I've begun working on freeing libdrizzle from
> mysys. So far I've replaced my_malloc/my_free with malloc(3)/free(3) and
> I'm about to get rid of my_bools. Hopefully libdrizzle will be freed
> from mysys in no time :)
> 
> Btw, the branch I'm working with is lp:~dev-torum/drizzle/libdrizzle-cleanup

Cool. I'm assigning you to the blueprint for my_malloc/my_free cleanup.

As a warning, there are three larger/uglier things in the mysys freedom
you'll hit (we just did this last week and are re-doing it now in
smaller pieces)

MEM_ROOT
MYSQL_CHARSET
client_error[]

Welcome to the fun!

> Cheers,
> Toru
> 
> On Thu, Jul 24, 2008 at 7:03 AM, Monty Taylor <[EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]>> wrote:
> 
>     Jay Pipes wrote:
>     > OK, Patrick and MontyT, I have set up all the tasks and subtasks on
>     > Launchpad as blueprints, and added dependencies between them.
>      Some have
>     > already been assigned to each of you.
>     >
>     > Like I mentioned to Monty on IRC, here is what I propose for
>     development
>     > process of these interrelated tasks:
>     >
>     > The easiest way to work on this stuff is bzr branch from trunk into a
>     > local branch named the same as the blueprint task (takes care of
>     > uniqueness there!) and then push to
>     ~mordred/drizzle/blueprint-name.  I
>     > will then take care of merges into the depending branches locally,
>     > resolve conflicts, and push a branch to the
>     > ~drizzle-developers/drizzle/medium-blueprint-name
>     >
>     > Work for everyone?
> 
>     Yes ... except I think that in some cases we might be able to merge
>     directly back to trunk, depending on the blueprint and the state of
>     other work, etc... but that's what communication is all about!
> 
>     > -jay
>     >
>     > Monty Taylor wrote:
>     >> Jay Pipes wrote:
>     >>> Monty Taylor wrote:
>     >>>> Yes. That should be DRIZZLE *...
>     >>>> Ok. I think I have officially drug this branch down the
>     rathole. I'm
>     >>>> terribly sorry for wrecking work and delaying DBD::drizzle...
>     >>> Don't apologize, there is no need to. :)
>     >> Thanks guys.
>     >>
>     >>>> Jay just sent me an email about his work in the tree today,
>     which came
>     >>>> to the sensible conclusion that the changes I was committing
>     were too
>     >>>> interwoven to be able to backtrack through them successfully...
>     and he's
>     >>>> totally right.
>     >>>>
>     >>>> Jay is going to look at starting from scratch from trunk and
>     starting to
>     >>>> apply the patches one bit at a time. (I think I know where it
>     broke, but
>     >>>> it's all too much atm)
>     >>>>
>     >>>> I think we should/can divvy this up a bit, so we don't (and by
>     we, this
>     >>>> week I seem to mean me) break each other's work.
>     >>>>
>     >>>> SO, I propose these related but unrelated tasks.
>     >>> Yes, small, bitesize tasks, each attached to a blueprint which
>     can be
>     >>> made dependent on each other.  Create a branch for each small task,
>     >>> attached to the blueprint.  Merge proposals will go from small task
>     >>> branch -> medium task branch -> large task branch ->trunk.  I am
>     happy
>     >>> to manage the blueprint dependencies and simply assign them to
>     you and
>     >>> Patrick as you want them...I am also working on putting together a
>     >>> buildbot master soon so we can start automating builds and tests.
>     >> I mostly agree, but I'm not 100% sure each of the bullet points
>     needs to
>     >> be a full blueprint/branch on its own, since some of the bullet
>     points
>     >> weren't split by task as much as just to try to remember each
>     bit... but
>     >> I'm good either way.
>     >>
>     >>>> TASK ONE: Rename mysql to drizzle OR to something more generic
>     where it
>     >>>> will touch storage engines. This includes:
>     >>> The above is a medium task, composed of the below small tasks...
>     >>>
>     >>>>   - Replacing use of the MYSQL_TYPE_* constants to FIELD_*
>     >>>>   - Renaming MYSQL_* types in drizzle.h to DRIZZLE_*
>     >>>>   - Renaming MYSQL* defines to DRIZZLE*
>     >>>>   - Changing mysql_init() to drizzle_create()
>     >> Forgot to add:
>     >>
>     >> - Rename mysql_* functions to drizzle_*
>     >>
>     >> doh.
>     >>
>     >>> Cool. :)
>     >>>
>     >>>>   - Moving my_thread_init(), my_net_init(), etc. into
>     drizzle_create()
>     >>> Excellent.
>     >>>
>     >>>>   - Rename mysql_real_* to just drizzle_*
>     >>> Or killing them off completely.  If it smells like a hack, it
>     probably is....
>     >> Yes... most of the *_real_* methods are stupid wrappers around
>     old calls
>     >> in an attempt to ease ABI transitions. But I don't care about that...
>     >>
>     >> Also, might want to add:
>     >>
>     >> - Rename functions starting with cli_*
>     >>
>     >> that might be short for "client" (which is overused word anyway)
>     but it
>     >> makes me think "Command Line Interface", so I hate it.
>     >>
>     >>>> (I think I can re-do the first four bullets above pretty
>     quickly now
>     >>>> that I know where it's all hanging together. I'd like someone
>     else to
>     >>>> look at bullet 5 - I think it needs a different set of eyes.)
>     >>> Happy to.
>     >>>
>     >>>> TASK TWO: Remove the mysys/mystrings depends from libdrizzle.
>     The main
>     >>>> depends are charsets, my_malloc/my_free, some lame string
>     manipulation
>     >>>> functions (and one nice one), bad header file organization and
>     errors.
>     >>>> (Could conceivably be done in parallel... but probably should
>     wait for
>     >>>> the above to be done and merged)
>     >>> Again, this is a medium task with the following smaller tasks.  What
>     >>> should be decided is whether indeed this can be done in parallel
>     or this
>     >>> is dependent on the above tasks being completed.  I suspect that
>     they
>     >>> can be done in parallel but in separate, smaller trees.
>     >> Yes, you are probably right here.
>     >>
>     >>>>   - Replacing my_malloc/my_free with normal malloc/free
>     >>> Sure, but some places should not be a blanket replacement.  I
>     noticed a
>     >>> couple places in your tree where my_multi_malloc() was replaced with
>     >>> many small malloc calls, which is not efficient...perhaps for
>     now tackle
>     >>> single malloc calls.  IMHO, For this tree, it is essential that
>     valgrind
>     >>> be run cleanly before any merge into another tree...
>     >> Agree. What do you think we should do with my_multi_malloc? Also,
>     some
>     >> of the my_free calls when replaced need to be prefixed with a
>     >> if (bla!=NULL)  protection.
>     >>
>     >>>>   - Removing use of non-standard string functions
>     >>>>   - Removing charset references from libdrizzle (make the lib
>     send the
>     >>>>       bytes the programmer sends)
>     >>> Heh, these two might have to wait a bit...
>     >> Non-standard string functions in libdrizzle turned out to be
>     surpisingly
>     >> easy to eradicate.
>     >>
>     >> The charset references actually also aren't _too_ terrible... but I
>     >> agree, there is a larger conversation here... but it's got to go
>     if we
>     >> want libsys out of libdrizzle - or we've got to figure out a way to
>     >> sensibly pull in only the bits we absolutely have to have
>     >>
>     >>>>   - Moving some stuff around in headers (I think I did this mostly
>     >>>>       right, so most of this can be copied verbatim)
>     >>>>   - Removing use of MEM_ROOT in libdrizzle. This most affects
>     >>>>       MYSQL_FIELD and MYSQL_ROWS. While we're at it, we curse the
>     >>>>       MYSQL_ROWS implementation. (BTW Stewart - the first time
>     I did
>     >>>>       this, I was yearning for talloc...)
>     >>> This is a medium task in itself in my opinion, even if only for
>     >>> libdrizzle.  Messing with MEM_ROOT is a serious undertaking.  I
>     would
>     >>> recommend moving this to a separate medium task and branch.
>     >> Agree. There are a couple of places where it especially sucks. But
>     >> definitely only talking about libdrizzle.
>     >>
>     >>>> TASK THREE: Figuring out what to do with the ER() macros and
>     >>>> client_errors[] (NOT RELATED TO THE ABOVE... CAN BE PARALLEL)
>     >>>>       (I didn't do this right the first time at all)
>     >>>>   This whole thing is a mess, as there are global static arrays
>     that are
>     >>>>   shared between client and server, and we generate these
>     things with
>     >>>>   comp_err. I'd say it's a later design issue to be solved, but
>     it's
>     >>>>   keeping libdrizzle tied to mysys... and it's a spiderweb anyway.
>     >>> This task should be dependent on both medium task 1 and 2 (b/c of
>     >>> changes to the same files in #1 and movement of header files in #2)
>     >> Agree.
>     >>
>     >> I should also mention that there are a couple of places where the
>     IMPL
>     >> code of libdrizzle references mysqld errors (ER_*) as a protocol
>     >> library, this is insane... either the error codes are ones defined by
>     >> the protocol (in which case they should be defined by the lib) or
>     they
>     >> are internal mysqld errors, in which case the client should never
>     see them.
>     >>
>     >>>> Once all of that is done and all still compiles and is merged,
>     _then_ we
>     >>>> can tackle (instead of doing it all in one fell swoop):
>     >>>>
>     >>>> - Removing references to deprecated things in client/
>     >>>>
>     >>>>   - Password support functions
>     >>>>   - Unix Domain Sockets
>     >>>>   - Shared Memory
>     >>>>   - Embedded Server
>     >>>>   (but keeping the command line options as null-ops for now)
>     >>> Yep, medium task with subtasks all dependent on #1,2,3.
>     >> Agree.
>     >>
>     >>>> - Removing mysys/mystrings from client/
>     >>> This is going to be a larger debate. ;)
>     >> Tell me about it. :)
>     >>
>     >>>> - moving mysqlbinlog to a binlog dir, which will eventually
>     also house
>     >>>> binlong related files from server/ for a libbinlog ... but that's a
>     >>>> whole other thing.
>     >>> Sure.
>     >>>
>     >>>> Hopefully if we do it right, dormando and krow can continue
>     working on
>     >>>> the blocking/non-blocking IO issue, and possibly krow's interest in
>     >>>> removing vio...
>     >>> Sure.
>     >>>
>     >>>> At this point, libdrizzle can become a source package with no
>     external
>     >>>> depends. and we can:
>     >>>>
>     >>>> - Rearrange/split up header files and code for libdrizzle -
>     sort of like
>     >>>> how libmemcached is - file for DRIZZLE_ROW, file for
>     DRIZZLE_FIELD, etc.
>     >>> Yep, this is the last major task...
>     >>>
>     >>>> Thoughts/comments? Bricks to the head? If this sounds good to
>     you guys,
>     >>>> I'll transfer it to the blueprint...
>     >>> Happy to help.  Shall we get going? :)
>     >> Hell yes.
>     >>
>     >>> -jay
>     >>>
>     >>>> Monty
>     >>>>
>     >>>> Patrick Galbraith wrote:
>     >>>>> Monty,
>     >>>>>
>     >>>>> Now I get this error:
>     >>>>>
>     >>>>> o -MD -MP -MF ".deps/linktest.Tpo" -c -o linktest.o linktest.c; \
>     >>>>> then mv -f ".deps/linktest.Tpo" ".deps/linktest.Po"; else rm -f
>     >>>>> ".deps/linktest.Tpo"; exit 1; fi
>     >>>>> linktest.c:2:25: error: mysql/mysql.h: No such file or directory
>     >>>>> linktest.c: In function 'main':
>     >>>>> linktest.c:13: error: 'MYSQL' undeclared (first use in this
>     function)
>     >>>>> linktest.c:13: error: (Each undeclared identifier is reported
>     only once
>     >>>>> linktest.c:13: error: for each function it appears in.)
>     >>>>> linktest.c:13: error: expected ';' before 'my'
>     >>>>> linktest.c:15: error: 'my' undeclared (first use in this function)
>     >>>>> make[1]: *** [linktest.o] Error 1
>     >>>>>
>     >>>>> So, linktest.c has:
>     >>>>>
>     >>>>> nt main(int argc, char** argv) {
>     >>>>>
>     >>>>> (void)argc;
>     >>>>> (void)argv;
>     >>>>>
>     >>>>> MYSQL my;
>     >>>>>
>     >>>>> ...
>     >>>>>
>     >>>>> Shouldn't it be DRIZZLE my ?
>     >>>>>
>     >>>>> Monty Taylor wrote:
>     >>>>>> Patrick Galbraith wrote:
>     >>>>>>
>     >>>>>>> Monty Taylor wrote:
>     >>>>>>>
>     >>>>>>>> I stuck a file called "linktest.c" into the libdrizzle dir
>     to test for
>     >>>>>>>> missing symbols in libdrizzle while we were removing
>     depends. Sounds
>     >>>>>>>> like it got removed.
>     >>>>>>>>
>     >>>>>>>> Patrick Galbraith wrote:
>     >>>>>>>>
>     >>>>>>>>> I have all the client calls renamed to drizzle_xxx and when
>     >>>>>>>>> compiling, get this error that doesn't tell me much:
>     >>>>>>>>>
>     >>>>>>>>> creating libdrizzle.la <http://libdrizzle.la>
>     >>>>>>>>> (cd .libs && rm -f libdrizzle.la <http://libdrizzle.la> &&
>     ln -s ../libdrizzle.la <http://libdrizzle.la>
>     >>>>>>>>> libdrizzle.la <http://libdrizzle.la>)
>     >>>>>>>>> make[1]: *** No rule to make target `linktest.o', needed by
>     >>>>>>>>> `linktest'.  Stop.
>     >>>>>>>>>
>     >>>>>>>>> That's the only error, everything else seems to go fine. Any
>     >>>>>>>>> thoughts? I could push this to a special tree if anyone
>     wants to look
>     >>>>>>>>> at it.
>     >>>>>>>>>
>     >>>>>>>>> --Patrick
>     >>>>>>>>>
>     >>>>>>>>>
>     >>>>>>> Monty,
>     >>>>>>>
>     >>>>>>> Could you please re-commit/push  ? ;)
>     >>>>>>>
>     >>>>>> Yes! Committing-pushing right now!
>     >>>>>>
>     >>>>>> Monty
>     >>>>>>
>     >
> 
> 
>     _______________________________________________
>     Mailing list: https://launchpad.net/~drizzle-discuss
>     Post to     : [email protected]
>     <mailto:[email protected]>
>     Unsubscribe : https://launchpad.net/~drizzle-discuss
>     More help   : https://help.launchpad.net/ListHelp
> 
> 


_______________________________________________
Mailing list: https://launchpad.net/~drizzle-discuss
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~drizzle-discuss
More help   : https://help.launchpad.net/ListHelp

Reply via email to