[Maria-developers] MariaDB plugin interface and embedded library compatibility
Hi guys, I'm not able to find any information about compatibility assurance of server side -- i.e plugin interface and libmysqld.so library. I expect both should have stable API at least for one minor version across bugfix releases, but I don't believe that libmysqld.so is able to preserve ABI compatibility, since the set of exported symbols there is really huge. Can you, please, provide some simple statement (ideally as an article) what is your best afford and if we can expect API/ABI of plugin/libmysqld.so interfaces? Thanks and regards, Honza
Hi, Honza! On Jan 21, Honza Horak wrote:
Hi guys,
I'm not able to find any information about compatibility assurance of server side -- i.e plugin interface and libmysqld.so library. I expect both should have stable API at least for one minor version across bugfix releases, but I don't believe that libmysqld.so is able to preserve ABI compatibility, since the set of exported symbols there is really huge.
Can you, please, provide some simple statement (ideally as an article) what is your best afford and if we can expect API/ABI of plugin/libmysqld.so interfaces?
libmysqld.so API is stable as long as one uses only the documented client-server API. One can link with libmysqlclient or libmysqld, but the API doesn't change. If one invokes internal libmysqld.so functions directly - there are no promises about that, they can change even in a minor version. Plugin interfaces do not change as long as the plugin API version doesn't change. All plugin-related interfaces are versioned internally and the server compares plugin API versions before running a plugin. Currently in MariaDB 5.5 there are 17 versions protecting various parts of the plugin API. There are no promises when a particular version will or will not change, but practically, API versions for storage engines, information_schema tables and daemon plugins change with every bugfix release. While other 14 versions change very rarely, less than once per major release. Regards, Sergei
Hi!
"Honza" == Honza Horak <hhorak@redhat.com> writes:
Honza> Hi guys, Honza> I'm not able to find any information about compatibility assurance of Honza> server side -- i.e plugin interface and libmysqld.so library. I expect Honza> both should have stable API at least for one minor version across bugfix Honza> releases, but I don't believe that libmysqld.so is able to preserve ABI Honza> compatibility, since the set of exported symbols there is really huge. Honza> Can you, please, provide some simple statement (ideally as an article) Honza> what is your best afford and if we can expect API/ABI of Honza> plugin/libmysqld.so interfaces? A lot of the symbols in libmysqld.so comes from the internals of MariaDB and these may change from release to release. What is not changing, except between major releases, is the structures and calls to the libmysqlclient interface. In other words, if you are using libmysqld.so as a standalone database using the client interface, things are not usually changing between minor releases. If you are using internal structures in libmysqld, like THD, then you have to recompile your code for each releases. I have now adde the above in an kb article at: https://mariadb.com/kb/en/embedded-mariadb-interface/ Regards, Monty
Thanks for your quick answers, guys, very appreciated. Regards, Honza On 01/21/2014 03:31 PM, Michael Widenius wrote:
Hi!
"Honza" == Honza Horak <hhorak@redhat.com> writes:
Honza> Hi guys, Honza> I'm not able to find any information about compatibility assurance of Honza> server side -- i.e plugin interface and libmysqld.so library. I expect Honza> both should have stable API at least for one minor version across bugfix Honza> releases, but I don't believe that libmysqld.so is able to preserve ABI Honza> compatibility, since the set of exported symbols there is really huge.
Honza> Can you, please, provide some simple statement (ideally as an article) Honza> what is your best afford and if we can expect API/ABI of Honza> plugin/libmysqld.so interfaces?
A lot of the symbols in libmysqld.so comes from the internals of MariaDB and these may change from release to release.
What is not changing, except between major releases, is the structures and calls to the libmysqlclient interface.
In other words, if you are using libmysqld.so as a standalone database using the client interface, things are not usually changing between minor releases.
If you are using internal structures in libmysqld, like THD, then you have to recompile your code for each releases.
I have now adde the above in an kb article at: https://mariadb.com/kb/en/embedded-mariadb-interface/
Regards, Monty
participants (3)
-
Honza Horak
-
Michael Widenius
-
Sergei Golubchik