From: Alex Esterkin Date: May 12 2009 7:13pm Subject: Re: MySQL Reengineering Project List-Archive: http://lists.mysql.com/internals/36652 Message-Id: <81f5410f0905121213v6d127921r1ecf9cf618c0482d@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable That THD=3Dpthread, is just an implementation detail. For all semantic purposes, THD=3DSession. It makes no sense for a statement to use several THDs, especially in a transactional storage engine context. If you need multithreading, start a thread group under the THD thread. Similarly, what is the point of running several statements in one THD? What do you do with results? In my opinion, it is much cleaner and better to implement such concurrency at the protocol level, like it is done in Drizzle, or at the storage engine level. Regards, Alex Esterkin On Tue, May 12, 2009 at 2:54 PM, Sergei Golubchik wrote: > Hi, Brian! > > On May 12, Brian Aker wrote: >> On May 12, 2009, at 11:14 AM, Sergei Golubchik wrote: >> >>> =A0- init() function. Brian added that to pass handlerton down. >>> =A0 =A0it is ignored by any clean plugin API and should've been done >>> =A0 =A0differently for storage engines and I_S tables. >> >> You should take a look at what Drizzle does as an example: >> >> static int compressionudf_plugin_init(PluginRegistry ®istry) >> { >> =A0 registry.add(&compressudf); >> =A0 registry.add(&uncompressudf); >> =A0 registry.add(&uncompressed_lengthudf); >> =A0 return 0; >> } > > Yes, I've seen that :) > >> If I remember correctly the void * was used because before the solution = you >> had devised required that every time we updated a structure we had to >> update every single plugin (and the original pointer change was done by >> Tomas Ulin, not myself). > > Right, I remember. It was inconvenient, indeed. > > The main reason, of course, was that we don't have a clean external > storage engine API (compare with fulltext parser plugins - no API > changes in three years). > > Still, this could've been fixed differently, without a void* pointer. > >>> =A0- MYSQL_THD is defined as void*, which is fine as it's an opaque >>> =A0 =A0pointer, plugins are never expected to look inside to cast it to >>> =A0 =A0anything. >> >> write_row() in the handler is another example of exposing vs encapsulati= on >> (which is fine... if you want to go with C over C++). > > write_row() as you know, and as was mentioned in this thread, doesn't > use its argument at all. We could just as well declare it as a method > without arguments. At least it would've been less misleading. > >>>> Without doing this, and using encapsulation so that a THD can have >>>> multiple Statements, it will be very difficult to work on any future >>>> parallelization efforts. >>> >>> You mean, a Statement can have multiple THDs, I suppose :) >> >> No he means what he is saying. I don't know why you would want a stateme= nt >> shared across multiple THD, but having a THD be able to handle multiple >> statements means that you can do asynchronous queries within a single >> connection. > > Ah, okay. I see. > > I thought that "parallelization", that Jay mentioned, means executing > parts of a single statement in different threads - which, indeed, may > need two THDs sharing the same Statement. > > Regards / Mit vielen Gr=FC=DFen, > Sergei > > -- > =A0 __ =A0___ =A0 =A0 ___ ____ =A0__ > =A0/ =A0|/ =A0/_ __/ __/ __ \/ / =A0 Sergei Golubchik > =A0/ /|_/ / // /\ \/ /_/ / /__ =A0Principal Software Engineer/Server Arch= itect > /_/ =A0/_/\_, /___/\___\_\___/ =A0Sun Microsystems GmbH, HRB M=FCnchen 16= 1028 > =A0 =A0 =A0 <___/ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0Sonnenallee 1, 85551= Kirchheim-Heimstetten > Gesch=E4ftsf=FChrer: Thomas Schroeder, Wolfgang Engels, Wolf Frenkel > Vorsitzender des Aufsichtsrates: Martin H=E4ring > > -- > MySQL Internals Mailing List > For list archives: http://lists.mysql.com/internals > To unsubscribe: =A0 =A0http://lists.mysql.com/internals?unsub=3Daesterkin= @gmail.com > >