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?
-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
>>>>>>>> (cd .libs && rm -f libdrizzle.la && ln -s ../libdrizzle.la
>>>>>>>> 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]
Unsubscribe : https://launchpad.net/~drizzle-discuss
More help : https://help.launchpad.net/ListHelp